重做日志文件的结构体系:
--- Redo Log Files以组的形式组织在一起 --- 每个数据库至少要有2个组 --- 每个组至少要有2个成员,每个成员的大小和内容都完全相同,冗余保证安全 --- 在某个时间点上,只有一个组处于online状态(即数据库现在使用的是这个组) --- LGWR向当前online组的所有成员同时写入相同的redo log信息
相关参数: --- DB_CREATE_ONLINE_LOG_DEST_n:指定log file的存储目录 --- LOG_ARCHIVE_DEST_n:指定归档日志的存储目录 --- MAXLOGFILES:指定最多的日志组数目,在create database时用到,其最大值和默认值取决于OS --- MAXLOGMEMBERS:指定一个组最多有多少成员,在create database时用到 --- FAST_START_MTTR_TARGET:指定数据库进行崩溃恢复需要的秒数,当为0值时表示自动检查点调整生效。这个参数是一个阀值, 系统会监控这个参数当前的实际值, 达到(或者接近)这个目标值的时候, 系统就会触发ckpt 检查点, 触发dbwr来写数据, 以保持checkpoint queue的长度与这个参数的长度一致.。因为当这个参数的值较小的时候, 这个触发就比较频繁, ckpt进程,dbwr进程比较繁忙, 同时系统的恢复时间相对也就可以控制的比较短. --- FAST_START_IO_TARGET:控制了需要被恢复的数据块数目 --- LOG_CHECKPOINT_TIMEOUT:限制了上一检查点和最近的重做记录之间的秒数,但它对于设置恢复时间限制来说都是不够精确的。 --- LOG_CHECKPOINT_INTERVAL:设定了恢复过程中将要被读的重做记录的数目 --- LOG_CHECKPOINT_TO_ALERT:其值为TRUE或FALSE,当为TRUE时,系统发生Log Switch checkpoint时,相关信息被写入alert文件中。
工作原理:
--- 以循环方式(cyclic fashion)工作,请看上面的图
--- 日志切换(Log Switch):当一个日志文件(组)写满时,LGWR将会移到下一个组开始写工作
--- 日志切换时,发生checkpoint,相关infomation会被写到控制文件,并且会更新数据文件的头部信息
--- 当所有日志组都被写满时,如果你的数据库是archive模式,则触发archive进程,实行日志归档;如果你的数据库是noarchive模式,则会直接切到下一个日志,覆盖日志内容重新开始新一轮循环。
强制日志切换:ALTER SYSTEM SWITCH LOGFILE
强制checkpoint:
--- 设置参数FAST_START_MTTR_TARGET的值
--- 命令:ALTER SYSTEM CHECKPOINT
Sizing Log File:
--- Minimum size : 50KB
--- Maximum size : depend on the OS
--- 每个组的大小可以不同,但是同个组的每个成员肯定相同
--- 改变大小的方法:create new + remove old
Querying:
V$LOG : 反应日志组的信息
---------------------------------------------------------------
SQL> SELECT * FROM V$LOG;
GROUP# | THREAD# | SEQUENCE# | BYTES | MEMBERS | ARCHIVED | STATUS | FIRST_CHANGE# | FIRST_TIME |
1 | 1 | 2 | 52428800 | 1 | NO | INACTIVE | 565180 | 13-5月-07 |
2 | 1 | 3 | 52428800 | 1 | NO | CURRENT | 578116 | 13-5月-07 |
3 | 1 | 1 | 52428800 | 1 | NO | INACTIVE | 534907 | 13-5月-07 |
---------------------------------------------------------------
STATUS的值说明:
UNUSED:表示日志从未使用过,即新日志组
CURRENT:表示当前正在使用该组
ACTIVE:表示活动日志组,即脏缓存块还没有完全写入数据文件
CLEARING:表示该日志组是“正在被”(is being)被clear的re-created的,空的内容,在日志组被cleared以后,status就变为UNUSED。
CLEARING_CURRENT:显示that the current log file is being cleard of a closed thread. The log can stay in this stay in this status if there is some failure in the switch ,such as an I/O error writing the new log header.
INACTIVE:表示非活动组,即所有信息都已经归档
V$LOGFILE : 反应日志成员的信息
---------------------------------------------------------------
SQL> SELECT * FROM V$LOGFILE;
GROUP# | STATUS | TYPE | MEMBER | IS_RECOVERY_DEST_FILE |
3 | ONLINE | D:ORACLE_DB_HOMEORADATAORCLREDO03.LOG | NO | |
2 | ONLINE | D:ORACLE_DB_HOMEORADATAORCLREDO02.LOG | NO | |
1 | ONLINE | D:ORACLE_DB_HOMEORADATAORCLREDO01.LOG | NO | |
1 | ONLINE | D:ORACLE_DB_HOMEORADATAORCLREDO01_1.LOG | NO | |
2 | ONLINE | D:ORACLE_DB_HOMEORADATAORCLREDO02_1.LOG | NO | |
3 | ONLINE | D:ORACLE_DB_HOMEORADATAORCLREDO03_1.LOG | NO |
---------------------------------------------------------------
STATUS值说明:
INVALID:显示该文件处于不可访问状态
STALE:显示该文件的内容是不完整的(incomplete)
DELETED:显示该文件将不再使用(is no longer used)
Blank Space:空的内容表示这个文件现在正在使用(in use)
归档日志(Archive Log):
--- 在mount阶段可以改变数据库的归档模式:alter database archivelog/noarchivelog
--- 两种归档方式:1 手动Manually ; 2 自动Automatically(推荐)
--- 即使在自动归档方式下,dba也可以通过sql命令强制归档一个日志组
--- 参数LOG_ARCHIVE_START显示归档方式是自动(TRUE)或手动(FALSE);TRUE表示ARCn进程当日志写满发生log switch时自动归档写满的日志;FALSE表示需要DBA手工归档要发生log swtich的写满信息的log file。
--- 当成功归档后,在控制文件中会记录下列信息:the archive log name, log sequence number (of the just be archived log file), high and low SCN number.