【发布时间】:2011-02-01 08:20:05
【问题描述】:
我想同步对特定插入的访问。因此,如果多个应用程序执行这个“一个”插入,则插入应该一次发生一个。同步背后的原因是该实体应该只有一个实例。如果多个应用程序尝试插入同一个实体,则只有一个应用程序成功,其他应用程序失败。 考虑的一种选择是创建一个复合唯一键,该键将唯一标识实体并依赖唯一约束。由于某些原因,dba 部门拒绝了这个想法。我想到的另一个选项是为插入创建一个存储过程,如果存储过程可以获得全局锁,那么多个应用程序调用相同的存储过程,尽管在它们单独的数据库会话中,预计存储过程可以获得全局锁并因此序列化插入。 我的问题是,在 oracle 版本 10/11 中的存储过程是否有可能获得这样的锁,并且任何指向文档的指针都会有所帮助。
【问题讨论】:
-
我无法想象为什么 DBA 组说“不要使用唯一约束来序列化对一组列的访问”,因为这是拥有唯一约束的主要原因之一。我能想到的唯一原因是,如果会话 A 插入一行阻塞会话 B、C 和 D,会话 B-D 将挂起,等待会话 A 提交或回滚阻塞语句。或者,断言您需要唯一索引来保持数据一致性,这样他们就没有立足之地了。
标签: stored-procedures oracle10g locking oracle11g