1

我想同步对特定插入的访问。因此,如果多个应用程序执行这个“一个”插入,则插入应该一次发生一个。同步背后的原因是该实体应该只有一个实例。如果多个应用程序尝试插入同一个实体,则只有一个应用程序成功,其他应用程序失败。考虑的一种选择是创建一个复合唯一键,该键将唯一标识实体并依赖唯一约束。由于某些原因,dba 部门拒绝了这个想法。我想到的另一个选择是为插入创建一个存储过程,如果存储过程可以获得全局锁,那么多个应用程序调用相同的存储过程,尽管在它们单独的数据库会话中,预计存储过程可以获得全局锁并因此序列化插入。我的问题是,在 oracle 版本 10/11 中的存储过程是否有可能获得这样的锁,并且任何指向文档的指针都会有所帮助。

4

1 回答 1

1

如果您希望插入的实体是唯一的,那么在 Oracle 中您不需要序列化任何内容 - 唯一约束经过完美设计并且完全适合此目的。Oracle 处理确保只插入一个实体所需的所有锁定。

我想不出为什么 dba 部门拒绝了唯一约束的想法,这是非常基本的——也许他们拒绝了您提出的解决方案的其他方面。

如果您出于某种原因想要序列化访问(我想不出您这样做的原因),您可以(a)锁定整个表,这将序列化表上的所有 DML;或 (b) 使用 DBMS_LOCK 获得一个用户命名的锁 - 这只会序列化您获得锁的特定进程。这两种选择都有优点和缺点。

于 2010-03-29T03:41:20.320 回答