首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

懂得redo(6)日志却的流程和直接路径加载的REDO分析

2012-09-03 
理解redo(6)日志却的流程和直接路径加载的REDO分析当server process得到redo allocation latch进行redo lo

理解redo(6)日志却的流程和直接路径加载的REDO分析

    当server process得到redo allocation latch进行redo log buffer分配之前,需要先嗅一下redo log file是否有足够的空间。倘若空间不足,则sp会发送switch log file的请求,然后坐等log file switch completion事件的完成了。

 

    日志却请求发出后,CKPT会进行一次增量检查点事件,而LGWR开始进行日志却换工作。

 

    具体流程如下:

    1)LGWR进程会通过控制文件中的双向链表,查找到一个可用的REDO LOG文件,作为新的CURRENT REDO LOG。
             算法如下:

             日志文件是inactive,并且已经归档了
             优先使用unused日志文件组

 

    2)将redo log buffer中还未写入的redo entries flush到current online redo log file,并且将最后一条redo entries的SCN作为本日志文件的high SCN记录在redo log header里面,然后关闭current online redo log file。

 

    3)进行第二次控制文件事务,将刚刚关闭的REDO LOG标识为ACTIVE(这是个增量检查点事件,之所以标识为active,是因为它所保护的dirty buffer可能还未写到数据文件,如果已经全部写到磁盘了,则可以标识为inactive)将新的当前REDO LOG标识为CURRENT,如果数据库处于归档模式,还要将老的日志组记录到控制文件归档列表记录中,并且通知ARCn对该日志文件进行归档。

 

    4)LGWR打开新的日志组的所有成员,在日志文件头记录当前日志sequence#和第一个redo block 的SCN(LOW SCN)

 

    5)LGWR修改SGA中的标志位,允许生成新的REDO LOG信息

 

 

    综上所述,日志切换是一种较为昂贵的操作。因为在却换期间,对数据库所有的交易都将被阻塞。但是加大REDO LOG文件大小和丢失数据的多少是无关的。理由:

    1)redo entries是顺序写入的,写入一个和写入多个,对于恢复而言是一样的
    2)存储故障,受影响的肯定是所有的REDO LOG文件

 

    ARCHIVE模式下,直接路径加载会记录REDO。在非ARCHIVE LOG 模式下,直接路径加载这个动作不会记录REDO,但是ORACLE由于系统改动需要维护段、区、表空间等而会产生REDO的。

 

    下面将redo log file给dump出来

09:29:36 sys@ORCL (^ω^) conn hr/hr已连接。09:34:57 hr@ORCL (^ω^) create table test as select * from dba_objects where 1=2;表已创建。09:35:41 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------                 280423009:36:06 hr@ORCL (^ω^) select group#,status from v$log;    GROUP# STATUS---------- --------------------------------         1 CURRENT         2 INACTIVE         3 INACTIVE09:36:26 hr@ORCL (^ω^) col member for a7209:36:36 hr@ORCL (^ω^) select group#,member from v$logfile;    GROUP# MEMBER---------- ------------------------------------         3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_7TQZWZOY_.LOG         3 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3_7TQZ           X11D_.LOG         2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_2_7TQZWXO2_.LOG         2 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_2_7TQZ           WYPH_.LOG         1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7TQZWVDD_.LOG         1 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1_7TQZ           WWJ8_.LOG已选择6行。09:37:24 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------                 280435309:37:59 hr@ORCL (^ω^) insert /*+append*/ into test select * from dba_objects;已创建50453行。09:39:15 hr@ORCL (^ω^) commit;提交完成。09:39:21 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------                 280452109:39:29 hr@ORCL (^ω^) alter system dump logfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7TQZWVDD_.LOG'09:40:25   2  scn min 2804353 scn max 2804521;系统已更改。09:40:57 hr@ORCL (^ω^) conn / as sysdba已连接。09:41:09 sys@ORCL (^ω^) archive log list数据库日志模式            存档模式自动存档             启用存档终点            USE_DB_RECOVERY_FILE_DEST最早的联机日志序列     3下一个存档日志序列   5当前日志序列           509:41:19 sys@ORCL (^ω^) alter system dump logfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7TQZWVDD_.LOG'09:43:23   2  scn min 2804230 scn max  2804521;系统已更改。09:44:03 sys@ORCL (^ω^) conn hr/hr已连接。09:45:58 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------                 280480109:46:07 hr@ORCL (^ω^) insert  /*+ APPEND */ into text select * from dba_objects;insert  /*+ APPEND */ into text select * from dba_objects                           *第 1 行出现错误:ORA-00942: 表或视图不存在09:47:42 hr@ORCL (^ω^) insert  /*+ APPEND */ into test select * from dba_objects;已创建50453行。09:47:53 hr@ORCL (^ω^) commit;提交完成。09:47:58 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------                 280515509:48:10 hr@ORCL (^ω^) select group#,status from v$log;    GROUP# STATUS---------- --------------------------------         1 CURRENT         2 INACTIVE         3 INACTIVE09:48:50 hr@ORCL (^ω^) alter system dump logfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7TQZWVDD_.LOG'09:49:32   2  scn min 2804801 scn max 2805155;


    把OP号为19.1部分内容摘入如下:

