创建index 使用Online导致的问题(95天)

在本地的测试库中,本来空间就不足,结果创建了一个表有600多万条记录,想创建一个index. 物理段有340多M.

临时段大小有100M,结果想创建一个索引,总是报临时表空间不足的错误。

[ora11g@rac1 test]$ ksh test.sh "create unique index t_pk on t(object_id) tablespace pool_data nologging online;" 
create unique index t_pk on t(object_id) tablespace pool_data nologging online 
                            * 
ERROR at line 1: 
ORA-01652: unable to extend temp segment by 128 in tablespace TEMPTS1

排除了索引所在的表空间不足的问题,实时监控了一下,发现确实临时表空间使用率在瞬间飙到100%,然后就报了ORA-01652的错误。

在尝试各种方法之后,先扩大临时段再次尝试。

alter database tempfile '/u03/ora11g/oradata/TEST01/temp01.dbf' resize 200M;
---结果再次尝试的时候,就有了如下的错误。 
create unique index t_pk on t(object_id) tablespace pool_data nologging online 
                            * 
ERROR at line 1: 
ORA-00603: ORACLE server session terminated by fatal error 
ORA-01114: IO error writing block to file  (block # ) 
ORA-01114: IO error writing block to file 201 (block # 15439) 
ORA-27072: File I/O error 
Additional information: 4 
Additional information: 15439 
Additional information: 4096 
Process ID: 5683 
Session ID: 18 Serial number: 103
Elapsed: 00:00:21.11 
ERROR: 
ORA-03114: not connected to ORACLE

一看就有些崩溃了,以为数据库又挂了。一看进程,还在,还能连接。

[ora11g@rac1 dbm_lite]$ ps -ef|grep smon 
ora11g    2357     1  0 05:32 ?        00:00:01 ora_smon_TEST01 
ora11g    5746  5327  0 06:27 pts/0    00:00:00 grep smon

查看alert日志。

Fri Jun 06 06:26:14 2014 
alter database tempfile '/u03/ora11g/oradata/TEST01/temp01.dbf' resize 200M 
Completed: alter database tempfile '/u03/ora11g/oradata/TEST01/temp01.dbf' resize 200M 
Fri Jun 06 06:26:39 2014 
online index (re)build cleanup: objn=15331 maxretry=2000 forever=0 
Fri Jun 06 06:26:57 2014 
Non critical error OR

那就再次尝试创建,结果错误接二连三。

再次创建,提示索引已经存在了。 create unique index t_pk on t(object_id) tablespace pool_data nologging * ERROR at line 1: ORA-00955: name is already used by an existing object

那我删除重建呢。

drop index t_pk 
           * 
ERROR at line 1: 
ORA-08104: this index object 15334 is being online built or rebuilt

试试force选项。

drop index t_pk force 
* 
ERROR at line 1: 
ORA-29862: cannot specify FORCE option for dropping non-domain index

查看Index的状态,显示是valid

********** INDEX DETAILS INFO *****************
INDEX_NAME                     TABLESPACE INDEX_TYPE UNIQUENES PAR COLUMN_LIST                    TABLE_TYPE STATUS   NUM_ROWS LAST_ANAL G 
------------------------------ ---------- ---------- --------- --- ------------------------------ ---------- ------ ---------- --------- - 
T_PK                           POOL_DATA  NORMAL     UNIQUE    NO  OBJECT_ID                      TABLE      VALID                       N
TABLE_NAME                     INDEX_NAME                     CLUSTERING_FACTOR     BLOCKS   NUM_ROWS 
------------------------------ ------------------------------ ----------------- ---------- ---------- 
T                              T_PK                                                  39174    6856704

那我再次rebuild 可以吗?

alter index t_pk rebuild parallel 4 
* 
ERROR at line 1: 
ORA-08104: this index object 15334 is being online built or rebuilt

无奈,总不能一直等着吧。而且过了好一会儿,也不见有进展。

如果在生产环境中,那绝对算是一次事故。在早期版本中,可能只有重启,让smon来做清理了。

不知道从10g还是11g开始,有dbms_repair包,里面还包括了一个蛮实用的方法。可以解决这个问题。

SQL> declare 
  2  isClean boolean; 
  3  
  4  begin 
  5  isClean := FALSE; 
  6  while isClean=FALSE loop 
  7  isClean := dbms_repair.online_index_clean(dbms_repair.all_index_id, 
  8  dbms_repair.lock_wait); 
  9  dbms_lock.sleep(2); 
10  end loop; 
11  exception 
12  when others then 
13  RAISE; 
14  end; 
15  /
PL/SQL procedure successfully completed.

运行成功后,再次尝试。

alter index t_pk rebuild parallel 4 
* 
ERROR at line 1: 
ORA-01418: specified index does not exist

这终于是我期望的结果了,看来在生产中,index的online rebuild也要慎重使用。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-06-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

SQL*Loader-805的解决(r2笔记36天)

使用sql*loader是大型项目中数据迁移的利器。如果是外部系统,其他数据库到oracle的数据迁移,使用文本式文件是最兼容的方式。 sqlldr的加载效率是...

2998
来自专栏杨建荣的学习笔记

通过shell脚本抓取awr报告中的问题sql(r6笔记第78天)

awr报告中的sql明细部分基本必看的部分,尤其是SQL Order by Elapsed time这个部分,能够很清晰的看到哪些sql语句占用了较多的DB t...

2483
来自专栏杨建荣的学习笔记

数据库11g升级中一次奇怪的问题 (30天)

客户的测试环境已经从10g升级到11g了。但是没过几天,数据hang住了,登都登不了了,而且通过sys,system,普通用户连接的错误都不一样 首先通过 一下...

2904
来自专栏数据库新发现

Oracle9i新特点:SPFILE的使用--How to set events with spfile and etc

本文发表于itpub技术丛书《Oracle数据库DBA专题技术精粹》,未经许可,严禁转载本文.

301
来自专栏Jerry的SAP技术分享

使用ABAP代码返回S/4HANA Material上维护的Attachment明细

1433
来自专栏乐沙弥的世界

ORA-32004 的错误处理

启动数据库时,收到了ORA-32004 的错误,错误多是一些过时且在当前版本中不在使用的参数,如果碰到类似的错误,只需要将其

762
来自专栏杨建荣的学习笔记

关于奇怪的并行进程分析(二) (r6笔记第46天)

前几天的并行问题自己分析了下,也算有了一些进展,但是目前还没有找到让人信服的理由,有些读者也比较关心这个问题,所以第二篇中会把自己的分析过程写出来,第三篇中应该...

2513
来自专栏杨建荣的学习笔记

11g主库归档自动删除的小问题分析 (r8笔记第1天)

最近在无疑中查看一个数据库的日志的时候,发现里面有这么一段内容。 Sat Feb 06 10:07:25 2016 Deleted Oracle manag...

32611
来自专栏杨建荣的学习笔记

临时表空间故障处理 (33天)

最近测试环境需要把一些现有的存储空间匀出一部分来给新增的环境使用。 unix组的人很快就空间按照指定的比例重新切分好了。环境交给我的时候,我先把数据库起来,没有...

3516
来自专栏杨建荣的学习笔记

关于两个简单问题的分析(r9笔记第10天)

工作中碰到问题当然是见怪不怪了,而处理这些问题也是我们的价值所在。 今天处理了几个看起来比较有意思的小问题,当然究其原因,要不是不规范,要不就是基本功不够扎实。...

2774

扫描关注云+社区