01,创建环境
SQL> create table t3 (id int); Table created. SQL> insert into t3 values(1); 1 row created. SQL> insert into t3 values(2); 1 row created. SQL> insert into t3 values(3); 1 row created. SQL> commit; Commit complete.
02,查看块
SQL> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid),id from t3; DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) ID ------------------------------------ ------------------------------------ ---------- 1 104537 1 1 104537 2 1 104537 3
03,更新事务
SQL> update t3 set id=5 where id=3; 1 row updated.
这时候更新了下数据库
04,查看回滚段
SQL> desc v$transaction --视图信息查看 Name Null? Type ----------------------------------------- -------- ---------------------------- ADDR RAW(8) XIDUSN NUMBER XIDSLOT NUMBER XIDSQN NUMBER UBAFIL NUMBER UBABLK NUMBER UBASQN NUMBER UBAREC NUMBER STATUS VARCHAR2(16) START_TIME VARCHAR2(20) START_SCNB NUMBER START_SCNW NUMBER START_UEXT NUMBER START_UBAFIL NUMBER START_UBABLK NUMBER START_UBASQN NUMBER START_UBAREC NUMBER SES_ADDR RAW(8) FLAG NUMBER SPACE VARCHAR2(3) RECURSIVE VARCHAR2(3) NOUNDO VARCHAR2(3) PTX VARCHAR2(3) NAME VARCHAR2(256) PRV_XIDUSN NUMBER PRV_XIDSLT NUMBER PRV_XIDSQN NUMBER PTX_XIDUSN NUMBER PTX_XIDSLT NUMBER PTX_XIDSQN NUMBER DSCN-B NUMBER DSCN-W NUMBER USED_UBLK NUMBER USED_UREC NUMBER LOG_IO NUMBER PHY_IO NUMBER CR_GET NUMBER CR_CHANGE NUMBER START_DATE DATE DSCN_BASE NUMBER DSCN_WRAP NUMBER START_SCN NUMBER DEPENDENT_SCN NUMBER XID RAW(8) PRV_XID RAW(8) PTX_XID RAW(8) CON_ID NUMBER
Column Datatype Description ADDR RAW(4 | 8) Address of the transaction state object XIDUSN NUMBER Undo segment number XIDSLOT NUMBER Slot number XIDSQN NUMBER Sequence number UBAFIL NUMBER Undo block address (UBA) filenum UBABLK NUMBER UBA block number UBASQN NUMBER UBA sequence number UBAREC NUMBER UBA record number STATUS VARCHAR2(16) Status START_TIME VARCHAR2(20) Start time (wall clock) START_SCNB NUMBER Start system change number (SCN) base START_SCNW NUMBER Start SCN wrap START_UEXT NUMBER Start extent number START_UBAFIL NUMBER Start UBA file number START_UBABLK NUMBER Start UBA block number START_UBASQN NUMBER Start UBA sequence number START_UBAREC NUMBER Start UBA record number SES_ADDR RAW(4 | 8) User session object address FLAG NUMBER Flag SPACE VARCHAR2(3) YES if a space transaction RECURSIVE VARCHAR2(3) YES if a recursive transaction NOUNDO VARCHAR2(3) YES if a no undo transaction PTX VARCHAR 2(3) YES if parallel transaction NAME VARCHAR2(256) Name of a named transaction PRV_XIDUSN NUMBER Previous transaction undo segment number PRV_XIDSLT NUMBER Previous transaction slot number PRV_XIDSQN NUMBER Previous transaction sequence number PTX_XIDUSN NUMBER Rollback segment number of the parent XID PTX_XIDSLT NUMBER Slot number of the parent XID PTX_XIDSQN NUMBER Sequence number of the parent XID DSCN-B NUMBER This column is obsolete and maintained for backward compatibility. The value of this column is always equal to the value in DSCN_BASE. DSCN-W NUMBER This column is obsolete and maintained for backward compatibility. The value of this column is always equal to the value in DSCN_WRAP. USED_UBLK NUMBER Number of undo blocks used USED_UREC NUMBER Number of undo records used LOG_IO NUMBER Logical I/O PHY_IO NUMBER Physical I/O CR_GET NUMBER Consistent gets CR_CHANGE NUMBER Consistent changes START_DATE DATE Start time (wall clock) DSCN_BASE NUMBER Dependent SCN base DSCN_WRAP NUMBER Dependent SCN wrap START_SCN NUMBER Start SCN DEPENDENT_SCN NUMBER Dependent SCN XID RAW(8) Transaction XID PRV_XID RAW(8) Previous transaction XID PTX_XID RAW(8) Parent transaction XID
SQL> select UBAFIL,UBABLK,XIDUSN,XIDSLOT,XIDSQN,START_SCNB from v$transaction ; UBAFIL UBABLK XIDUSN XIDSLOT XIDSQN START_SCNB ---------- ---------- ---------- ---------- ---------- ---------- 4 4955 9 16 2339 5870968
包含的信息详细内容查看上
05,查看段名
SQL> select * from v$rollname; --这里对应的是XIDUSN USN NAME CON_ID ---------- ------------------------------ ---------- 0 SYSTEM 1 1 _SYSSMU1_762089623$ 1 2 _SYSSMU2_3062791661$ 1 3 _SYSSMU3_1499641855$ 1 4 _SYSSMU4_3564003469$ 1 5 _SYSSMU5_1728379857$ 1 6 _SYSSMU6_965511687$ 1 7 _SYSSMU7_2247632671$ 1 8 _SYSSMU8_437891266$ 1 9 _SYSSMU9_3215744559$ 1 10 _SYSSMU10_2925533193$ 1
可以查看到这个事务的Undo segment number 为9
根据这个id查找到段名为 _SYSSMU9_3215744559$
所以我们直接可以dump 出这个段头即可
06,dump 段头
SQL> alter system dump undo header '_SYSSMU9_3215744559$'; System altered. SQL>
07,查看当前会话id
SQL> select spid from v$process where addr in (select paddr from v$session where sid=(select sid from v$mystat where rownum=1)); SPID ------------------------ 1392
这个会话id 跟随着物理磁盘存储的id,寻找到这个也就能找到dump 出来的东西
这是时候去找这个文件,查看内容就有对应的信息
08,dump 块
这时候也可以dump 数据块
SQL> select UBAFIL,UBABLK,XIDUSN,XIDSLOT,XIDSQN,START_SCNB from v$transaction ; UBAFIL UBABLK XIDUSN XIDSLOT XIDSQN START_SCNB ---------- ---------- ---------- ---------- ---------- ---------- 4 4955 9 16 2339 5870968
这里就是写了4号文件块4955块
我们就dump 这个出来
alter system dump datafile 4 block 4955;
09,或通过id dump数据块
SQL> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid),id from t3; DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) ID ------------------------------------ ------------------------------------ ---------- 1 104537 1 1 104537 2 1 104537 3
所以dump 这个也可以的
alter system dump datafile 1 block 104537 ;
10,查看dump
对接上第一个dump操作
SQL> oradebug setmypid Statement processed. SQL> oradebug tracefile_name /orcl/app/oracle/diag/rdbms/node12c01/orcl/trace/orcl_ora_1392.trc
查看这个文件就行了
1 [root@node12c01 oracle]# ll /orcl/app/oracle/diag/rdbms/node12c01/orcl/trace/orcl_ora_1392.trc 2 -rw-r----- 1 oracle oinstall 1420 Apr 19 04:00 /orcl/app/oracle/diag/rdbms/node12c01/orcl/trace/orcl_ora_1392.trc 3 [root@node12c01 oracle]# more /orcl/app/oracle/diag/rdbms/node12c01/orcl/trace/orcl_ora_1392.trc 4 Trace file /orcl/app/oracle/diag/rdbms/node12c01/orcl/trace/orcl_ora_1392.trc 5 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 6 Build label: RDBMS_12.2.0.1.0_LINUX.X64_170125 7 ORACLE_HOME: /orcl/app/oracle/product/12.1.0/db_1 8 System name: Linux 9 Node name: node12c01 10 Release: 3.10.0-693.el7.x86_64 11 Version: #1 SMP Tue Aug 22 21:09:27 UTC 2017 12 Machine: x86_64 13 Instance name: orcl 14 Redo thread mounted by this instance: 1 15 Oracle process number: 56 16 Unix process pid: 1392, image: oracle@node12c01 (TNS V1-V3) 17 18 19 *** 2019-04-19T04:00:53.883414-04:00 (CDB$ROOT(1)) 20 *** SESSION ID:(28.29402) 2019-04-19T04:00:53.883452-04:00 21 *** CLIENT ID:() 2019-04-19T04:00:53.883457-04:00 22 *** SERVICE NAME:(SYS$USERS) 2019-04-19T04:00:53.883462-04:00 23 *** MODULE NAME:(sqlplus@node12c01 (TNS V1-V3)) 2019-04-19T04:00:53.883466-04:00 24 *** ACTION NAME:() 2019-04-19T04:00:53.883471-04:00 25 *** CLIENT DRIVER:(SQL*PLUS) 2019-04-19T04:00:53.883474-04:00 26 *** CONTAINER ID:(1) 2019-04-19T04:00:53.883478-04:00 27 28 Processing Oradebug command 'setmypid' 29 30 *** 2019-04-19T04:00:53.883507-04:00 (CDB$ROOT(1)) 31 Oradebug command 'setmypid' console output: <none> 32 33 *** 2019-04-19T04:00:59.063237-04:00 (CDB$ROOT(1)) 34 Processing Oradebug command 'tracefile_name' 35 36 *** 2019-04-19T04:00:59.063299-04:00 (CDB$ROOT(1)) 37 Oradebug command 'tracefile_name' console output: 38 /orcl/app/oracle/diag/rdbms/node12c01/orcl/trace/orcl_ora_1392.trc