前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【DB笔试面试662】在Oracle中,对于错误“ORA-08104”应该如何处理?

【DB笔试面试662】在Oracle中,对于错误“ORA-08104”应该如何处理?

作者头像
AiDBA宝典
发布于 2019-10-19 01:30:44
发布于 2019-10-19 01:30:44
87200
代码可运行
举报
运行总次数:0
代码可运行

题目部分

在Oracle中,对于错误“ORA-08104: this index object 68111 is being online built or rebuilt”,应该如何处理?(如何清除创建失败的索引?)

答案部分

答案:官方文档的解释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
108104, 00000, "this index object %s is being online built or rebuilt"
2// *Cause:  the index is being created or rebuild or waited for recovering 
3//          from the online (re)build 
4// *Action: wait the online index build or recovery to complete

由此可见,出现该错误的原因是,索引正在被新建或重建或在等待在线重建完成。

在创建或重建索引时,系统会创建一个临时日志表,这张表被用于存放创建或者重建索引期间产生的日志信息,同时在基表IND$中这个索引的FLAG字段上会被设置为BUILD或者REBUILD标识。当索引信息变更时会把变更信息存入日志表。如果索引创建或者重建失败,那么这个日志表和数据字典中的状态位都需要后台进程smon进行清理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1SQL> ALTER INDEX IDX_LOG_LHRINON REBUILD ONLINE ;
2ALTER INDEX IDX_LOG_LHRINON REBUILD ONLINE
3*
41 行出现错误:
5ORA-08104: this index object 68111 is being online built or rebuilt

可以检查一下68100对象,发现就是要REBUILD的那个索引:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1SQL> SELECT OWNER, OBJECT_NAME, OBJECT_ID, OBJECT_TYPE
2  2    FROM DBA_OBJECTS O
3  3   WHERE O.OBJECT_ID = '68111';
4OWNER    OBJECT_NAME         OBJECT_ID OBJECT_TYPE
5-------- ------------------ ---------- -----------
6REPLHR   IDX_LOG_LHRINON         68111 INDEX

因此,这里的索引不能被在线重建是因为后台进程smon还没来得急清理相应的临时段和标志位,认为ONLINE REBUILD操作还在进行。那么如何终止REBUILD INDEX这一操作呢?在MOS上有一篇文档:“ORA-600 [12813] When Dropping A Table Partition After a Failed IndexRebuild (文档 ID 803008.1)”,给出了2种办法。

如果在出现问题的对象的数据库活动能停下来,则直接简单地执行如下语句即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1connect / as sysdba
2select dbms_repair.online_index_clean(<problem index object_id>) from dual; 
3exit

如果在出现问题的对象的数据库活动不能停下来,则如下的PL/SQL block来处理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1declare
 2  isClean boolean;
 3begin
 4  isClean := FALSE;
 5  while isClean=FALSE loop
 6isClean := dbms_repair.online_index_clean(dbms_repair.all_index_id,
 7                                          dbms_repair.lock_wait);
 8dbms_lock.sleep(2);
 9  end loop;
10  exception 
11when others then 
12  RAISE; 
13end;
14/

在以上程序中,加上dbms_repair.lock_wait表示不是立刻清理,需要不断的寻找资源锁,直到抢到为止。

