我想同步对特定插入的访问。因此,如果多个应用程序执行此“一个”插入,则插入应该一次发生一个。同步背后的原因是该实体应该只有一个实例。如果多个应用程序尝试插入同一个实体,则只有一个应该成功,其他应该失败。 考虑的一个选项是创建一个复合唯一键,它将唯一地标识实体并依赖于唯一约束。由于某些原因,dba部门拒绝了这个想法。我想到的其他选项是为插件创建存储过程,如果存储过程可以获得全局锁,那么多个应用程序调用相同的存储过程,尽管在它们的单独数据库会话中,预计存储过程可以获得全局锁定,从而序列化插入。 我的问题是,对于oracle版本10/11中的存储过程,可以获得这样的锁定,任何指向文档的指针都会有所帮助。
答案 0 :(得分:1)
如果您希望插入的实体是唯一的,那么在Oracle中您不需要序列化任何东西 - 一个独特的约束被完美地设计并且恰好适用于此目的。 Oracle处理确保只插入一个实体所需的所有锁定。
我想不出为什么dba部门拒绝了一个独特约束的想法,这是非常基本的 - 也许他们拒绝了你提出的解决方案的其他方面。
如果你想出于某种原因序列化访问(我想不出你为什么会这样做),你可以(a)锁定整个表,这将序列化表中的所有DML;或者(b)使用DBMS_LOCK获取一个用户命名的锁 - 这只能序列化你获得锁的特定进程。这两种选择都有优点和缺点。