首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为更多事务锁定表

为更多事务锁定表
EN

Stack Overflow用户
提问于 2013-06-11 19:14:24
回答 3查看 95关注 0票数 1

我使用的是Oracle 11g。

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

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

问题是如何解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-11 20:26:15

问题解决了。使用DBMS_LOCK包可以很容易地实现我想做的事情。

代码语言:javascript
复制
1. DBMS_LOCK.REQUEST(...)
2. ALTER INDEX ... UNUSABLE
3. Load data
4. ALTER INDEX ... REBUILD
5. DBMS_LOCK.RELEASE(...)
票数 1
EN

Stack Overflow用户

发布于 2013-06-11 19:49:00

您可以使用DBMS_SCHEDULER:

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

使用链:

票数 0
EN

Stack Overflow用户

发布于 2013-06-11 19:59:19

您必须以分钟/小时为基础对表进行分区,并仅在时间用完时启用索引。每个分区都应该在创建后禁用所有索引。只有一个进程可以启用索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17042747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档