执行完成后,再次执行重建索引的语句即可。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
oracle坏块修复实例
最近几天发现库里有坏块了,环境是11gR2, linux平台的64位的库。以下是我的修复办法,基于dbms_repair做的在线修复,也可以基于备份rman来修复,archivelog,noarchive log可能修复的方式有所不同。 -->首先从alert.log里面发现如下的错误。 DDE: Problem Key 'ORA 1110' was flood controlled (0x1) (no incident) ORA-01110: data file 8: '/dbTS2/oracle/TES
jeanron100
2018/03/13
1.3K0
Oracle并行添加主键的方法
需求:生产一张表由于前期设计不当,没有主键。现需要添加主键,数据量很大,想并行建立。
Alfred Zhao
2019/05/24
1.7K0
Oracle数据库运维方案及优化
运维优化 本文详细讲解了如何对Oracle数据库进行运维,从各个方面来说明了如何去运维。
全栈程序员站长
2022/11/01
1.7K0
【DB笔试面试593】在Oracle中,表的访问方式有哪几种?
访问表的方式也叫优化器访问路径,主要有3种访问路径:全表扫描(FULL TABLE SCAN,FTS)、索引扫描(INDEX SCAN)和ROWID访问。
AiDBA宝典
2019/09/29
1.2K0
【DB笔试面试593】在Oracle中,表的访问方式有哪几种?
闪回归档的简单测试(r8笔记第68天)
11g里面的新特性闪回归档,为历史数据的定制查询提供了一种可能。抽时间学习了一下这个特性,发现还是比较清晰易用。如果使用得当还是很不错的一个特性。 我们来简单模拟一个例子来看看。 首先需要创建独立的表空间,属性需要为segment space management auto,因为默认属性就是如此,所以我们简化语句。 SQL> create tablespace fbarch datafile'/U01/app/oracle/oradata/actvdb/fbarch.dbf' size 10M ; Tabl
jeanron100
2018/03/19
6270
Oracle优化之单表分页优化
SQL> create table t_test as select * from dba_objects;
星哥玩云
2022/08/17
9280
一个索引创建引出的思考
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bisal
2019/09/25
4450
索引:Rebuild Online 被坑的知识点-ORA-08106
最近一直通过rebuild online 做索引碎片整理,因表均为分区表,大部分为本地索引及分区索引,有的表涉及上千个索引分区,于是我就用脚本放在后台执行了。这种情况正常运行了一个月。
布衣530
2025/01/10
2130
索引:Rebuild Online 被坑的知识点-ORA-08106
Oracle 宕机后文件损坏resetlogs后处理
Oracle数据库意外宕机,归档开了,但是归档文件损坏,redo损坏,在强行拉起来之后UNDO报错,设置_corrupted_rollback_segments 跳过不一致的UNDO,重建UNDO表空间,接着报错:SMON encountered 100 out of maximum 100 non-fatal internal errors. 然后数据库自动宕机,报错处理如下: 1ORA-00600: internal error code, arguments: [13013], [5001], [458], [4197442], [6], [4197442], [3], [], [], [], [], []
星哥玩云
2022/08/17
6800
Oracle 宕机后文件损坏resetlogs后处理
【DB笔试面试449】如何监控数据库的登陆登出、DDL语句等内容?
系统中一些常用的监控都可以使用DDL触发器和系统触发器来实现。可以先创建一张记录DDL语句的表XB_AUDIT_DDL_LHR(由于该表记录数会很大,所以,需创建成按月自动分区的分区表),并创建合适的索引,然后创建存储过程用于插入DDL信息到该日志表中。最后再创建系统触发器就可以将DDL语句或系统事件的信息插入日志表中。下面详细说明DDL触发器和系统触发器的使用。
AiDBA宝典
2019/09/30
6210
Oracle索引知识学习笔记
Oracle索引中最常用的是BTree索引,所以就以BTree索引为例,讲一下BTree索引,BTree索引数据结构是一种二叉树的结构,索引由根块(Root)、茎块(Branch)、叶子块(Leaf)组成,其中叶子块主要存储索引列具体值(Key Column Value)以及能定位到数据块具体位置的Rowid,茎块和根块主要保存对应下级对应索引
SmileNicky
2019/06/17
6850
Oracle 聚簇因子(Clustering factor)
    聚簇因子是 Oracle 统计信息中在CBO优化器模式下用于计算cost的参数之一,决定了当前的SQL语句是否走索引,还是全表扫描以及是否作为嵌套连接外部表等。如此这般,那到底什么是聚簇因子,那些情况下会影响到聚簇因子,以及如何提高聚簇因子?本文将对此展开描述。
