00014010 00 00 00 00 01 00 17 00 54 D2 00 00 0A 89 43 00
chkval spare3_kcbh typ ? seg/obj csc
00014020 00 00 E8 1F 02 00 03 00 00 00 00 00 04 00 0C 00
csc ? itc ? flg fsl fnx xid
1 : 20 bytes
type: 0x06=trans data defined in kcb.h
frmt:
8i~9i 都是 0x02 10.1.0 2k: 0x62 4k:0x82 8k:0xa2 16k:0xc2 (logfile 0x22
512 bytes)
spare1/2_kcbh: ub1 spare1_kcbh this field is no longer used (old inc#, now always 0)
ub1 spare2_kcbh this field is no longer used (old ts#, now always 0)
rdba:
0x0140000a 转换成 2 进制后它的前 10 bit 表示 file id 后 22 bit 表示的
block id 可以看出一个 tablespace 可以有 1023 个 datafile ,每个 datafile 可
以有 4M 的 block
10G 出现的 big datafile 这里表示的就是 block id 了 没有 file id
9.2.0 试验过一个 tablespace 可以有 1023 个 datafile 一个 object 可以存放
在 1023 个 datafile 中
scn: scn: 0x0000.0043890e
seq: A sequence number incremented for each change to a block at the same
SCN
A new SCN is allocated if the sequence number wraps.
同一个 SCN 影响这个 block 中的行数大于 254 行就会为这个事务分配一
个新的 SCN
如下面的操作就可能引起同一个 SCN 但影响的同一个 block 中的行超过
254 行
"delete from table_name"
影响的行数(最大 254) 是用从 0x01 到 0xfe 表示的
当这个 byte 的数据为 0xff 的时候标志这个 block 坏调了---> ora-01578
Sequence number:
SEQ -> 0 /* non-logged changes - do not advance seq# */
SEQ -> (UB1MAXVAL-1)/* maximum possible sequence number */
SEQ -> (UB1MAXVAL) /* seq# to indicate a block is corrupt,equal to FF.
soft corrupt*/
0xff : When present it indicates that the block has been marked as
corrupt by Oracle. either by the db_block_checking functionality or the
equivalent events (10210 for data blocks, 10211 for index blocks, and
10212 for cluster blocks) when making a database change, or by the
DBMS_REPAIR.FIX_CORRUPT_BLOCKS procedure, or by PMON after
an unsuccessful online block recovery attempt while recovering a failed
process, or by RMAN during a BACKUP, COPY or VALIDATE command
with the CHECK LOGICAL option. Logical corruptions are normally due
to either recovery through a NOLOGGING operation, or an Oracle
software bug.
flg:
as defined in kcbh.h
#define KCBHFNEW 0x01 /* new block - zeroed data area */
#define KCBHFDLC 0x02 /* Delayed Logging Change advance SCN/seq
*/
#define KCBHFCKV 0x04 /* ChecK Value saved-block xor's to zero */(
检
查值保存块异或零
)
#define KCBHFTMP 0x08 /* Temporary block */
这是一个可以组合的值 也就是说有为 6 的时候是 2,4 两种情况的组合
Block structure as defined in kcbh.h:
struct kcbh
{ub1 type_kcbh; /* Block type* /
ub1 frmt_kcbh; /* #define KCBH_FRMT8 2 */
ub1 spare1_kcbh;
ub1 spare2_kcbh;
krdba rdba_kcbh; /* relative DBA /
ub4 bas_kcbh; /* base of SCN */
ub2 wrp_kcbh; /* wrap of SCN */
ub1 seq_kcbh; /* sequence # of changes at same scn */
spare3_kcbh : ub2 spare3_kcbh
2 : 24 bytes (总计 44bytes)
typ : 1 - DATA 2 index
改成 3 了在 10.1.0 上引起了 ora-600[2032]然后 ORA-27101: shared
memory realm does not exist
oracle 进行查询的时候是根据 obj$表中的情况来判断对象的类型的,不是根
据这个 typ 也就是说如果有一个表但改变表中 block 的这个标志位,一样可
以查询出数据来,
但 dump block 时会出错,ORA-00600: 内部错误代码,自变量: [4555], [0],
[], [], [], [], [], []
错误中的 [0] 就是 typ 对应的数据
在 10G 中改变它后 update 这个 block 的数据 commit 可以但 rollback 的报
错
?
见过有其他值 但用编辑器改这个值 在 dump 文件中显示不出来变化
seg/obj: 0xd254
csc : 0x00.43890a The SCN at which the last full cleanout was performed on
the block