重做日志文件的作用和目的是进行例程恢复和介质恢复,以及事务的撤销。
介质恢复需要借助于归档日志文件。事务的撤销需要借助于撤销表空间或撤销段。
重做记录
重做日志文件是由一条一条重做记录组成的。重做记录(redorecord)是由一个个修改向量(change vector)组成的。每个修改向量记录了对数据库中某个数据块所做的修改。
系统更改编号SCN(system change number)
SCN是由ORACLE自动生成的,随时间不短增大的、永不重复的一个整数,并且会自动分配给事务和语句。SCN是用于标识数据库变化的唯一标识号。SCN被记录在控制文件、数据文件的头部、数据块的头部和重做日志文件中。Oracle使用SCN来确定数据库在某个指定时间点的状态,为事务和语句提供一个读一致性的视图。
日志切换(log switch)
当LGWn后台进程停止向某个重做日志文件写入而开始向另一个联机重做日志文件写入的那一刻称为日志切换。即 ALTER SYSTEM SWITCH LOGFILE;
日志序列号
每当发生日志切换及LGWn后台进程开始进行填写时,ORACLE都会为该重做日志文件分配以个新的日志序列号。日志序列号是重做日志文件的使用标识号。其数值是顺序递增的。
每个联机或归档的重做日志文件通过它的日志序列号唯一标识号。在例程或介质恢复的过程中,ORACLE可以通过使用所需的存档和联机重做日志文件的日志序列号,以升序方式正确应用重做日志文件。
检查点(checkpoint)
当发生日志切换时会触发一个检查点。
检查点是一个触发将SGA区的数据高速缓存中已修改过的数据块写入数据文件,并更新控制文件与数据文件头部的事件。它被用于同步数据库中的所有数据文件、控制文件、重做日志文件。
当ORACLE发出一个检查点时,CKPT后台进程会促使DBWn后台进程在数据高速缓存中的脏缓存块写入数据文件,而DBWn后台进程又促使LGWR后台进程将重做日志高速缓存中的脏缓存块写入重做日志文件。检查点发生时 CKPT、DBWn、LGWR后台进程同时工作,所以数据文件、控制文件、重做日志文件中的SCN是完全相同的,从而使得这三个文件完全同步。
COMMIT提交时,只有LGWR后台进程会将重做日志缓存中的脏缓存块写入重做日志文件,DBWn后台进程只有在检查点发生时才将数据高速缓存中的脏缓存块写入数据文件。
ORACLE发出一个检查点的情况:
1、重做日志切换; 2、关闭数据库;
3、表空间脱机或被设置成BACKUP模式; 4、手动检查点;
5、时间检查点;
手动检查点 ALTER SYSTEM CHECKPOINT;
时间检查点可以通过调整LOG_CHECKPOINT_TIMEOUT和LOG_CHECKPOINT_INTERVAL参数来改变检查点执行的间隔。
非归档模式(noarchivelog)需要备份数据文件和重做日志文件;
归档模式(archivelog)需要备份重做日志文件和归档日志文件。
管理重做日志文件
调整重做日志文件组、组成员、文件大小。需要有ALTER DATABASE权限。
添加重做日志文件组
ALTER DATABASE ADD LOGFILE [GROUP n]
(logfile1 [REUSE],logfile2 [REUSE],…)SIZE nM;
使用REUSE后不能指定SIZE。添加完重做日志文件组后最好备份控制文件,因为添加完日志文件组后系统后自动更新控制文件。
添加日志组成员
ALTER DATABASEADD LOGFILE MEMBER
Logfile[REUSE] TO GROUP n;
新成员的大小由组中现有成员的大小指定。
如果不知道组号可以通过其他成员的名称来添加新的成员.必须指定所有现有组中成员
ALTER DATABASE ADD LOGFILE MEMBER logfile TO(curlogfile);
删除日志文件组
必须确保日志文件组是非当前状态,即只有在日志文件组为INACTIVE状态时才能删除,如果想删除当前 CURRENT状态的重做日志文件组,必须进行日志切换,第一次日志切换组会变为ACTIVE ,再次进行日志切换会变为 INACTIVE状态。
ALTER SYSTEMSWITCH LOGFILE;
ALTER DATABASEDROP LOGFILE GROUP n;
重做日志文件组的状态有;
UNUSED、ACTIVE、INACTIVE、CURRENT
重做日志文件组成员的状态有:
VALID、INVALID、STALE
删除重做日志组中的成员
ALTER DATABASE DROP LOGFILE MEMBERlogfilename.log;
清除重做日志文件组
清除重做日志问价组就是将其中的重做日志文件的内容全部初始化,相当于删除该重做日志文件组的成员,然后再重新添加这些成员。
有两种情况下不能清除重做日志文件:
1、 如果仅有两个重做日志组;
2、 受到损坏的重做日志文件属于当前的CURRENT或活动的ACTIVE重做日志组;
ALTER DATABASE CLEAR LOGFILE GROUP n;
如果重做日志文件还没有归档则需要使用NOARCHIVED关键字;即
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n;
在OPEN状态下移动重做日志文件。需要确保该重做日志文件为INACTIVE状态;
可以进行日志切换操作,让重做日志文件的状态变为INACTIVE。
移动:
HOST COPY e:\redofiles\redofile01.log d:\redofile1.log;
重命名:
ALTER DATABASERENAME FILE ‘e:\redofiles\redofile01.log‘
TO‘d:\redofile1.log’;
为了安全期间备份控制文件
ALTER DATABASEBACKUP CONTROLFILE TO e:\backupfiles\ctrol.bkp;
ALTER DATABASEBACKUP CONTROLFILE TO TRACE;
在MOUNT状态下移动重做日志文件需要关闭或停止使用数据库
SHUTDOWNIMMEDIATE;
STARTUP MOUNT;
HOST COPY e:\redofiles\redofile02.log d:\redofile2.log;
ALTER DATABASERENAME FILE e:\redofiles\redofile02.log
TOd:\redofile2.log;
ALTER DATABASEOPEN;
ALTER DATABASE BACKUP CONTROLFILE TO e:\backupfiles\ctrol.bkp;
ALTER DATABASE BACKUPCONTROLFILE TO TRACE;
V$LOG ---从控制文件中获取的重做日志文件信息;
V$LOGFILE ----重做日志文件组及其状态、成员的信息;
V$LOG_HISTORY ----
重做日志文件的历史信息;