9

SQL インデックスの作成でひどい間違いを犯しました。

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

ご覧のとおり、600m以上のレコードで使用率の高いPRODUCTIONテーブルをブロックせずにインデックスを作成するためのキーワード「ONLINE」を見逃しました。修正された 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 がこのインデックスの作成を処理するために何秒/分/時間残っているかを確認する機会はありますか? それとも、オラクルがまだこのリクエストに取り組んでいることを確認する機会はありますか? (PL/SQL Developer がクラッシュしました)。

嫌いな人のために:私はここで述べたようにこれを行うべきだと知っています:(source

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 に答える