如何在Oracle 11上检查索引构建状态?

时间:2012-09-11 16:05:27

标签: oracle plsql oracle11g indexing plsqldeveloper

我在SQL索引创建中犯了一个可怕的错误:

create index IDX_DATA_TABLE_CUSECO on DATA_TABLE (CUSTOMER_ID, SESSION_ID, CONTACT_ID)
  tablespace IDX_TABLESPACE LOCAL ;

正如您所看到的,我错过了关键字“ONLINE”来创建索引而不会阻止具有600m +记录的高使用率的PRODUCTION表。更正的SQL是:

create index IDX_DATA_TABLE_CUSECO on DATA_TABLE (CUSTOMER_ID, SESSION_ID, CONTACT_ID)
  tablespace IDX_TABLESPACE LOCAL ONLINE;

我是在PL / SQL Developer下完成的。当我试图阻止程序停止响应并崩溃。

生产系统现在不工作9个小时,我的老板想要爆炸。 :d

有没有机会看到Oracle 11g离开多少秒/分钟/小时来处理这个索引创建?或者也许有机会看到Oracle仍在处理此请求吗? (PL / SQL Developer崩溃了。)

对仇恨者: 我知道我应该这样做:(source

CREATE INDEX cust_idx on customer(id) UNUSABLE LOCAL;
ALTER INDEX cust_idx REBUILD parallel 6 NOLOGGING ONLINE;

1 个答案:

答案 0 :(得分:13)

您应该能够在V$SESSION_LONGOPS

中查看操作的进度
SELECT sid, 
       serial#, 
       target, 
       target_desc, 
       sofar, 
       totalwork, 
       start_time, 
       time_remaining, 
       elapsed_seconds
  FROM v$session_longops
 WHERE time_remaining > 0

当然,在生产系统中,我可能会在几小时前杀死会话,而不是让DDL操作继续阻止用户访问该应用程序。