REDO RECORD - Thread:1 RBA: 0x000005.00003627.019c LEN: 0x2024 VLD: 0x01SCN: 0x0000.002ad2e0 SUBSCN:  1 08/19/2012 10:05:48CHANGE #1 TYP:1 CLS: 1 AFN:4 DBA:0x01006015 OBJ:53846 SCN:0x0000.002ad2e0 SEQ:  1 OP:19.1Direct Loader block redo entryBlock header dump:  0x08a90000 Object id on Block? Y seg/obj: 0xd256  csc: 0x00.2ad2df  itc: 3  flg: E  typ: 1 - DATA     brn: 0  bdba: 0x1006009 ver: 0x01 opc: 0     inc: 0  exflg: 0  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc0x01   0x0007.01d.000002ae  0x00000000.0000.00  ----    0  fsc 0x0000.000000000x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.000000000x03   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000 data_block_dump,data header at 0x3bae8288===============tsiz: 0x1f80hsiz: 0xc8pbl: 0x3bae8288bdba: 0x08a90000     76543210flag=--------ntab=1nrow=91frre=-1fsbo=0xc8fseo=0x432avsp=0x36atosp=0x36a0xe:pti[0]nrow=91offs=00x12:pri[0]offs=0x1f360x14:pri[1]offs=0x1eea0x16:pri[2]offs=0x1ea10x18:pri[3]offs=0x1e570x1a:pri[4]offs=0x1e090x1c:pri[5]offs=0x1dbe0x1e:pri[6]offs=0x1d690x20:pri[7]offs=0x1d1e0x22:pri[8]offs=0x1cd20x24:pri[9]offs=0x1c790x26:pri[10]offs=0x1c2f0x28:pri[11]offs=0x1be60x2a:pri[12]offs=0x1b930x2c:pri[13]offs=0x1b470x2e:pri[14]offs=0x1afc0x30:pri[15]offs=0x1ab10x32:pri[16]offs=0x1a670x34:pri[17]offs=0x1a1b0x36:pri[18]offs=0x19d20x38:pri[19]offs=0x19890x3a:pri[20]offs=0x193d0x3c:pri[21]offs=0x18f10x3e:pri[22]offs=0x18a80x40:pri[23]offs=0x185e0x42:pri[24]offs=0x18120x44:pri[25]offs=0x17c90x46:pri[26]offs=0x17790x48:pri[27]offs=0x17270x4a:pri[28]offs=0x16dc0x4c:pri[29]offs=0x16910x4e:pri[30]offs=0x16460x50:pri[31]offs=0x15fa0x52:pri[32]offs=0x15b20x54:pri[33]offs=0x155d0x56:pri[34]offs=0x150f0x58:pri[35]offs=0x14c30x5a:pri[36]offs=0x14740x5c:pri[37]offs=0x142b0x5e:pri[38]offs=0x13e00x60:pri[39]offs=0x13960x62:pri[40]offs=0x134c0x64:pri[41]offs=0x13010x66:pri[42]offs=0x12b50x68:pri[43]offs=0x126c0x6a:pri[44]offs=0x12210x6c:pri[45]offs=0x11d40x6e:pri[46]offs=0x118b0x70:pri[47]offs=0x11410x72:pri[48]offs=0x10f50x74:pri[49]offs=0x10a90x76:pri[50]offs=0x105d0x78:pri[51]offs=0x10110x7a:pri[52]offs=0xfc60x7c:pri[53]offs=0xf7a0x7e:pri[54]offs=0xf210x80:pri[55]offs=0xed40x82:pri[56]offs=0xe880x84:pri[57]offs=0xe3a0x86:pri[58]offs=0xdec0x88:pri[59]offs=0xda30x8a:pri[60]offs=0xd5a0x8c:pri[61]offs=0xd100x8e:pri[62]offs=0xcc00x90:pri[63]offs=0xc720x92:pri[64]offs=0xc220x94:pri[65]offs=0xbd20x96:pri[66]offs=0xb890x98:pri[67]offs=0xb3a0x9a:pri[68]offs=0xae70x9c:pri[69]offs=0xa990x9e:pri[70]offs=0xa4d0xa0:pri[71]offs=0xa000xa2:pri[72]offs=0x9b20xa4:pri[73]offs=0x9650xa6:pri[74]offs=0x9180xa8:pri[75]offs=0x8cf0xaa:pri[76]offs=0x8820xac:pri[77]offs=0x8370xae:pri[78]offs=0x7e90xb0:pri[79]offs=0x79c0xb2:pri[80]offs=0x74c0xb4:pri[81]offs=0x6fa0xb6:pri[82]offs=0x6a80xb8:pri[83]offs=0x6560xba:pri[84]offs=0x6040xbc:pri[85]offs=0x5b70xbe:pri[86]offs=0x56a0xc0:pri[87]offs=0x51d0xc2:pri[88]offs=0x4d00xc4:pri[89]offs=0x4820xc6:pri[90]offs=0x432block_row_dump:tab 0, row 0, @0x1f36tl: 74 fb: --H-FL-- lb: 0x0  cc: 13col  0: [ 3]  53 59 53col  1: [ 5]  49 43 4f 4c 24col  2: *NULL*col  3: [ 2]  c1 15col  4: [ 2]  c1 03col  5: [ 5]  54 41 42 4c 45col  6: [ 7]  78 69 08 1e 0e 33 19col  7: [ 7]  78 69 08 1e 0f 1b 13col  8: [19]  32 30 30 35 2d 30 38 2d 33 30 3a 31 33 3a 35 30 3a 32 34col  9: [ 5]  56 41 4c 49 44col 10: [ 1]  4ecol 11: [ 1]  4ecol 12: [ 1]  4etab 0, row 1, @0x1eeatl: 76 fb: --H-FL-- lb: 0x0  cc: 13col  0: [ 3]  53 59 53col  1: [ 7]  49 5f 55 53 45 52 31col  2: *NULL*col  3: [ 2]  c1 2dcol  4: [ 2]  c1 2dcol  5: [ 5]  49 4e 44 45 58col  6: [ 7]  78 69 08 1e 0e 33 1acol  7: [ 7]  78 69 08 1e 0e 33 1acol  8: [19]  32 30 30 35 2d 30 38 2d 33 30 3a 31 33 3a 35 30 3a 32 35col  9: [ 5]  56 41 4c 49 44col 10: [ 1]  4ecol 11: [ 1]  4e


    直接路径加载只经过PGA,不过SGA,且数据是在HWM之上的。从上面的trc文件,可知:在归档模式下,DIRECT PATH LOAD时是将整个数据块放入REDO LOG中,从而既大幅度的减少了REDO 的产生量,又保证了不会丢失数据。

 

    下面附一张nologging和logging下不同操作所产生的redo entries的对比:

懂得redo(6)日志却的流程和直接路径加载的REDO分析

热点排行