Chinaunix首页 | 论坛 | 博客
  • 博客访问: 183499
  • 博文数量: 46
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-26 14:22
个人简介

做最Low逼的DBA

文章分类

全部博文(46)

文章存档

2017年(46)

我的朋友

分类: Oracle

2017-04-19 22:14:42

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; min-height: 13.0px}

--在建立索引的时候由于会话中断,导致oracle数据字典内已经包含了该索引的信息,但是却实际没有为该索引分配段,导致重新建立索引,并且删除索引报错,具体解决方式有两种:

一、擦除未建立成功的索引块

1.停止应用连接,否则删除则会报出该索引正在使用,无法被删除;

resource busy and acquire with NOWAIT specified


2.drop index xxxx   --根据提示的index object 号清除该索引块的内容;

SQL> drop index ROOKIEORDER_IDX2;

drop index ROOKIEORDER_IDX2

*

ERROR at line 1:

ORA-08104: this index object 826976 is being online built or rebuilt


3.擦除索引块脚本,必须在sys用户下执行;

declar

done boolean;

begin

done:=dbms_repair.online_index_clean(826976);

end;



SQL> declare

2  done boolean;

3  begin

4  done:=dbms_repair.online_index_clean(826976);

5  end;

6  /


PL/SQL procedure successfully completed.



二、重启数据库也可以解决类似问题,如果是集群数据库,则代价更大,单实例则可以使用该方式;


--查询报错的索引块,快速定位是在哪个块报错;

Select g.sid,

g.SERIAL#,

g.TARGET,

g.SOFAR,

g.TOTALWORK,

g.START_TIME,

g.LAST_UPDATE_TIME,

s.SQL_TEXT,

s.DISK_READS,

s.BUFFER_GETS   分发时间

From v$session_longops g, v$sql s

Where g.SOFAR <> g.TOTALWORK

And s.SQL_ID = g.sql_id




--查询建立索引、重建索引的进度;

select sid,OPNAME,TARGET_DESC,sofar,TOTALWORK,trunc(sofar/totalwork*100,2)||'%' as perwork 

from v$session_longops where sofar!=totalwork;

阅读(3414) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~