在 Oracle 12c (12.1) 中,我们有一个带有间隔分区的巨大分区表。除了本地索引,上面还有两个全局索引。使用 UPDATE INDEXES 子句删除旧分区有助于全局索引保持有效。
第二天晚上,称为异步全局索引维护后台作业的功能启动了一个
ALTER INDEX xxx COALESCE CLEANUP
命令,该命令运行了几天,并从已删除分区的孤立条目中清除全局索引。
不幸的是,我们需要在这个表上创建另一个具有不同参数的索引,但是由于后台作业导致的共享 DML 锁 (Row-X (SX)) 导致资源繁忙错误,这是不可能的。由于我们需要部署一个新版本,我们肯定需要另一个索引上的 DDL。对我来说,这看起来很奇怪, alter index ... coalesce cleanup 不允许并行创建另一个索引。为什么要有关系?
问题:如果我们杀死会话,过去2天的工作会丢失,工作需要从头重新开始吗?
出于明显的原因(懒惰),我使用示例从这篇文章中创建表和索引:
https://richardfoote.wordpress.com/2013/08/02/12c-asynchronous-global-index-maintenance-part-i-where-are-we-now/
接下来删除一个分区:
然后分析索引:
孤立条目在此处显示为已删除条目。
我的补充来了。手动启动
coalesce cleanup
,然后在几秒钟后中断它(Ctrl-C),然后再次分析索引:如您所见,即使中断命令,一些条目也已被清除。现在再做一次:
接下来创建一个索引,然后继续:
最后:
所以不,进步并没有丢失。