您的位置:首页 > 数据库 > Oracle

Oracle 中如何手工提交Cluster Table的事务

2014-07-02 20:16 363 查看
环境中遇到了ora-00600 4000错误,涉及的对象即为cluster table,下面我这里简单模拟了一下。供参考!
++++创建测试表

?
++++blockdump内容

?
大家可以看到,这跟普通的data block的dump内容是有所差别的,因为这里涉及到cluster table。

下面来模拟下手工提交cluster table的事务。

+++++模拟事务不提交

?
这里我们可以看到对于这个未提交的事务XID为:3.17.1212 前面我们已经知道

测试表中的数据分布在3个block中,这里我模拟的情况是删除第3条数据,且不提交,通过bbed来实现手工

提交这个未提交事务,注意:第3条数据是在第3个block中,即174 block。

+++++首先修改表的itl等信息

?
我们可以看到,无论怎么修改,这个block通过bbed进行检测都报错,这里不是因为修改的不对,而是因为

还需要修改cluster 上的Index信息。通过treedump 我们可以确认index block为file 6 block 187.

+++++ dump Index block

?
+++++ dump 内容如下

?
可以看到,该index block中还存在3个index entry信息,我们需要将第3条信息给删掉,首先计算一下offset:

?
+++++利用bbed修改 index block

?
到这里,我们完成了Index Block的修改,最后我们再来校验一下前面的data block,你会发现已经ok了,如下:

BBED> set file 2 block 174

FILE# 2

BLOCK# 174

BBED> verify

DBVERIFY – Verification starting

FILE = /oracle/oradata/roger/sysaux01.dbf

BLOCK = 174

DBVERIFY – Verification complete

Total Blocks Examined : 1

Total Blocks Processed (Data) : 0

Total Blocks Failing (Data) : 0

Total Blocks Processed (Index): 0

Total Blocks Failing (Index): 0

Total Blocks Empty : 1

Total Blocks Marked Corrupt : 0

Total Blocks Influx : 0

Message 531 not found; product=RDBMS; facility=BBED

BBED>

+++++ 最后来验证下数据

?
至此,整个模拟测试结束,供参考!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: