【发布时间】:2012-01-24 10:23:48
【问题描述】:
我们有几个夜间作业在 Oracle 11g R2 实例中运行,并非所有这些作业都在我们的控制之下。其中一些是由第三方运行的外部数据加载。这些作业以 PL/SQL 包的形式实现,并使用 DBMS_SCHEDULER 工具运行。
其中一些作业对同一组数据进行操作,即包含用户条目的表,例如。 G。更新个人数据、移除退休用户、添加新加入的用户。由于作业大多使用批量语句来运行更新,我们现在已经多次遇到阻塞锁,不得不杀死单个作业以允许其他作业运行。
有什么好的方法可以防止工作相互冲突?
我正在考虑这样的事情:
- 设置了解依赖关系并协调依赖作业的元作业
- 创建计划,尽可能将冲突的作业分开
- 与第三方协调工作以防止“外部”和“内部”工作之间的冲突
- 不使用批量语句(使用单个
MERGE或UPDATE一次更新所有内容)而是逐个更新以提交中间结果
特别是最后一个选项对我来说似乎是一种合理的方法,以减少阻塞锁的可能性。但我知道,当我将工作从批量更新切换到循环游标时,性能会受到很大影响。
【问题讨论】:
标签: oracle plsql locking blocking