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
View Code

相关文章: