南大通用GBase8s 常用SQL语句(252)
RETAINUPDATELOCKS 环境选项
RETAINUPDATELOCKS 环境选项可提高在包括 SELECT ... FOR UPDATE 语句的“动态的 SQL”应用中的并发性。如果会话正在使用 Committed Read、Dirty Read 或 Cursor Stability 隔离级别来启用(或禁用)SET ISOLATION 语句的 RETAIN® UPDATE LOCKS 子句,则此选项可修改当前的事务隔离级别在运行时的行为。
当为当前的隔离级别启用 RETAINUPDATELOCKS 环境选项时,在缺省情况下,数据库服务器保持在行上的更新锁,直到该事务结束。保持任何更新锁,直到提交或回滚该事务,不管定义了该隔离级别的 SET ISOLATION 语句是否包含了 RETAIN UPDATE LOCKS 关键字。当此选项设置为 ALL 或为当前的 GBase 8s 隔离级别的名称时(如果此级别为 Committed Read、Dirty Read 或 Cursor Stability),则此设置防止其他事务中的并发用户删除或更新您已在其上放置了更新锁,而您还未更新的行。
通过指定 NONE 为 RETAINUPDATELOCKS 设置,您禁用此特性并恢复缺省的锁定行为。 当 NONE 为设置时,除非已经通过显式地包括了 RETAIN UPDATE LOCKS 关键词的 SET ISOLATION 语句设置了隔离级别,数据库服务器在下一 FETCH 操作时,或当游标关闭时,释放该更新锁。
SET ENVIRONMENT RETAINUPDATELOCKS 语句对更新游标不起作用,如果 GBase 8s 隔离级别为 REPEATABLE READ 的话。 类似地,在作用域之外是已通过 SET TRANSACTION 语句设置了其隔离级别的事务,其定义符合 ANSI/ISO 的隔离级别,而不是 GBase 8s 隔离级别。(要获取更多关于 GBase 8s 和 ISO 隔离级别的信息,请参阅主题 对比 SET TRANSACTION 与 SET ISOLATION。)
RETAINUPDATELOCKS 选项接受可影响当前的 GBase 8s 隔离级别的五种设置中的任何一种,以及在 SET ENVIRONMENT 语句之后通过 SET ISOLATION 语句建立的隔离级别。对于除了 'NONE' 之外的每个设置,该设置的作用就是隐式地在 SET ISOLATION 规范中包括 RETAIN UPDATE LOCKS 关键字:
· 如果值为 'COMMITTED READ',则数据库服务器保持任何更新锁,直到使用 Committed Read 隔离级别的事务的结束为止。
· 如果值为 'CURSOR STABILITY',则数据库服务器保持任何更新锁,直到使用 Cursor Stability 隔离级别的事务的结束为止。
· 如果值为 'DIRTY READ',则数据库服务器保持任何更新锁,直到使用 Dirty Read 隔离级别的事务的结束为止。
· 如果值为 'ALL',则数据库服务器保持任何更新锁,直到使用 Committed Read、Dirty Read 或 Cursor Stability 隔离级别的事务的结束为止。
· 如果值为 'NONE',则禁用 RETAINUPDATELOCKS 特性,直到该会话结束,或直到另一 SET ISOLATION 或 SET ENVIRONMENT 语句重新启用更新锁的保持为止。在 NONE 设置之下,如果您的应用定义更新游标,则数据库服务器在下一 FETCH 操作时,或当更新游标关闭时,释放它的更新锁。即使在 SET ENVIRONMENT RETAINUPDATELOCKS 'NONE' 语句执行之前,Committed Read、Dirty Read 或 Cursor Stability 隔离级别已强制了 RETAIN UPDATE LOCKS 行为,更新锁依然不被保持。
这些设置不区分大小写。例如,'ALL' 和 'all' 作用相同。
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526