Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
NAME TYPE#
------------------------------ ----------
I_CON2 1
--测试创建带有主键的表时 con#值得变化
SQL> alter session set events '10046 trace name context forever,level 10';
Session altered.
Start dump data blocks tsn: 0 file#: 1 minblk 170 maxblk 170
buffer tsn: 0 rdba: 0x004000aa (1/170)
scn: 0x0000.000ac089 seq: 0x01 flg: 0x06 tail: 0xc0890601
frmt: 0x02 chkval: 0xf13c type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
.........
Block header dump: 0x004000aa
Object id on Block? Y
seg/obj: 0x1c csc: 0x00.ac088 itc: 1 flg: - typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0002.022.00000145 0x008002cf.00c7.2c --U- 1 fsc 0x0000.000ac089
data_block_dump,data header at 0x1c1ba444
===============
tsiz: 0x1fb8
hsiz: 0x2ba
pbl: 0x1c1ba444
bdba: 0x004000aa
76543210
flag=--------
ntab=1
nrow=340
frre=-1
fsbo=0x2ba
fseo=0x5a8
avsp=0x33a
tosp=0x33a
0xe:pti[0] nrow=340 offs=0
0x12:pri[0] offs=0x1fa7
0x14:pri[1] offs=0x1f95
... ...
... ...
tab 0, row 339, @0x60e
tl: 20 fb: --H-FL-- lb: 0x0 cc: 3
col 0: [ 1] 80
col 1: [10] 53 59 53 5f 43 30 30 33 33 35
col 2: [ 3] c2 04 24
end_of_block_dump
End dump data blocks tsn: 0 file#: 1 minblk 170 maxblk 170
BBED> p *kdbr[12]
rowdata[0]
----------
ub1 rowdata[0] @1516 0x2c
BBED> x /rccnn
rowdata[0] @1516
----------
flag@1516: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@1517: 0x01
cols@1518: 3
BBED> x /rccnn
rowdata[0] @1516
----------
flag@1516: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@1517: 0x01
cols@1518: 3
SQL>create table T_SUNHAILONG (id int primary key,value varchar2(20)) tablespace USER;
create table T_SUNHAILONG (id int primary key,value varchar2(20)) tablespace USER
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-08102: index key not found, obj# 49, file 1, block 27255 (2)
udump trace:
*** ACTION NAME:() 2015-01-03 18:40:47.118
*** MODULE NAME:(sqlplus@bogon (TNS V1-V3)) 2015-01-03 18:40:47.118
*** SERVICE NAME:(SYS$USERS) 2015-01-03 18:40:47.118
*** SESSION ID:(159.3) 2015-01-03 18:40:47.118
tkcrrsarc: (WARN) Failed to find ARCH for message (message:0x1)
tkcrrpa: (WARN) Failed initial attempt to send ARCH message (message:0x1)
kwqmnich: current time:: 2: 40: 51
kwqmnich: instance no 0 check_only flag 1
kwqmnich: initialized job cache structure
oer 8102.2 - obj# 49, rdba: 0x00406a77(afn 1, blk# 27255)
kdk key 8102.2:
ncol: 1, len: 4
key: (4): 03 c2 35 19
mask: (4096):
故障出现:
SQL> select obj#,name,owner#,type# from obj$ where obj#=49;
OBJ# NAME OWNER# TYPE#
---------- ------------------------------ ---------- ----------
49 I_CON2 0 1
SQL> select/*+ FULL(T1) */ OWNER#,NAME,CON# FROM CON$ T1
2 minus
3 select /*+ index(T I_CON2) */ owner#,name,con# from con$ T;
OWNER# NAME CON#
---------- ------------------------------ ----------
0 _NEXT_CONSTRAINT 5224
SQL> SELECT /*+ index(t I_CON2) */ owner#, NAME, con# FROM CON$ t where t.NAME
='_NEXT_CONSTRAINT';
OWNER# NAME CON#
---------- ------------------------------ ----------
0 _NEXT_CONSTRAINT 5214
SQL> select /*+ FULL(T1) */ OWNER#,NAME,CON# FROM CON$ T1 where t1.NAME
='_NEXT_CONSTRAINT';
OWNER# NAME CON#
---------- ------------------------------ ----------
0 _NEXT_CONSTRAINT 5224
SQL> select dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(row
id) block#, dbms_rowid.rowid_row_number(rowid) row# from con$ where name='_NEXT_CON
STRAINT';
FILE# BLOCK# ROW#
---------- ---------- ----------
1 170 12
SQL> select object_name,owner,object_type from dba_objects where object_id=49;
OBJECT_NAME OWNER OBJECT_TYPE
------------------------------ ------------------------------ -------------------
I_CON2 SYS INDEX
kdxlenxt 0=0x0
kdxleprv 4221558=0x406a76
kdxledsz 6
kdxlebksz 8032
row#0[8020] flag: ------, lock: 0, len=12, data:(6): 00 40 e2 fa 00 ea
col 0; len 3; (3): c2 32 39
row#1[8008] flag: ------, lock: 0, len=12, data:(6): 00 40 e2 fa 00 eb
col 0; len 3; (3): c2 32 3a
row#2[7996] flag: ------, lock: 0, len=12, data:(6): 00 40 e2 fa 00 ec
col 0; len 3; (3): c2 32 3b
... ...
row#237[5178] flag: ------, lock: 0, len=12, data:(6): 00 40 e2 fb 00 dd
col 0; len 3; (3): c2 34 5f
row#238[4712] flag: ------, lock: 2, len=12, data:(6): 00 40 e2 fb 00 e4
col 0; len 3; (3): c2 35 0e
row#239[4724] flag: ------, lock: 0, len=12, data:(6): 00 40 00 aa 00 0c
col 0; len 3; (3): c2 35 0f
----- end of leaf block dump -----
End dump data blocks tsn: 0 file#: 1 minblk 27255 maxblk 27255
rowid = 00 40 00 aa 00 0c
在索引块 dump 文件中搜索 rowid 的串,定位到 row#239[4724]
也就是把 c2 35 0f 修改为 c2 35 19 就可以与表数据保持一致了。
row#239[4724] flag: ------, lock: 0, len=12, data:(6): 00 40 00 aa 00 0c
col 0; len 3; (3): c2 35 0f
c2350f
BBED> dump
File: /data/orcl/system01.dbf (1)
Block: 27255 Offsets: 4828 to 5339 Dba:0x00406a77
------------------------------------------------------------------------
01000040 e2fb00e3 03c23508 01000040 e2fb00e2 03c23509 01000040 e2fb00e1
03c2350a 01000040 e2fb00e0 03c2350b 01000040 e2fb00df 03c2350c 01000040
BBED> modify /x 19
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
File: /data/orcl/system01.dbf (1)
Block: 27255 Offsets: 4827 to 5338 Dba:0x00406a77
------------------------------------------------------------------------
19010000 40e2fb00 e303c235 08010000 40e2fb00 e203c235 09010000 40e2fb00
e103c235 0a010000 40e2fb00 e003c235 0b010000 40e2fb00 df03c235 0c010000
SQL> create table T_SUNHAILONG (id int primary key,value varchar2(20)) tablespace USERS;
Table created.
创建带主键的表顺利完成。
SQL> select/*+ FULL(T1) */ OWNER#,NAME,CON# FROM CON$ T1
2 minus
3 select /*+ index(T I_CON2) */ owner#,name,con# from con$ T;
no rows selected
SQL>
SQL> SELECT /*+ index(t I_CON2) */owner#, NAME, con# FROM CON$ t where t.NAME
='_NEXT_CONSTRAINT';
OWNER# NAME CON#
---------- ------------------------------ ----------
0 _NEXT_CONSTRAINT 5225
再次查询验证数据字典,已经是一致的了。