Chapter 5 重做日志文件
除了回复之外还要考虑效率,数据库中日志文件是一个频繁操作的文件,文件越大效率越低,为了确保效率,日志文件尽可能的小,但是小容易被填满,所以引入了分组。
NOTE:
1. 同组中每个成员所存的信息完全相同。
2. LGWR在同一时刻只能写一组重做日志组。
当前组叫做Current,LGWR把相同的信息从rodo log buffer中复制到该组的每个重做日志文件Member中,他以循环方式写重做日志组的。当一组写满时,开始写下一组,称之为日志切换(Switch)。
一圈下来后,我们要将内容archived(归档),这样不会被覆盖掉。
重做日志组是联机的,也就是说ORACLE在运行的时候是要管理他们的,
归档日志是脱机的,是不需要管理的。
当前重做日志组的所有成员都坏了,ORACLE会关闭系统。所以DBA要经常看报警文件,发现问题及时修复。
5.4 日志切换和检查点
强制性产生重做日志切换的命令为:alter system switch logfile
强制产生检查点的命令为:alter system checkpoint
Fast_start_mttr_target = 900
5.5获取重做日志的信息
SQL> select group#,sequence#,members,bytes,status,archived from v$log;
GROUP# SEQUENCE# MEMBERS BYTES STATUS ARC
---------- ---------- ---------- ---------- ---------------- ---
1 121 3 15728640 CURRENT NO
2 118 3 15728640 INACTIVE NO
3 119 3 15728640 INACTIVE NO
4 120 3 15728640 INACTIVE NO
5 117 3 15728640 INACTIVE NO
Status:
inactive:表示实例回复已不再需要这组联机重做日志组了。
active:表示这组联机重做日志组是活动的,但不是当前组,在实例恢复时需要这组联机重做日志组。如这组重做日志正在归档。
current:表示这组联机重做日志组是当前组,隐含是active的。
unused:表示ORACLE服务器从来没有写过这组重做日志。
SQL> set line 150
SQL> col member for a50;
SQL> select * from v$logfile;
GROUP#STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
3 STALE ONLINE D:\DISK3\ORCL\ONLINELOG\REDO
2 ONLINE D:\DISK3\ORCL\ONLINELOG\REDO
1 ONLINE D:\DISK3\ORCL\ONLINELOG\REDO
1 ONLINE D:\DISK6\ORCL\ONLINELOG\REDO01B.LOG NO
2 ONLINE D:\DISK6\ORCL\ONLINELOG\REDO02B.LOG NO
3 STALE ONLINE D:\DISK6\ORCL\ONLINELOG\REDO03B.LOG NO
4 STALE ONLINE D:\DISK3\ORCL\ONLINELOG\REDO
4 STALE ONLINE D:\DISK6\ORCL\ONLINELOG\REDO
4 STALE ONLINE D:\DISK9\ORCL\ONLINELOG\REDO
5 STALE ONLINE D:\DISK3\ORCL\ONLINELOG\REDO
5 STALE ONLINE D:\DISK6\ORCL\ONLINELOG\REDO
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
5 STALE ONLINE D:\DISK9\ORCL\ONLINELOG\REDO
3 STALE ONLINE D:\DISK9\ORCL\ONLINELOG\REDO
2 ONLINE D:\DISK9\ORCL\ONLINELOG\REDO
1 ONLINE D:\DISK9\ORCL\ONLINELOG\REDO
已选择15行。
l 空白:表示该文件正在使用
l Stale:表示该文件中的内容是不完全的
l Invalid: 表示该文件不可以访问
l Deleted:表示该文件已不再有用了
5.6 添加和删除联机重做日志文件组
SQL> alter database add logfile
2 ('D:\Disk3\redo
3 size
SQL> select group#,sequence#,members,bytes,status,archived from v$log;
GROUP# SEQUENCE# MEMBERS BYTES STATUS ARC
---------- ---------- ---------- ---------- ---------------- ---
1 121 3 15728640 CURRENT NO
2 118 3 15728640 INACTIVE NO
3 119 3 15728640 INACTIVE NO
4 120 3 15728640 INACTIVE NO
5 117 3 15728640 INACTIVE NO
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
3 STALE ONLINE D:\DISK3\ORCL\ONLINELOG\REDO
2 ONLINE D:\DISK3\ORCL\ONLINELOG\REDO
1 ONLINE D:\DISK3\ORCL\ONLINELOG\REDO
1 ONLINE D:\DISK6\ORCL\ONLINELOG\REDO01B.LOG NO
SQL> alter database drop logfile group 4;
数据库已更改。
5.7 添加和删除联机重做日志成员(文件)
SQL> alter database add logfile member
2 'D:\Disk3\redo01b.log' to group 1,
3 'D:\Disk3\redo02b.log' to group 2,
4 'D:\Disk3\redo03b.log' to group 3;
alter database drop logfile member
'D:\Disk3\redo03b.log';
5.8 清除联机重做日志文件
重新初始化日志文件:
ALTER DATABASE CLEAR LOGFILE GROUP 组号;
清除崩溃的重做日志文件:
ALTERDATABASE CLEAR UNARCHIVED LOGFILE GROUP 组号;
以下是一个数据库备份和清除一个重做日志文件的步骤:
1.
SQL> col name for a25
SQL> select * from v$controlfile;
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- ------------------------- --- ---------- --------------
D:\DISK3\CONTROL01.CTL NO 16384 430
D:\DISK6\CONTROL02.CTL NO 16384 430
D:\DISK9\CONTROL03.CTL NO 16384 430
2.
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
3.控制文件、数据文件和重做日志文件备份
SQL> host copy C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
已复制 11 个文件。
3. 口令文件和参数文件
SQL> host copy C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
C:\oracle\product\
已复制 62 个文件。
4. 启动
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 251661188 bytes
Database Buffers 352321536 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
5.
SQL> alter database clear logfile group 3;
数据库已更改。
5. 再来一个全备份
NOTE: 在这个过程中,要常常Check v$logfile & v$log;
5.9 利用OMF(Oracle Managed Files) 来管理联机重做日志文件
SQL> alter system set DB_CREATE_ONLINE_LOG_DEST_1='D:\Disk3';
系统已更改。
SQL> alter system set DB_CREATE_ONLINE_LOG_DEST_2='D:\Disk6';
系统已更改。
SQL> alter system set DB_CREATE_ONLINE_LOG_DEST_3='D:\Disk9';
系统已更改。
SQL> alter database add logfile;
数据库已更改。
SQL> alter database drop logfile group 4;
数据库已更改。