9

我在创建 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 崩溃了)。

对于仇恨者:我知道我应该像这里提到的那样这样做:(来源

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

4

1 回答 1

15

您应该能够在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 操作继续阻止用户访问应用程序。

于 2012-09-11T16:20:42.503 回答