【发布时间】:2012-09-04 14:59:27
【问题描述】:
我在创建 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;
【问题讨论】:
-
您的链接似乎无效。我希望您正在查看的任何文章至少在告诉您创建不可用的索引之前讨论
skip_unusable_indexes设置,并且它会告诉您在构建索引后更改索引的并行设置。 -
文章没有,但 cmets 有,并解释了为什么该建议不像您想象的那么有用。不过我和贾斯汀在一起,你为什么不终止运行索引构建的会话?
标签: oracle plsql oracle11g indexing plsqldeveloper