对于一个写满的redo log file,只要这个文件中的记录已经写入数据文件(datafiles)时,这个RedoLog file才可用。
对于一个写满的redo log file,只有这个文件中的记录已经写入数据文件(datafiles)并且这个文件归档时,这个Redo Log file才可用。
LGWR进程会重写第一个可用的激活Redo Log File。
-
恢复数据库备份
-
更新备用数据standby database (see "Computer Failures")
-
使用LogMiner工具获取历史数据库中的信息(see "Oracle LogMiner")
归档是产生的归档重做日志文件的操作。归档是自动或手动,但仅可能发生在数据库处在ARCHIVELOG模式下。
一个归档重做日志文件包含联机重做日志组(online redo log group)相同成员的重做条目(redo entries)和日志序列号。
在Figure 7-1中,文件A_LOG1和B_LOG1是Group 1中相同的Member。
如果数据库在ARCHIVELOG模式下,并且启用自动归档,这样归档进程(ARCn)将归档的这个组中的一个Member的文件。
如果A_LOG1已损坏,那么这个过程可以归档B_LOG1文件。
因为你启用归档模式,归档日志将包含每组在线重做日志组的一份拷贝。
------------------------------------------------------------------------------------------------------------------------------------------------------------
以上翻译与ORACLE11g官方文档http://docs.oracle.com/cd/E11882_01/server.112/e25789/physical.htm#CNCPT11302
二、Oracle 写入数据过程
1、System Change Numbers (SCNs)
系统改变号(system change number (SCN))是一个合乎逻辑的,内部的Oracle数据库所用的时间戳记。
在所有数据库数据改变写入磁盘前,Oracle数据库使用SCN号标志这一时刻,
以便数据库恢复时应用不必要的Redo操作。
数据库也会标志位于redo重做的数据集时点以便恢复停止。
SCN号产生一个单调递增序列。Oracle数据库向使用使用时钟一样使用SCN。
如果一个事件比另一个事件的SCN号低,那么它相对于数据库发生在一个较早的时间 。
如果几个事件可以共享相同的SCN,这意味着他们在数据库同一时间发生。
每个事务都有一个SCN。例如,
如果一个事务更新一行, 那么事务在发生更新时数据库记录SCN号。
Oracle数据库的增量SCN号在system global area (SGA)中。
当事务修改数据,数据库中写入一个新的SCN到分配给这个事务的undo数据段。
日志写进程写入提交的事务 记录,立即向联机重做日志。
这时数据库日志写入进程立即将事务的提交记录写入到在线联机重做日志online redo log上。
提交记录的交易具有独特的SCN。Oracle数据库使用的SCN是 实例恢复和介质恢复机制的一部分。2、各种后台进程的作用:Ckpt、lgwr、dbwn之间的协作。(1)Ckpt:检查点进程 Checkpoint Process
检查点进程(CKPT)更新控制文件和数据文件头,这个数据文件头包含检查点信息和DBWN进程写块到磁盘的信号的。
检查点信息包括检查点位置,SCN号,联机重做日志开始恢复的位置,等等。
CKPT不写入数据块到数据文件或不写入重做块到联机重做日志文件。
检查点是在数据库关闭,实例恢复,和Oracle数据库的一般操作时保证数据库一致性的一个重要的机制。
检查点术语拥有如下的相关的含义:
这是一个表示检查点位置的数据结构,也是从重做流必须开始实例恢复时位于重做流中的SCN号。
检查点的位置是由位于database buffer cache(数据库缓冲区)中最早的脏数据区(dirty buffer)。
检查点的位置作为重做流的指针,存储在控制文件和每个数据文件头中。
每隔3秒或更频繁写一次,写入控制文件,记录DBWN从SGA写入磁盘的块的位置。(2)LGWR:Log Writer即日志写入进程,每3秒,1/3满buffer,commit,DBWN写之前。将buffer中数据写入物理文件。
3、Oracle 写入数据过程:Oracle写数据过程:
DML 操作一执行,首先在redo buffer中记录语句,在buffer cache中执行更改,修改数据块。
然后LGWR进程根据上述规则,将redo buffer中的信息写入到Redo Log文件。此过程比较快(redo log为连续写)。
完成后,DBWN会将buffer cache中脏数据块对应的原始数据,复制到undo表空间,然后更新数据。(随机写,比较慢)。|
期间ckpt进程根据3秒的原则,作检查点,记录哪些脏数据库写到了data file中
(这里的检查点为增量检查点,并不是完全将脏数据写完,只是在控制文件中记录写到哪里了)。
将需要的信息记录在控制文件中。
若实例崩溃或需要错误恢复,从检查点位置以后的redo需要重新应用到datafile(常说的redo过程,前滚)。
此时根据事务是否提交了,未提交的事务,根据undo表空间的数据进行恢复(常说的undo,回滚操作)
三、日志文件组、日志切换和日志归档-------------Member默认情况下,Oracle数据库实例创建完成以后就已创建了3组日志组。每组有两个日志文件(每个日志文件称为Member),每个组内所有Member记录同样的信息,每组有两个或两个以上的Member,这样保证此日志文件的高可用性,即当其中一个文件损坏时,其他文件可用。同时为了保证HA(高可用性)建议将Redo Log File 组的每个Member实例恢复所需要的日志文件称为Active Redo Log File(活动重做日志文件),对应的Inactive Redo Log File(非活动重做日志文件)。在数据库实例startup时,Online Redo Log File自动前滚。1.查看redo log,archived log在PL/SQL SQL windows2.添加archived log在PL/SQL command windows[oracle@h1 oracle]$ sqlplus "/as SYSDBA"SQL*Plus: Release 11.2.0.1.0 Production on Tue Nov 13 08:37:24 2012Copyright (c) 1982, 2009, Oracle. All rights reserved.Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> show parameter log_archive_dest_1;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string四、LOGMNR
[oracle@h1 admin]$ sqlplus "/as SYSDBA"SQL*Plus: Release 11.2.0.1.0 Production on Mon Nov 12 10:37:40 2012Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
------------------1.安装LOGMNR包
SQL> host pwd
/app/oracle/product/11.2.0/dbhome_2/rdbms/admin
SQL> @dbmslm.sqlPackage created.
Grant succeeded.
Synonym created.SQL> @dbmslmd.sqlPackage created.
Synonym created.SQL> @dbmslms.sqlPackage created.No errors.Grant succeeded.SQL> show parameter utl_file_dir;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir string
------------------2.创建数据字典
SQL> alter system set utl_file_dir='/app/log' scope=spfile;System altered.SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.Total System Global Area 501059584 bytes
Fixed Size 2214736 bytes
Variable Size 373294256 bytes
Database Buffers 121634816 bytes
Redo Buffers 3915776 bytes
Database mounted.
Database opened.
SQL> show parameter utl_file_dir;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir string /app/log
SQL> EXECUTE dbms_logmnr_d.build('dictionary.ora','/app/log');PL/SQL procedure successfully completed.------------------3.添加日志文件SQL> host pwd
/app/oracle/oradata/orclSQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/app/oracle/oradata/orcl/redo01.log',Options=>dbms_logmnr.new);PL/SQL procedure successfully completed.SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/app/oracle/oradata/orcl/redo02.log',Options=>dbms_logmnr.new);PL/SQL procedure successfully completed.SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/app/oracle/oradata/orcl/redo03.log',Options=>dbms_logmnr.new);PL/SQL procedure successfully completed.------------------4.使用字典分析日志文件
SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'/app/log/dictionary.ora');PL/SQL procedure successfully completed.------------------5.查询结果
SQL> select scn,sql_redo,sql_undo from v$logmnr_contents;
------------------6.退出logmnr
SQL> execute dbms_logmnr.end_logmnr;
---------------在SQL windows上用begin ...end;调用存储过程begin
dbms_logmnr.end_logmnr;end;