|
0x03800084,132块中: alter system dump datafile 14 block 132; 找到最后一条回滚记录,它的前映像对应5号文件131046块的Slot 0(行1)0列,值为 61 61 61 31,即“aaa1”,但它并是回滚链头,根据它的Rci 0x02,继续向上,找到0x02条回滚记录, 它对应对应5号文件131046块的Slot 1(行2)0列,62 62 32,即“bb2”,还没完,再向上,是131046块中Slot 0(行1)0列,
61 61 31,即“aa1”,此条回滚记录的Rci已经是0了,已经到了回滚链头,被覆盖的ITL槽是: op: L itl: xid: 0x0017.003.00000045 uba: 0x03800021.0021.03 flg: C--- lkc: 0 scn: 0x0000.008530fd Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x001a.010.00000011 0x03800085.000e.01 C--- 0 fsc 0x0000.00853185 0x01 0x0017.003.00000045 0x03800021.0021.03 C--- 0 fsc 0x0000.008530fd 0x02 0x0018.005.0000001a 0x03800072.000e.08 C--- 0 scn 0x0000.00853171
Slot 0(行1):61 61 61 61 31 (“aaaa1”) Slot 1(行2):62 62 62 62 32 (“bbbb2”) Slot 0(行1):61 61 31 (“aa1”) Slot 1(行2):62 62 32 (“bb2”) Slot 2(行3):63 (“c”) 查询的SCN是853180,ITL中最大SCN是853171,查询SCN大于ITL中的SCN,说明查询发生在事务后,好了,到此,我们这一次CR块构造完毕。此次生成的131046的CR块会覆盖步4时生成的,一个块,在一次查询中,只会产生一个CR块。 根据我们的操作顺序: a->A->A1 A2 B2->aa1->aaa1 aaaa1->aaaaa10->az b->B->B2 ->bb2->bbb2 bbbb2->bbbbb10->by ↑ 我们已经回到了箭头所指处。我们可以一直向前回塑,直到T8的行被插入131046时,或者,回滚段被覆盖时。假若我们又向前回塑,但回滚块的Seq和我们要求的不一样,证明此块被覆盖了,此时Oracle会报告Ora-01555错误。我们只需让回滚段的区足够多,这样它每次绕回的时间必然加长。这样,回滚段必然可更长时间的保持已提交事务的回滚信息。 在X$BH视图中上,有一个CR_SCN_BAS列,显示CR块的最大SCN: 18> select file# ,DBABLK,state, tch ,cr_scn_bas,to_char(cr_scn_bas,'xxxxxxxx') SCN from x$bh where file#=5 and dbablk=131046; FILE# DBABLK STATE TCH CR_SCN_BAS SCN ---------- ---------- ---------- ---------- ---------- --------- -------------------- ---------- 5 131046 3 0 8728964 853184 上面的0x853184就是咯。旁边的8728964是他的10进制值.
|