Inactive redo log丢失或损坏的恢复
将数据库置于非归档模式
SQL> archive log list; Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 90 Current log sequence 91 |
INACTIVE STATUS:redo log里面的日志所对应的buffer cache里的脏块都写到datafile中了
# 模拟出丢失或损坏的INACTIVE redo log,如第2组 select * from v$log; GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ ------------------- 1 1 91 52428800 512 1 NO CURRENT 4256107 2018-04-02 22:06:01 2.8147E+14 2 1 89 52428800 512 1 YES INACTIVE 4227420 2018-04-02 07:00:17 4254495 2018-04-02 22:00:17 3 1 90 52428800 512 1 YES INACTIVE 4254495 2018-04-02 22:00:17 4256107 2018-04-02 22:06:01 col MEMBER for a50 select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_ ---------- ------- ------- -------------------------------------------------- --- 3 ONLINE /u01/app/oracle/oradata/orcl/redo03.log NO 2 ONLINE /u01/app/oracle/oradata/orcl/redo02.log NO # 下面模拟2损坏 1 ONLINE /u01/app/oracle/oradata/orcl/redo01.log NO dd if=/dev/null of=/u01/app/oracle/oradata/orcl/redo02.log bs=512 count=20 # 改后可以直接正常关闭数据库 shutdown immediate # 但打开数据库时报错 startup #----------------------------------------------------------------------------------- ORACLE instance started. Total System Global Area 4375998464 bytes Fixed Size 2260328 bytes Variable Size 889193112 bytes Database Buffers 3472883712 bytes Redo Buffers 11661312 bytes Database mounted. ORA-03113: end-of-file on communication channel Process ID: 18001 Session ID: 191 Serial number: 3 #----------------------------------------------------------------------------------- # alert日志中有如下错误信息 #----------------------------------------------------------------------------------- Tue Apr 03 16:08:12 2018 ARC0 started with pid=20, OS id=18003 ARC0: Archival started LGWR: STARTING ARCH PROCESSES COMPLETE ARC0: STARTING ARCH PROCESSES Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_lgwr_17981.trc: ORA-00313: open failed for members of log group 2 of thread 1 ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/orcl/redo02.log' # 提示打开 log group 2 失败 ORA-27047: unable to read the header block of file Linux-x86_64 Error: 25: Inappropriate ioctl for device Additional information: 1 Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_lgwr_17981.trc: ORA-00313: open failed for members of log group 2 of thread 1 ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/orcl/redo02.log' ORA-27047: unable to read the header block of file Linux-x86_64 Error: 25: Inappropriate ioctl for device Additional information: 1 Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_18001.trc: ORA-00313: open failed for members of log group 1 of thread ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/orcl/redo02.log' #----------------------------------------------------------------------------------- # 这时,先正常打开数据库到mount状态 startup mount # 查看log group 2状态 col MEMBER for a50 select l.STATUS,f.member,BYTES/1024/1024 size_m from v$log l, v$logfile f where l.GROUP#=2 and l.GROUP#=f.GROUP#; STATUS MEMBER SIZE_M ---------------- -------------------------------------------------- ---------- INACTIVE /u01/app/oracle/oradata/orcl/redo02.log 50 # 在控制文件中清除logfile group 2 alter database clear logfile group 2; alter database drop logfile group 2; # 删除logfile group 2对应的文件 ! rm -rf /u01/app/oracle/oradata/orcl/redo02.log # 增加logfile group 2 alter database add logfile group 2 ('/u01/app/oracle/oradata/orcl/redo02.log') size 50m; # 能正常打开数据库了 SQL> alter database open; Database altered. |
Active redo log丢失或损坏的恢复
ACTIVE STATUS:redo log里面的日志所对应的buffer cache里的脏块还没有刷新到datafile中
# 准备环境 create tablespace lyj datafile '/u01/app/oracle/oradata/orcl/lyj_01.dbf' size 1g autoextend on next 500m maxsize unlimited; drop user lyj cascade; create user lyj identified by lyj default tablespace lyj; grant dba to lyj; # 增加并扩大logfile group alter database add logfile group 4 ('/u01/app/oracle/oradata/orcl/redo04.log') size 200m; alter database add logfile group 5 ('/u01/app/oracle/oradata/orcl/redo05.log') size 200m; alter database add logfile group 6 ('/u01/app/oracle/oradata/orcl/redo06.log') size 200m; select group#,status from v$log; GROUP# STATUS ---------- ---------------- 1 CURRENT 2 INACTIVE 3 INACTIVE 4 UNUSED 5 UNUSED 6 UNUSED alter system switch logfile; alter system checkpoint; select group#,status from v$log; GROUP# STATUS ---------- ---------------- 1 INACTIVE 2 INACTIVE 3 INACTIVE 4 INACTIVE 5 CURRENT 6 INACTIVE alter database drop logfile group 1; alter database drop logfile group 2; alter database drop logfile group 3; ! rm -rf /u01/app/oracle/oradata/orcl/redo01.log ! rm -rf /u01/app/oracle/oradata/orcl/redo02.log ! rm -rf /u01/app/oracle/oradata/orcl/redo03.log alter database add logfile group 1 ('/u01/app/oracle/oradata/orcl/redo01.log') size 200m; alter database add logfile group 2 ('/u01/app/oracle/oradata/orcl/redo02.log') size 200m; alter database add logfile group 3 ('/u01/app/oracle/oradata/orcl/redo03.log') size 200m; # 模拟一个大事务 conn lyj/lyj drop table t1 purge; create table t1(id int,name varchar(100)); begin for i in 1 .. 5000000 loop insert into t1 values(i,'AAAAAA'); end loop; commit; end; / # 新打开一个窗口 set line 150 col member for a50 select l.group#,l.STATUS,f.member,BYTES/1024/1024 size_m from v$log l, v$logfile f where l.GROUP#=f.GROUP# order by 1; GROUP# STATUS MEMBER SIZE_M ---------- ---------------- -------------------------------------------------- ---------- 1 CURRENT /u01/app/oracle/oradata/orcl/redo01.log 200 2 INACTIVE /u01/app/oracle/oradata/orcl/redo02.log 200 3 INACTIVE /u01/app/oracle/oradata/orcl/redo03.log 200 4 INACTIVE /u01/app/oracle/oradata/orcl/redo04.log 200 5 ACTIVE /u01/app/oracle/oradata/orcl/redo05.log 200 6 INACTIVE /u01/app/oracle/oradata/orcl/redo06.log 200 # 为了保障状态是active,直接shutdown abort数据库 SQL> shutdown abort # 启动到mount状态后再查看日志组状态 startup mount set line 150 col member for a50 select l.group#,l.STATUS,f.member,BYTES/1024/1024 size_m from v$log l, v$logfile f where l.GROUP#=f.GROUP# order by 1; GROUP# STATUS MEMBER SIZE_M ---------- ---------------- -------------------------------------------------- ---------- 1 CURRENT /u01/app/oracle/oradata/orcl/redo01.log 200 2 INACTIVE /u01/app/oracle/oradata/orcl/redo02.log 200 3 INACTIVE /u01/app/oracle/oradata/orcl/redo03.log 200 4 INACTIVE /u01/app/oracle/oradata/orcl/redo04.log 200 5 ACTIVE /u01/app/oracle/oradata/orcl/redo05.log 200 6 INACTIVE /u01/app/oracle/oradata/orcl/redo06.log 200 # 模拟状态为ACTIVE的log group 5损坏 dd if=/dev/null of=/u01/app/oracle/oradata/orcl/redo05.log bs=512 count=20 # 正常打开数据库时报以下错误 SQL> alter database open; #----------------------------------------------------------------------------------- alter database open * ERROR at line 1: ORA-00313: open failed for members of log group 5 of thread 1 ORA-00312: online log 5 thread 1: '/u01/app/oracle/oradata/orcl/redo05.log' ORA-27047: unable to read the header block of file Linux-x86_64 Error: 25: Inappropriate ioctl for device Additional information: 1 #----------------------------------------------------------------------------------- # alert日志中有如下错误信息 #----------------------------------------------------------------------------------- Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_22346.trc: ORA-00313: open failed for members of log group 5 of thread 1 ORA-00312: online log 5 thread 1: '/u01/app/oracle/oradata/orcl/redo05.log' ORA-27047: unable to read the header block of file #----------------------------------------------------------------------------------- # 因为logfile group 5状态是active,clear和drop都不行 SQL> alter database clear logfile group 5; alter database clear logfile group 5 * ERROR at line 1: ORA-01624: log 5 needed for crash recovery of instance orcl (thread 1) ORA-00312: online log 5 thread 1: '/u01/app/oracle/oradata/orcl/redo05.log' SQL> alter database drop logfile group 5; alter database drop logfile group 5 * ERROR at line 1: ORA-01624: log 5 needed for crash recovery of instance orcl (thread 1) ORA-00312: online log 5 thread 1: '/u01/app/oracle/oradata/orcl/redo05.log' # 使用resetlog打开数据库时报以下错误 SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01139: RESETLOGS option only valid after an incomplete database recovery # 介质恢复 SQL> recover database until cancel; ORA-00279: change 4326696 generated at 04/04/2018 13:58:56 needed for thread 1 ORA-00289: suggestion : /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_04_04/o1_mf_1_162_%u_.arc ORA-00280: change 4326696 for thread 1 is in sequence #162 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} ORA-00308: cannot open archived log '/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_04_04/o1_mf_1_162_%u_.arc' ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf' # 再次resetlogs打开数据库 SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf' # 修改数据库pfile添加隐含参数 create pfile from spfile; echo "*._allow_resetlogs_corruption=true" >> $ORACLE_HOME/dbs/init"$ORACLE_SID".ora echo "*._allow_error_simulation=true" >> $ORACLE_HOME/dbs/init"$ORACLE_SID".ora # 数据库使用pfile mount shutdown abort startup pfile="/u01/app/oracle/11.2.0.4/db_1/dbs/initorcl.ora" mount # 使用resetlogs方式可以打开数据库 alter database open resetlogs; Database altered. # 查看redo log group状态,SEQUENCE#已从0开始 set line 150 col member for a50 select l.group#,l.STATUS,f.member,BYTES/1024/1024 size_m,sequence# from v$log l, v$logfile f where l.GROUP#=f.GROUP# order by 1; GROUP# STATUS MEMBER SIZE_M SEQUENCE# ---------- ---------------- -------------------------------------------------- ---------- ---------- 1 CURRENT /u01/app/oracle/oradata/orcl/redo01.log 200 1 2 UNUSED /u01/app/oracle/oradata/orcl/redo02.log 200 0 3 UNUSED /u01/app/oracle/oradata/orcl/redo03.log 200 0 4 UNUSED /u01/app/oracle/oradata/orcl/redo04.log 200 0 5 UNUSED /u01/app/oracle/oradata/orcl/redo05.log 200 0 6 UNUSED /u01/app/oracle/oradata/orcl/redo06.log 200 0 # 切换日志,在alert日志中查看是否有报错。 alter system switch logfile; 注意:这种修改隐含参数后使用resetlogs方式打开的数据库,生产环境中有可能的话(数量不太大),尽量将数据导出后重建库恢复。 |
Current redo log丢失或损坏的恢复
CURRENT STATUS:实例正在使用的日志文件,并且redo log里面的日志可能还没有刷新到datafile中
# 模拟一个大事务 conn lyj/lyj drop table t1 purge; create table t1(id int,name varchar(100)); begin for i in 1 .. 5000000 loop insert into t1 values(i,'AAAAAA'); commit; end loop; end; / # 新打开一个窗口 set line 150 col member for a50 select l.group#,l.STATUS,f.member,BYTES/1024/1024 size_m from v$log l, v$logfile f where l.GROUP#=f.GROUP# order by 1; GROUP# STATUS MEMBER SIZE_M ---------- ---------------- -------------------------------------------------- ---------- 1 ACTIVE /u01/app/oracle/oradata/orcl/redo01.log 200 2 ACTIVE /u01/app/oracle/oradata/orcl/redo02.log 200 3 ACTIVE /u01/app/oracle/oradata/orcl/redo03.log 200 4 ACTIVE /u01/app/oracle/oradata/orcl/redo04.log 200 5 CURRENT /u01/app/oracle/oradata/orcl/redo05.log 200 6 INACTIVE /u01/app/oracle/oradata/orcl/redo06.log 200 # 新开一个窗口,将状态为CURRENT的log group 5损坏 dd if=/dev/null of=/u01/app/oracle/oradata/orcl/redo05.log bs=512 count=20 # 稍过一会,执行大事务的会话中断,实例shutdown ERROR at line 1: ORA-03113: end-of-file on communication channel Process ID: 25677 Session ID: 122 Serial number: 5 # 启动数据库实例报错 SQL> startup ORACLE instance started. Total System Global Area 4359294976 bytes Fixed Size 2260288 bytes Variable Size 855638720 bytes Database Buffers 3489660928 bytes Redo Buffers 11735040 bytes Database mounted. ORA-00313: open failed for members of log group 5 of thread 1 ORA-00312: online log 5 thread 1: '/u01/app/oracle/oradata/orcl/redo05.log' ORA-27048: skgfifi: file header information is invalid Additional information: 13 # 尝试open resetlogs报需要恢复 SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01139: RESETLOGS option only valid after an incomplete database recovery # 介质恢复 SQL> recover database until cancel; ORA-00279: change 208852 generated at 04/04/2018 21:26:30 needed for thread 1 ORA-00289: suggestion : /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_04_04/o1_mf_1_23_%u_.arc ORA-00280: change 208852 for thread 1 is in sequence #23 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} ORA-00308: cannot open archived log '/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_04_04/o1_mf_1_23_%u_.arc' ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf' # 再次open resetlogs SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf' # 修改数据库pfile添加隐含参数 create pfile from spfile; echo "*._allow_resetlogs_corruption=true" >> $ORACLE_HOME/dbs/init"$ORACLE_SID".ora echo "*._allow_error_simulation=true" >> $ORACLE_HOME/dbs/init"$ORACLE_SID".ora # 使用pfile open resetlog SQL> shutdown abort ORACLE instance shut down. SQL> startup pfile="/u01/app/oracle/11.2.0.4/db_1/dbs/initorcl.ora" mount ORACLE instance started. Total System Global Area 4375998464 bytes Fixed Size 2260328 bytes Variable Size 889193112 bytes Database Buffers 3472883712 bytes Redo Buffers 11661312 bytes Database mounted. SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00600: internal error code, arguments: [2663], [0], [210131], [0], [217516], [], [], [], [], [], [], [] Process ID: 25824 Session ID: 122 Serial number: 3 |
使用隐含参数_ALLOW_RESETLOGS_CORRUPTION后resetlogs打开数据库后,我们说很多时候你会遇到ORA-00600 2662号错误,这个错误的含义是:
A data block SCN is ahead of the current SCN.
The ORA-600 [2662] occurs when an SCN is compared to the dependent SCN
stored in a UGA variable.
If the SCN is less than the dependent SCN then we signal the ORA-600 [2662] internal error.
ORA-600 [2662] [a] [b] [c] [d] [e]
Arg [a] Current SCN WRAP
Arg [b] Current SCN BASE
Arg [c] dependent SCN WRAP
Arg [d] dependent SCN BASE
Arg [e] Where present this is the DBA where the dependent SCN came from.
算法计算规则如下:Arg [c]*4得出一个数值,假设为V_Wrap,
如果Arg [d]=0,则V_Wrap值为需要的level
Arg [d] < 1073741824,V_Wrap+1为需要的level
Arg [d] < 2147483648,V_Wrap+2为需要的level
Arg [d] < 3221225472,V_Wrap+3为需要的level
使用10015 event手工推进scn
startup pfile="/u01/app/oracle/11.2.0.4/db_1/dbs/initorcl.ora" mount alter session set events '10015 trace name adjust_scn level 1'; SQL> alter database open; Database altered. 这时数据库虽然能open,但alert中会有类似以下的报错,强烈建议将数据导出重建一个库 ORA-01595: error freeing extent (2) of rollback segment (2)) ORA-00600: internal error code, arguments: [4193], [31], [1], [], [], [], [], [], [], [], [], [] Dumping diagnostic data in directory=[cdmp_20180404214920], requested by (instance=1, osid=26128 (SMON)), summary=[incident=21732]. |
增进SCN有两种常用方法
1.通过immediate trace name方式(在数据库Open状态下)
alter session set events 'IMMEDIATE trace name ADJUST_SCN level x';
|
2.通过10015事件(在数据库无法打开,mount状态下)
alter session set events '10015 trace name adjust_scn level x';
|
注:level 1为增进SCN 10亿(1 billion) (102410241024),通常Level 1已经足够。也可以根据实际情况适当调整。
Dump logfile解析一个事务的日志格式
conn lyj/lyj create table t2 (id int, name varchar2(10)); insert into t2 values (1,'AAAAA'); commit; alter system switch logfile; update t2 set name='BBBBB' where name='AAAAA'; commit; set line 150 col member for a50 select l.group#,l.STATUS,f.member,BYTES/1024/1024 size_m,sequence# from v$log l, v$logfile f where l.GROUP#=f.GROUP# order by 1; GROUP# STATUS MEMBER SIZE_M SEQUENCE# ---------- ---------------- -------------------------------------------------- ---------- ---------- 1 ACTIVE /u01/app/oracle/oradata/orcl/redo01.log 200 1 2 CURRENT /u01/app/oracle/oradata/orcl/redo02.log 200 2 3 UNUSED /u01/app/oracle/oradata/orcl/redo03.log 200 0 4 UNUSED /u01/app/oracle/oradata/orcl/redo04.log 200 0 5 UNUSED /u01/app/oracle/oradata/orcl/redo05.log 200 0 6 UNUSED /u01/app/oracle/oradata/orcl/redo06.log 200 0 # 导出当前的log file group alter system dump logfile '/u01/app/oracle/oradata/orcl/redo02.log'; col VALUE for a80 select VALUE from v$diag_info where NAME='Default Trace File'; VALUE -------------------------------------------------------------------------------- /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_22978.trc |
dump的trace信息如下:
...... REDO RECORD - Thread:1 RBA: 0x000002.00000004.0010 LEN: 0x024c VLD: 0x0d SCN: 0x0000.00420e9e SUBSCN: 1 04/04/2018 15:10:43 (LWN RBA: 0x000002.00000004.0010 LEN: 0002 NST: 0001 SCN: 0x0000.00420e9d) CHANGE #1 TYP:2 CLS:1 AFN:9 DBA:0x02400e87 OBJ:94895 SCN:0x0000.00420e97 SEQ:1 OP:11.19 ENC:0 RBL:0 KTB Redo op: 0x11 ver: 0x01 compat bit: 4 (post-11) padding: 1 op: F xid: 0x0002.017.00000a72 uba: 0x00c0011a.03e7.29 Block cleanout record, scn: 0x0000.00420e9d ver: 0x01 opt: 0x02, entries follow... itli: 1 flg: 2 scn: 0x0000.00420e97 Array Update of 1 rows: tabn: 0 slot: 0(0x0) flag: 0x2c lock: 2 ckix: 204 ncol: 2 nnew: 1 size: 0 KDO Op code: 21 row dependencies Disabled xtype: XAxtype KDO_KDOM2 flags: 0x00000080 bdba: 0x02400e87 hdba: 0x02400e82 itli: 2 ispac: 0 maxfr: 4858 vect = 3 col 1: [ 5] 42 42 42 42 42 CHANGE #2 TYP:0 CLS:19 AFN:3 DBA:0x00c00090 OBJ:4294967295 SCN:0x0000.00420e51 SEQ:2 OP:5.2 ENC:0 RBL:0 ktudh redo: slt: 0x0017 sqn: 0x00000a72 flg: 0x0012 siz: 168 fbi: 0 uba: 0x00c0011a.03e7.29 pxid: 0x0000.000.00000000 CHANGE #3 TYP:0 CLS:19 AFN:3 DBA:0x00c00090 OBJ:4294967295 SCN:0x0000.00420e9e SEQ:1 OP:5.4 ENC:0 RBL:0 ktucm redo: slt: 0x0017 sqn: 0x00000a72 srt: 0 sta: 9 flg: 0x2 ktucf redo: uba: 0x00c0011a.03e7.29 ext: 1 spc: 2252 fbi: 0 CHANGE #4 TYP:0 CLS:20 AFN:3 DBA:0x00c0011a OBJ:4294967295 SCN:0x0000.00420e51 SEQ:3 OP:5.1 ENC:0 RBL:0 ktudb redo: siz: 168 spc: 2422 flg: 0x0012 seq: 0x03e7 rec: 0x29 xid: 0x0002.017.00000a72 ktubl redo: slt: 23 rci: 0 opc: 11.1 [objn: 94895 objd: 94895 tsn: 10] Undo type: Regular undo Begin trans Last buffer split: No Temp Object: No Tablespace Undo: No 0x00000000 prev ctl uba: 0x00c0011a.03e7.26 prev ctl max cmt scn: 0x0000.0042094a prev tx cmt scn: 0x0000.0042095c txn start scn: 0x0000.00420e9c logon user: 85 prev brb: 12583193 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 Array Update of 1 rows: tabn: 0 slot: 0(0x0) flag: 0x2c lock: 0 ckix: 204 ncol: 2 nnew: 1 size: 0 KDO Op code: 21 row dependencies Disabled xtype: XAxtype KDO_KDOM2 flags: 0x00000080 bdba: 0x02400e87 hdba: 0x02400e82 itli: 2 ispac: 0 maxfr: 4858 vect = 3 col 1: [ 5] 41 41 41 41 41 ...... |
RBA: 0x000002.00000004.0010 - redo log地址:sequence#是2的redolog file的第4个块的偏移量第10个节字开始
LEN: 0x024c - 长度
VLD: 0x0d - 类型
SCN: 0x0000.00420e9e - 对应日志所产生的SCN
SUBSCN: 1 04/04/2018 15:10:43 - 同一时间产生的日志量大时,通过SUBSCN来区别
OP:11.19 - OP是操作代码 11.19代表update
OP:5.2 - 启动一个事务
OP:5.4 - 提交
OP:5.1 - 修改前的值
CHANGE #1 - TYP:2 CLS:1 AFN:9 DBA:0x02400e87 OBJ:94895 SCN:0x0000.00420e97 SEQ:1 OP:11.19 ENC:0 RBL:0
OP:11.19-update修改的值 TYP:2-类型2是普通文件 CLS:1-数据类型 AFN:9-绝对文件号 DBA:0x02400e87-数据文件地址 OBJ:94895-对象编号
CHANGE #2 TYP:0 CLS:19 AFN:3 DBA:0x00c00090 OBJ:4294967295 SCN:0x0000.00420e51 SEQ:2 OP:5.2 ENC:0 RBL:0
OP:5.2-启动一个事务(undo) AFN:3-绝对文件号(这个文件对应的是undo file)
CHANGE #3 TYP:0 CLS:19 AFN:3 DBA:0x00c00090 OBJ:4294967295 SCN:0x0000.00420e9e SEQ:1 OP:5.4 ENC:0 RBL:0
OP:5.4-提交 AFN:3-绝对文件号(这个文件对应的是undo file)
CHANGE #4 TYP:0 CLS:20 AFN:3 DBA:0x00c0011a OBJ:4294967295 SCN:0x0000.00420e51 SEQ:3 OP:5.1 ENC:0 RBL:0
OP:5.1-update修改前的值 AFN:3-绝对文件号(这个文件对应的是undo file)
查询隐含参数脚本
vi $ORACLE_HOME/rdbms/admin/show_para.sql #----------------------------------------------------------------------------------- col p_name for a48 col p_DESCRIPTION for a62 col p_value for a10 set linesize 150 set pagesize 9999 SELECT i.ksppinm p_name, i.ksppdesc p_description, CV.ksppstvl p_VALUE, CV.ksppstdf isdefault, DECODE (BITAND (CV.ksppstvf, 7),1, 'MODIFIED',4, 'SYSTEM_MOD', 'FALSE') ismodified, DECODE (BITAND (CV.ksppstvf, 2), 2, 'TRUE', 'FALSE') isadjusted FROM sys.x$ksppi i, sys.x$ksppcv CV WHERE i.inst_id = USERENV ('Instance') AND CV.inst_id = USERENV ('Instance') AND i.indx = CV.indx AND upper(i.ksppinm) LIKE upper('%&p%') ORDER BY REPLACE (i.ksppinm, '_', ''); #----------------------------------------------------------------------------------- # 在sqlplus中执行 @?/rdbms/admin/show_para |