2
|
Nick Pierpoint · 技术社区 · 14 年前 |
1
6
选项4:使用DBMS\ U锁序列化访问。以下是文档的链接: http://download.oracle.com/docs/cd/E11882_01/appdev.112/e10577/d_lock.htm#i1002556 举个例子: 首先创建一个辅助过程来序列化对某个过程的访问。该过程使用过程的名称来生成唯一的锁句柄。“NOTORA$”以确保lockname不以“ORA$”开头,因为它们是为Oracle保留的。
在您的过程中,按如下方式调用此serialize\u访问过程:
其中dbms\u lock.sleep被用作真实代码的替换。 现在打开另外两个或多个会话并发出“execp1”命令。第一个会话将以等待30秒开始。第二节课将向您展示:
当做, |
2
1
在生产环境中,当会话失败或挂起时,#1/#2通常需要一些手动干预。 |
3
1
DBMS\u LOCK的答案很好,但似乎有点复杂。。。但那只是一次,所以没关系。 一个非常简单的方法是创建一个配置表。。。可能只有一列“name” 当您需要锁时,请执行以下操作:
释放锁的方式是通过提交;或回滚;如果会话结束(通常),您的会话将执行此操作。 如果出现新的单线程进程,则可以向表中添加更多行。你甚至可以把NOWAIT改成WAIT。这样,下一个实例就可以等待10秒或其他时间来查看是否可以获得锁。那将是保持一个人“永远站起来”的最好方法 |
maddy · 如何根据oracle SQL中的某一列值进行排名 1 年前 |
kiric8494 · 显示以元音开头和结尾的城市名称 2 年前 |
Franz Biberkopf · Oracle:组合子查询和聚合函数 2 年前 |
BitLauncher · 甲骨文-如何模拟位列和布尔和/或? 2 年前 |
Arifullah · 如何从oracle中的列中删除特定的初始字符? 2 年前 |
Anar · Oracle SQL用户定义函数 2 年前 |
user1312312 · 如何为一组表编写通用触发器? 2 年前 |