Leshami
2018/08/14
1.7K0
Oracle 聚簇因子(Clustering factor)
【迁移】Oracle分区表及索引迁移表空间
近期计划使用XTTS方式迁移某库,在进行自包含检查时发现,该库有部分数据(分区表、索引)存放于SYSTEM表空间中,需要先将这部分数据移动到要迁移的表空间中。
甚至熊熊
2021/04/22
2.4K0
【DB笔试面试556】在Oracle中,虚拟索引的作用有哪些?
在数据库优化中,索引的重要性是不言而喻的。但是,在性能调整过程中,一个索引是否能被查询用到,在索引创建之前是无法确定的,而创建索引是一个代价比较高的操作,尤其是当数据量较大的时候。这种情况下,创建虚拟索引是一个很好的选择。
AiDBA宝典
2019/09/29
5540
使用 DBMS_REPAIR 修复坏块
       对于Oracle数据块物理损坏的情形,在我们有备份的情况下可以直接使用备份来恢复。对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等。对于这几种方式我们需要实现基于数据库以及文件级别的恢复。RMAN同时也提供了基于块介质方式的恢复。也就是说我们根本不需要还原数据文件,而是直接从备份文件基于块来提取以实现联机恢复。可参考基于RMAN实现坏块介质恢复(blockrecover) 。这是比较理想的情形。如果没有任何备份怎么办?我们可以使用Oracle自带的DBMS_REPAIR包来实现修复。注意,不要被文章题目有所误导。这里的修复是有损修复也就是说将受损的数据块标记为坏块,不对其进行访问而已。就好比我们磁盘有坏道,找个磁盘修复工具将坏道标出来不使用,同理。那受损的数据岂不是无力回天啦,呜呜......要记得随时备份阿。。
Leshami
2018/08/13
1K0
关于dual表的破坏性测试(r3笔记第60天)
关于dual表的破坏性测试,既然是破坏性测试,就需要确定这个测试仅限于测试或者个人学习所用,可能有些sql看似极为简单,但是一旦运行就会导致整个业务系统崩溃。 比如说我们拿dual表开刀,这个表是一个dummy表,里面的内容没有特定的意义,就是为了存在而存在。但是一旦这个表出现问题,所有相关的基础操作都会受到影响,后果不敢想象。 来简单模拟一下,在个人的机器上开始做下面的尝试,drop 表dual SQL> show user USER is "SYS" SQL> SQL> show parameter
jeanron100
2018/03/15
9060
Oracle数据块损坏的恢复实例
数据库有有效的RMAN备份,那么很简单,直接恢复损害数据块即可。 RMAN> blockrecover datafile 6 block 3893;
Alfred Zhao
2019/05/24
1.7K0
【DB笔试面试657】在Oracle中,与锁有关的数据字典视图有哪些?
常用的与锁有关的数据字典视图有DBA_DML_LOCKS、DBA_DDL_LOCKS、V$LOCK、DBA_LOCK、V$LOCKED_OBJECT。V$LOCKED_OBJECT记录的是DML锁信息,而没有记录DDL锁。V$LOCK和DBA_LOCKS和DBA_LOCK内容一样,DBA_LOCKS是DBA_LOCK的同义词。可以用动态性能视图V$FIXED_VIEW_DEFINITION来查看它们的关系。
AiDBA宝典
2019/10/13
7160
【DB笔试面试789】在Oracle中,BMR如何恢复坏块?
如果数据库只有很少的数据块被破坏,那么块介质恢复(Block Media Recovery,BMR)是较好的块恢复方法。BMR只能用于恢复物理损坏(Physical Corruptions),在数据文件联机时即可恢复相关坏块。BMR主要使用BLOCKRECOVER命令进行恢复坏块,该命令有以下三种使用方式:
AiDBA宝典
2020/05/07
1.1K0
索引重建失败的解决
在Oracle中创建索引,尤其是大的热表索引(存在很多的活动事务),如果在创建过程中出现异常,例如会话中断(OS层面kill-9),可能会导致Oracle数据字典内已经包含了该索引的信息(诸如像在ind$的标记位信息不能及时复位),但是却实际没有为该索引分配段,进而导致需要重新建立索引的时候,可能会抛出异常,如下所示,在删除索引IDX1时,会提示索引对象826976号正在创建或者被重建,无法删除,(在alter table ... drop partition的时候(Drop Partition Failed With ORA-08104: This Index Object Is Being Online Built Or Rebuilt (Doc ID 2358693.1)),可能出现相同的错误),
bisal
2019/10/26
1K0
推荐阅读
相关推荐
oracle坏块修复实例
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文