Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

157

积分

0

好友

14

主题
1#
发表于 2013-2-5 10:19:08 | 查看: 3186| 回复: 3
本帖最后由 clevernby 于 2013-2-5 10:38 编辑

使用10046事件可以观察到rebuild index online期间读取的是表数据而非旧索引,这是为什么呢?

一开始我猜测,为了让rebuild index online能够成功完成,rebuild期间应该只进行当前读而不是一致读,这可以避免一致读导致的ORA-01555,待rebuild完成后使用日志表订正数据。在这套机制下,如果当前读使用old index,那么因index split而导致的不一致无法基于日志表订正,据此只能使用表数据。

使用10200,10201事件观察rebuild index online过程,发现其实是基于一致读使用的表数据,之前的猜测被推翻。在这套机制下rebuild index online理论上会遭遇ORA-01555错误。此外又回到了主题,为什么不能一致读旧索引数据呢?

假设数据库版本为11.2.0.3.1 Linux x86-64
2#
发表于 2013-2-5 10:23:34
rebuild index是使用old index 数据,online是全表扫描表,然后还有一个临时表,最后的时候整合。

回复 只看该作者 道具 举报

3#
发表于 2013-2-5 10:25:36
本帖最后由 clevernby 于 2013-2-5 10:27 编辑
willing_ox 发表于 2013-2-5 10:23
rebuild index是使用old index 数据,online是全表扫描表,然后还有一个临时表,最后的时候整合。 ...


我其实是想知道是什么原因不能使用旧索引数据。而且你说的那个也不是临时表,是个IOT表。
create table "SYS"."SYS_JOURNAL_xxxxxx" (C0 NUMBER,  opcode char(1), partno number,  rid rowid, primary key( C0 , rid )) organization index TABLESPACE "SYSTEM"

回复 只看该作者 道具 举报

4#
发表于 2013-2-5 11:39:55
为什么不能一致读旧索引数据呢?

==> 我的理解是 for concurrency , JOURNAL table+INDEX不能满足所有concurrency 操作的一致性要求

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 06:30 , Processed in 0.051582 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569