1

我正在使用 Oracle 11g。

我正在尝试通过索引重建实现并发加载到表中的场景。我有几个流程试图实现这种情况:1. 从源加载数据,2. 转换数据,3. 关闭 DWH 表上的索引,4. 将数据加载到 DWH,5. 在 DWH 表上重建索引。我关闭并重建索引以获得更好的性能,在某些情况下,一个流程正在重建索引,而另一个流程试图将其关闭。我需要做的是在第 2 点和第 3 点之间放置一些锁,这将在第 5 点之后释放。

Oracle 内置的LOCK TABLE机制是不够的,因为锁是在事务结束时释放的,所以任何ALTER语句都会释放锁。

问题是如何解决问题?

4

3 回答 3

1

问题解决了。使用 DBMS_LOCK 包可以轻松实现我想要做的事情。

1. DBMS_LOCK.REQUEST(...)
2. ALTER INDEX ... UNUSABLE
3. Load data
4. ALTER INDEX ... REBUILD
5. DBMS_LOCK.RELEASE(...)
于 2013-06-11T12:26:15.400 回答
0

您可以使用 DBMS_SCHEDULER:

  1. 运行加载和转换数据的作业
  2. 关闭索引
  3. 运行将数据加载到 DWH 中的作业
  4. 重建索引

在此处输入图像描述

使用链:

于 2013-06-11T11:49:00.350 回答
0

您必须在插入时间的分钟/小时基础上对表进行范围分区,并且仅在时间到时才启用索引。每个分区应在创建后禁用所有索引。只有一个进程可以启用索引。

于 2013-06-11T11:59:19.217 回答