我使用的是Oracle 11g。
我正在尝试实现并发加载到具有索引重建的表中的场景。我有几个试图实现这种情况的流程: 1.从源加载数据,2.转换数据,3.关闭DWH表上的索引,4.将数据加载到DWH中,5.重建DWH表上的索引。我关闭并重建索引以获得更好的性能,在某些情况下,一个流正在重建索引,而另一个流试图关闭它。我需要做的是在点2和3之间放置一些锁,这些锁将在点5之后释放。
Oracle内置的LOCK TABLE机制是不够的,因为锁是在事务结束时释放的,所以任何ALTER语句都会释放锁。
问题是如何解决这个问题?
发布于 2013-06-11 20:26:15
问题解决了。使用DBMS_LOCK包可以很容易地实现我想做的事情。
1. DBMS_LOCK.REQUEST(...)
2. ALTER INDEX ... UNUSABLE
3. Load data
4. ALTER INDEX ... REBUILD
5. DBMS_LOCK.RELEASE(...)发布于 2013-06-11 19:49:00
您可以使用DBMS_SCHEDULER:

使用链:
发布于 2013-06-11 19:59:19
您必须以分钟/小时为基础对表进行分区,并仅在时间用完时启用索引。每个分区都应该在创建后禁用所有索引。只有一个进程可以启用索引。
https://stackoverflow.com/questions/17042747
复制相似问题