数据库版本: SQL> !sqlplus -V SQL*Plus: Release 11.2.0.1.0 Production SQL> sho user USER is "MING" SQL> set line 300 SQL> col b for a30 SQL> select
dbms_rowid.rowid_relative_fno(rowid)
file_id, dbms_rowid.rowid_block_number(rowid) block_id,rowid, test.* from
test; FILE_ID BLOCK_ID ROWID A B ---------- ---------- ------------------
---------- ------------------------------ 7 1683
AAASZ2AAHAAAAaTAAA 1 ming 更新一行: SQL> update test set
b='mingshuomingshuo' where a=1; 1 row updated. SQL> select
lg.group#,lg.sequence#,lg.bytes/1024/1024/1024 G, lg.members,lgf.member,lg.archived, lg.status from v$log lg,v$logfile lgf where
lg.group#=lgf.group#; GROUP# SEQUENCE# G MEMBERS MEMBER ARC STATUS ---- ---------- ---------- ----------
------------------------- --- --------- 3 36 .048828125 1
/tpdata/oradata/ogg1/redo03.log NO CURRENT 2 35 .048828125 1
/tpdata/oradata/ogg1/redo02.log YES INACTIVE 1 34 .048828125 1 /tpdata/oradata/ogg1/redo01.log YES INACTIVE SQL> alter system dump logfile
'/tpdata/oradata/ogg1/redo03.log' dba min 7 1683 dba
max 7 1683; System altered. SQL> select tracefile from v$process
where addr in ( select paddr from v$session where sid in (select sid from
v$mystat)); TRACEFILE --------------------------------------------------------------------------------------------- /tpsys/app/oracle/diag/rdbms/ogg1/ogg1/trace/ogg1_ora_2647.trc [oracle@oggtest1 ~]$ more /tpsys/app/oracle/diag/rdbms/ogg1/ogg1/trace/ogg1_ora_2647.trc Trace file
/tpsys/app/oracle/diag/rdbms/ogg1/ogg1/trace/ogg1_ora_2647.trc Oracle Database 11g Enterprise Edition
Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining
and Real Application Testing options ORACLE_HOME =
/tpsys/app/oracle/product/11.2.0/db_1 System name: Linux Node name: oggtest1 Release: 2.6.32-358.el6.x86_64 Version: #1 SMP Tue Jan 29 11:47:41 EST 2013 Machine: x86_64 Instance name: ogg1 Redo thread mounted by this instance: 1 Oracle process number: 29 Unix process pid: 2647, image:
oracle@oggtest1 (TNS V1-V3) *** 2018-05-31 23:35:34.677 *** SESSION ID:(38.36) 2018-05-31
23:35:34.677 *** CLIENT ID:() 2018-05-31 23:35:34.677 *** SERVICE NAME:(SYS$USERS) 2018-05-31
23:35:34.677 *** MODULE NAME:(sqlplus@oggtest1 (TNS
V1-V3)) 2018-05-31 23:35:34.677 *** ACTION NAME:() 2018-05-31
23:35:34.677 Log read is SYNCHRONOUS though
disk_asynch_io is enabled! DUMP OF REDO FROM FILE
'/tpdata/oradata/ogg1/redo03.log' Opcodes *.* DBAs: (file # 7, block # 1683) thru (file #
7, block # 1683) data块的起点和终点(thru),这里我只dump了1683号一个块。 RBAs: 0x000000.00000000.0000 thru
0xffffffff.ffffffff.ffff SCNs: scn: 0x0000.00000000 thru scn:
0xffff.ffffffff Times: creation thru eternity FILE HEADER: Compatibility Vsn = 186646528=0xb200000 Db ID=4132820558=0xf655d64e, Db Name='OGG1' Activation ID=4132850254=0xf6564a4e Control Seq=3130=0xc3a, File size=102400=0x19000 File Number=3, Blksiz=512, File Type=2 LOG descrip:"Thread 0001, Seq# 0000000036,
SCN 0x000000158f45-0xffffffffffff" thread: 1 nab: 0xffffffff seq: 0x00000024
hws: 0x1 eot: 1 dis: 0 resetlogs count: 0x38d85a12 scn:
0x0000.000e6c20 (945184) prev resetlogs count: 0x296b946b scn: 0x0000.00000001
(1) Low scn: 0x0000.00158f45 (1412933) 05/31/2018 23:05:04 Next scn: 0xffff.ffffffff 01/01/1988
00:00:00 Enabled scn: 0x0000.000e6c20 (945184)
09/03/2017 05:28:50 Thread closed scn: 0x0000.00158f45 (1412933)
05/31/2018 23:05:04 Disk cksum: 0x471d Calc cksum: 0x471d Terminal recovery stop scn: 0x0000.00000000 Terminal recovery 01/01/1988 00:00:00 Most recent redo scn: 0x0000.00000000 Largest LWN: 0 blocks End-of-redo stream : No Unprotected mode Miscellaneous flags: 0x800000 Thread internal enable indicator: thr: 0,
seq: 0 scn: 0x0000.00000000 REDO RECORD - Thread:1 RBA: 0x000024.00000ad6.0010 LEN: 0x01f4 VLD: 0x05 SQL>
SELECT TO_NUMBER('24','XXXXXXXXXXXXXXXX') FROM DUAL; TO_NUMBER('23','XXXXXXXXXXXXXXXX')---------------------------------- 36 SQL>
SELECT TO_NUMBER('00000ad6','XXXXXXXXXXXXXXXX') FROM DUAL; TO_NUMBER('1E3A','XXXXXXXXXXXXXXXX')------------------------------------ 277436号日志,redo块number是2774,就是我们dump的redo log SCN: 0x0000.0015939d SUBSCN: 1 05/31/2018 23:33:53 CHANGE #1 TYP:0 CLS:17 AFN:3
DBA:0x00c00080 OBJ:4294967295 SCN:0x0000.0015932b SEQ:1 OP:5.2 ENC:0 RBL:0 ktudh redo: slt: 0x000e sqn: 0x00000355
flg: 0x0012 siz: 160 fbi: 0 uba: 0x00c00211.010e.03 pxid: 0x0000.000.00000000 CHANGE #2 TYP:0 CLS:18 AFN:3
DBA:0x00c00211 OBJ:4294967295 SCN:0x0000.0015932a SEQ:1 OP:5.1 ENC:0 RBL:0 ktudb redo: siz: 160 spc: 7794 flg:
0x0012 seq: 0x010e rec: 0x03 xid: 0x0001.00e.00000355 ktubl redo: slt: 14 rci: 0 opc: 11.1
[objn: 75382 objd: 75382 tsn: 8] Undo type: Regular undo Begin trans Last buffer split: No Temp Object: No Tablespace Undo: No 0x00000000 prev ctl uba: 0x00c00211.010e.02 prev ctl max cmt scn: 0x0000.00158bd7 prev tx cmt scn: 0x0000.00158be6 txn start scn: 0xffff.ffffffff logon user: 95 prev brb: 12583426 prev bcl: 0 BuExt idx: 0 flg2: 0 KDO undo record: KTB Redo op: 0x03 ver: 0x01 compat bit: 4 (post-11) padding: 1 op: Z KDO Op code: URP row dependencies
Disabled ##下面这部分是修改前的数据,上面和下面这一部分其实是undo的信息 xtype: XA flags:
0x00000000 bdba: 0x01c00693 hdba: 0x01c00692 itli: 2 ispac: 0 maxfr: 4858 tabn: 0 slot: 0(0x0) flag: 0x2c lock: 0 ckix: 0 ncol: 2 nnew: 1 size: -12 col 1: [ 4] 6d 69 6e 67 ##4是长度,6d 69 6e
67是修改前的值 修改前的值:SQL> select
utl_raw.cast_to_varchar2(replace('6d,69,6e,67',',')) value from dual; VALUE------------------------------------------------------------------------------------------------------ming CHANGE #3 TYP:0 CLS:1 AFN:7 DBA:0x01c00693 OBJ:75382 SCN:0x0000.0015673a SEQ:1 OP:11.5 ENC:0 RBL:0 SQL>
SELECT TO_NUMBER('01c00693','XXXXXXXXXXXXXXXX') FROM DUAL; TO_NUMBER('01C00693','XXXXXXXXXXXXXXXX')---------------------------------------- 29361811 SQL>
select2 dbms_utility.data_block_address_block(29361811) "BLOCK",3 dbms_utility.data_block_address_file(29361811) "FILE"4 from dual; BLOCK FILE---------- ---------- 1683 77号数据文件的1693块就是我dump的块。 75382就是我们操作的test表的object_id OP code是11.5,在DML的操作代码中,11.5代表update row piece KTB Redo op: 0x01 ver: 0x01 compat bit: 4 (post-11) padding: 1 op: F xid: 0x0001.00e.00000355 uba: 0x00c00211.010e.03 KDO Op code: URP row dependencies
Disabled xtype: XA flags: 0x00000000 bdba: 0x01c00693 hdba: 0x01c00692 itli: 2 ispac: 0 maxfr: 4858 tabn: 0 slot: 0(0x0) flag: 0x2c lock: 2
ckix: 0 ncol: 2 nnew: 1 size:
12 col 1: [16] 6d 69 6e 67 73 68 75 6f 6d 69 6e 67 73 68 75 6f Bdba是更新的块的地址,所以跟DBA:0x01c00693一样也就是显而易见的了;Hdba是更新的块所在的段的地址。SQL> SELECT TO_NUMBER('01c00692','XXXXXXXXXXXXXXXX') FROM DUAL; TO_NUMBER('01C00692','XXXXXXXXXXXXXXXX')---------------------------------------- 29361810SQL> select 2 dbms_utility.data_block_address_block(29361810) "BLOCK", 3 dbms_utility.data_block_address_file(29361810) "FILE" 4 from dual; BLOCK FILE---------- ---------- 1682 7TEST表所在的段的信息:SQL> select
owner,segment_name,segment_type,header_file,header_block from
dba_segments where segment_name='TEST' and tablespace_name='TEST';OWNER SEGMENT_NAME SEGMENT_TYPE HEADER_FILE HEADER_BLOCK------- -------------- ------------ ----------- ------------MING TEST TABLE 7 1682两者是一致的 itli: 2 该事务正在使用第二个事务槽。tabn: 0 该块上第一个表。Flag是0x2c,代表没有出现行迁移,包括first data piece,last data piecehe head piece
of row.ncol: 2 该记录有2行nnew:1 修改了1列(b那一列)size: 12 修改列长度增加了12(从4变成16)修改后的值:SQL> select utl_raw.cast_to_varchar2(replace('6d,69,6e,67,73,68,75,6f,6d,69,6e,67,73,68,75,6f',','))
valuefrom dual; VALUE-----------------------------------------------------------------------------------------------------------------------------mingshuomingshuo CHANGE #4 MEDIA RECOVERY MARKER
SCN:0x0000.00000000 SEQ:0 OP:5.20 ENC:0 session number = 1 serial number = 15 执行事务的会话信息:SQL>
SELECT SID,SERIAL# FROM V$SESSION WHERE SID=( select userenv('SID') FROM
DUAL); SID SERIAL#----------
---------- 1 15 transaction name = version 186646784 audit sessionid 151083 Client Id = END OF REDO DUMP ----- Redo read statistics for thread 1
----- Read rate (SYNC): 1419Kb in 0.01s =>
138.57 Mb/sec Total redo bytes: 2047Kb Longest record:
13Kb, moves: 1/2688 moved: 0Mb (0%) Longest LWN: 504Kb, reads: 240 Last redo scn: 0x0000.001593c8 (1414088) Change vector header moves = 261/4848
(5%) ---------------------------------------------- |