oracle索引的创建与删除,Oracle关于索引创建中断无法删除的问题
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}
--在建立索引的時(shí)候由于會(huì)話中斷,導(dǎo)致oracle數(shù)據(jù)字典內(nèi)已經(jīng)包含了該索引的信息,但是卻實(shí)際沒(méi)有為該索引分配段,導(dǎo)致重新建立索引,并且刪除索引報(bào)錯(cuò),具體解決方式有兩種:
一、擦除未建立成功的索引塊
1.停止應(yīng)用連接,否則刪除則會(huì)報(bào)出該索引正在使用,無(wú)法被刪除;
resource busy and acquire with NOWAIT specified
2.drop index xxxx ? --根據(jù)提示的index object 號(hào)清除該索引塊的內(nèi)容;
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用戶下執(zhí)行;
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.
二、重啟數(shù)據(jù)庫(kù)也可以解決類(lèi)似問(wèn)題,如果是集群數(shù)據(jù)庫(kù),則代價(jià)更大,單實(shí)例則可以使用該方式;
--查詢報(bào)錯(cuò)的索引塊,快速定位是在哪個(gè)塊報(bào)錯(cuò);
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 ? 分發(fā)時(shí)間
From v$session_longops g, v$sql s
Where g.SOFAR <> g.TOTALWORK
And s.SQL_ID = g.sql_id
--查詢建立索引、重建索引的進(jìn)度;
select sid,OPNAME,TARGET_DESC,sofar,TOTALWORK,trunc(sofar/totalwork*100,2)||'%' as perwork
from v$session_longops where sofar!=totalwork;
總結(jié)
以上是生活随笔為你收集整理的oracle索引的创建与删除,Oracle关于索引创建中断无法删除的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaScript-合同到期续约案例
- 下一篇: 土壤养分(氮、磷、钾、PH、水分)检测仪