Ora-600 [4193] WhenOpening Or Shutting Down A Database [ID 452662.1]
Symptoms --症状
Errors in alert.log: --警告日志文件报错内容
Tue Jul 17 13:38:13 2007
Errors in file /home/oracle/oracle/product/10.2.0/yms/rdbms/log/yms_smon_8337.trc:
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [4193], [3552], [3554], [], [], []
yms_smon_8337.trc: --trace文件的内容
SO: 0xdfaec728, type: 24, owner: 0xdf266580, flag: INIT/-/-/0x00
(buffer) PR: 0xdf1f1338 FLG: 0x1000
class bit: 0x80000
kcbbfbp: [BH: 0xded4bf40, LINK: 0xdfaec768]
kcbbfbx[0]: [BH: 0xdece41d8, LINK: 0xdfaec788]
where: ktuwh01: ktugus, why: 0
buffer tsn: 2 rdba: 0x00c00002 (3/2)
scn: 0x0000.03c95628 seq: 0x01 flg: 0x00 tail: 0x56280e01
frmt: 0x02 chkval: 0x0000 type: 0x0e=KTU UNDO HEADER W/UNLIMITED EXTENTS
BH (0xdece41d8) file#: 3 rdba: 0x00c003b6 (3/950) class: 20 ba: 0x11d6ba000
set: 6 blksize: 8192 bsi: 0 set-flg: 0 pwbcnt: 0
dbwrid: 0 obj: -1 objn: 0 tsn: 2 afn: 3
hash: [df870f70,df870f70] lru: [dece4488,dece4028]
obj-flags: object_ckpt_list
ckptq: [dedac4a0,ded47cb8] fileq: [dedac500,ded47cc8] objq: [ded47d78,db7bfd78]
use: [dfaec788,dfaec788] wait: [NULL]
st: XCURRENT md: EXCL tch: 0
flags: mod_started gotten_in_current_mode block_written_once
change state: ACTIVE
change count: 1
LRBA: [0xac3.4de07.0] HSCN: [0xffff.ffffffff] HSUB: [65535]
Using State Objects
----------------------------------------
SO: 0xdfaec728, type: 24, owner: 0xdf266580, flag: INIT/-/-/0x00
(buffer) PR: 0xdf1f1338 FLG: 0x1000
class bit: 0x80000
kcbbfbp: [BH: 0xded4bf40, LINK: 0xdfaec768]
kcbbfbx[0]: [BH: 0xdece41d8, LINK: 0xdfaec788]
where: ktuwh01: ktugus, why: 0
buffer tsn: 2 rdba: 0x00c003b6 (3/950)
scn: 0x0000.03be3c7d seq: 0x5a flg: 0x04 tail: 0x3c7d025a
frmt: 0x02 chkval: 0x0868 type: 0x02=KTU UNDO BLOCK
----------------------------------------
Error 607 in redo application callback
TYP:0 CLS:20 AFN:3 DBA:0x00c003b6 OBJ:4294967295 SCN:0x0000.03be3c7d SEQ: 90 OP:5.1
ktudb redo: siz: 132 spc: 4462 flg: 0x0012 seq: 0x0de2 rec: 0x09
UNDO BLK:
xid: 0x0002.045.00006c61 seq: 0xde0 cnt: 0x60 irb: 0x60 icl: 0x0 flg: 0x0000
Cause --原因
When we try to apply redo to an undo block (forward changes are made by the application of redo to a block) we check that the seq# in the undo record matches the seq# in the redo record.
--当我们尝试应用重做一个undo块(前滚操作时会应用redo到undo块上)我们会检查undo记录seq#(序列号)和redo记录seq#(序列号)
These seq# should be the same because when we apply a redo record we must apply it to the correct version of the block.
--正常情况下,这两者的序列号是一致的
We can only apply a redo record to a block that contains the same seq# as in the redo record.
--这2者的序列号一致,我们才能应用redo块到undo块上
If the seq# do not match then ORA-600[4193] [a].[b] is raised. .
--如果不一致就会报ORA-600[4193] [a].[b]错误
Arg [a] Undo record seq number --> seq:0xde0 = 3552--a是undo的seq#
Arg [b] Redo record seq number --> seq: 0x0de2 = 3554—b是redo的seq#
This implies some kind of block corruption in either the redo or the undo block.
--当redo块和undo块不一样时就会报错
0xde0 = 3552 十六进制转换为十进制
方法如下:
SQL> select to_number('de0','xxxxx') from dual;
TO_UMBER('DE0','XXXXX')
------------------------
3552
Solution --解决方法
A. If Database is opened: --如果数据库没有打开
1) Find out the rollback segment, based on the first part of the xid: 0x0002.045.00006c61
--找出回滚段,基于第一部分的xid
usn=2 is the segment_id–usn=2是段ID
select segment_name,status from dba_rollback_segs where segment_id=2;
RS_DATA1 ONLINE
2) Dump the transaction table of the rollback segment to see if all TX are commited:
alter system dump undo header RS_DATA1;
3) check the trace file created under user_dump_dest
In the trace file search for the Keyword "TRN TBL"
TRN TBL::
index state cflags wrap# uel scn dba
-----------------------------------------------------------------------------
0x00 9 0x00 0x21eb1 0x0023 0x0000.d28c43e9 0x00000000 ......
state=9 means transaction is committed
4) offline the rollback segment:
alter rollback segment rs_data1 offline;
select status from dba_rollback_segs where segment_id=2;
5) if STATUS=OFFLINE
drop rollback segment RS_DATA1;
B. If Database doesn't open: --数据库关闭状态
1. a) If using rollback segments, remove the rollback_segments line from init.ora, and open database
--使用回滚段方法,从init.ora参数文件中移除回滚段那行,然后开启数据库
b) If using undo segments set undo_management = manual in init.ora/spfile, and try to open database.
--使用undo段的方法,在参数文件中设置undo管理方式为手动并且尝试开启数据库
2. If database opens means all transactions are committed, and you can drop the rollback segment or the undo tablespace
—如果数据库开启意味着所有的事务都被提交,你可以删除回滚段或者undo表空间
elvis
2012.10.17
知识共享~共同进步
转载请注明:
http://blog.csdn.net/elvis_dataguru/article/details/8082800