Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 创建数据库 » 使用事务和隔离级别 » 隔离级别和一致性 » 快照隔离

 

启用快照隔离

使用 allow_snapshot_isolation 选项可为数据库启用或禁用快照隔离。当将此选项设置为 On 时,会在临时文件中维护行版本,且允许连接使用任何快照隔离级别。当将此选项设置为 Off 时,任何使用快照隔离的尝试都会导致错误。

使数据库启用快照隔离可能会影响性能,因为无论使用快照隔离的事务有多少,都必须维护所有修改行的副本。请参见游标敏感性和隔离级别

以下语句为数据库启用快照隔离:

SET OPTION PUBLIC.allow_snapshot_isolation = 'On';

allow_snapshot_isolation 选项的设置可以更改,即使有用户连接到数据库。将此选项的设置从 Off 更改到 On 时,必须完成所有的当前事务后,新事务才能使用快照隔离。将此选项的设置从 On 更改到 Off 时,必须完成使用快照隔离的所有未完成事务后,数据库服务器才停止维护行版本信息。

可以通过查询 SnapshotIsolationState 数据库属性的值查看数据库的当前快照隔离设置:

SELECT DB_PROPERTY ( 'SnapshotIsolationState' );

SnapshotIsolationState 属性的值可为以下值之一:

  • On   为数据库启用快照隔离。

  • Off   为数据库禁用快照隔离。

  • in_transition_to_on   一旦当前事务完成,就将启用快照隔离。

  • in_transition_to_off   一旦当前事务完成,就将禁用快照隔离。

为数据库启用快照隔离后,必须为事务维护行版本(即使未使用快照),直到事务提交或回退。因此,如果从不使用快照隔离,最好将 allow_snapshot_isolation 选项设置为 Off。