创建索引遇到 ora-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 3502904
  • 博文数量: 718
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7790
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(718)

文章存档

2024年(4)

2023年(74)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

最近访客
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: oracle

2021-12-11 17:25:08

测试环境重建索引时遇到了ora-08104,怎么办?

先看看这个报错:

等待是不可能等待的,那就修复一下,官方解释如下:

  1. 有时,索引的在线重建会报告 ora-8104。
  2. 这可能有很多原因。
  3. 例如,在具有许多事务的高度活跃的数据库中,表上未提交事务的可能性很高。因此,如果这样的表需要重建索引,
  4. 由于未提交的事务,我们可能会看到此错误。在其他情况下,我们可能会看到一个死进程,其中一个未提交的事务持有表上的锁。这也阻止了我们重建索引。这完全是在线重建功能的设计。但是,我们不能让数据库永远处于这种状态,因此 smon 旨在清除这些情况。
  5. 如果已使用命令 kill -9 从操作系统中杀死进程,则该进程最终可能会死亡。
  6. 如果进程在执行以下操作时被终止:
  7. alter index rebuild online;
  8. 那么该可能最终处于需要清理的状态。
  9. 有人会认为指数下降就可以解决问题。但是,
  10. 这只会返回错误:ora-8104“此索引对象 %s 正在联机构建或重建。”

  1. 解决方法是使用
  2. dbms_repair 包中的 online_index_clean 过程


  3. 解决问题:
  4. ==============

  5. smon 最终会清除锁定的索引,因此实际上不需要任何操作。然而,让 smon 进行清理可能会有点“碰巧”,因为 smon 将尝试每 60 分钟清理一次,如果它无法使用 nowait 锁定对象,它将稍后再试一次。在具有许多事务的高度活跃的数据库中,这可能导致重建需要很长时间,因为 smon 不会通过 nowait获得锁定。其他情况,如针对表的未提交事务也会导致 smon 不重建索引。


  6. 只要不重建索引,对索引的所有访问都会导致 ora-8104 或 ora-8106。因此,为了解决这种情况,可以使用以下方法手动清理

  7. sqlplus / as sysdba

  8. declare
  9.  isclean boolean;
  10. begin
  11.  isclean := dbms_repair.online_index_clean();
  12. end;
  13. /

dbms_repair.online_index_clean 介绍:
此功能对失败或中断的在线索引构建或重建执行手动清理。
无论用户启动的清理如何,smon 也会定期执行此操作 (批:听起来很感动,可实际可能不干活)。
如果所有指定的索引都已清除则返回true;如果一个或多个索引无法清除,则此函数返回false。



关于这个clean,还要注意一下:

  1. 建议在生产库上如下使用:
  2. select object_id from dba_objects where object_name='&idx_name';
  3. 假设得到的索引对象id是76064,ora-8104报错也会提示相关id

  4. set serveroutput on
  5. declare
  6.  isclean boolean;
  7. begin
  8.  isclean := dbms_repair.online_index_clean(76064);
  9.  dbms_output.put_line(sys.dbms_sqltcb_internal.i_convert_from_boolean(isclean));
  10. end;
  11. /
如果已经修复,再执行上面的语句则会报错:

在测试环境中可以不输入object_id参数,就会把所有有问题的索引都修复一下。


阅读(2067) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图