我的编程空间,编程开发者的网络收藏夹
学习永远不晚

创建index 使用Online导致的问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

创建index 使用Online导致的问题

在本地的测试库中,本来空间就不足,结果创建了一个表有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也要慎重使用。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

创建index 使用Online导致的问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用lombok的@Data会导致栈溢出StackOverflowError问题

这篇文章主要介绍了使用lombok的@Data会导致栈溢出StackOverflowError问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-21

如何解决SAP WM Production Schedule Profile设置问题导致生产补货的TO单自动创建问题

今天就跟大家聊聊有关如何解决SAP WM Production Schedule Profile设置问题导致生产补货的TO单自动创建问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
2023-06-05

如何解决调用Process.waitfor导致的进程挂起问题

这篇文章主要介绍如何解决调用Process.waitfor导致的进程挂起问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!问题背景如果要在Java中调用shell脚本时,可以使用Runtime.exec或Proces
2023-06-22

JavaScript使用splice方法删除数组元素可能导致的问题分析

这篇文章主要介绍了JavaScript使用splice方法删除数组元素可能导致的问题分析,当在JavaScript中从数组中删除元素时,使用splice方法时需要谨慎,本文给大家详细讲解,需要的朋友可以参考下
2023-05-17

如何解决使用Google CDN导致网站页面无法加载的问题

本篇内容主要讲解“如何解决使用Google CDN导致网站页面无法加载的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决使用Google CDN导致网站页面无法加载的问题”吧!国内网非
2023-06-10

使用OleDbParameter创建用于访问的表

要使用OleDbParameter创建用于访问的表,首先需要连接到数据库。然后,可以使用OleDbCommand对象执行CREATE TABLE语句,并使用OleDbParameter对象为表中的列定义参数。以下是一个示例代码,演示如何创建
2023-09-27

关于SurfaceView创建时,surfaceCreated调用的问题

当SurfaceView创建时,surfaceCreated()方法会被调用。在该方法中,你可以初始化相关的变量和资源,并且开始绘制你的界面。在调用surfaceCreated()方法之前,SurfaceView的Surface会被创建好,
2023-09-14

如何解决使用stream将list转map时key重复导致报错的问题

这篇文章将为大家详细讲解有关如何解决使用stream将list转map时key重复导致报错的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。要将List对象集合转为map集合,可以通过stream流的形
2023-06-15

编程热搜

目录