Transaction And Lock--快照事务隔离级别
2014-01-16 18:00
204 查看
--================================================
--准备数据
GO
CREATE DATABASE DB5
GO
USE DB5
GO
CREATE TABLE TB1
(
ID INT PRIMARY KEY,
V1 INT,
RV ROWVERSION
)
GO
INSERT INTO TB1(ID,V1)
SELECT 1,1
UNION
SELECT 2,2
GO
SELECT * FROM TB1
--================================================
--设置数据库可以使用SNAPSHOT隔离级别
ALTER DATABASE DB5 SET ALLOW_SNAPSHOT_ISOLATION ON
GO
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN tr1
SELECT * FROM TB1
WAITFOR DELAY '0:0:05'
SELECT * FROM TB1
--在事务开启后打开另外事务修改数据并提交
--=====================================================
在快照隔离级别下,在事务执行过程中,数据已被外部事务修改并且提交,但查询会得到过时数据(取决于生成快照的第一次时间点在外部事物发生前还是发生后),对过时数据修改会报以下错误:
快照隔离事务由于更新冲突而中止。您无法在数据库'DB5'中使用快照隔离来直接或间接访问表 'dbo.TB1',以便更新、删除或插入已由其他事务修改或删除的行。请重试该事务或更改 update/delete 语句的隔离级别。
--推断:快照事务隔离级别下,在第一次查询时建立快照,并在后续访问快照并持续到事务结束,因此数据可能过时
--建议:1)避免在快照事务隔离级别下修改数据
2)确定业务允许访问过时数据
优点:有效较少读和写得阻塞
缺点:维护行版本需要额外的开销,且可能读取到旧数据,在快照隔离级别下修改数据会引发事务冲突。
参考:http://www.cnblogs.com/lyhabc/articles/3219693.html
--准备数据
GO
CREATE DATABASE DB5
GO
USE DB5
GO
CREATE TABLE TB1
(
ID INT PRIMARY KEY,
V1 INT,
RV ROWVERSION
)
GO
INSERT INTO TB1(ID,V1)
SELECT 1,1
UNION
SELECT 2,2
GO
SELECT * FROM TB1
--================================================
--设置数据库可以使用SNAPSHOT隔离级别
ALTER DATABASE DB5 SET ALLOW_SNAPSHOT_ISOLATION ON
GO
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN tr1
SELECT * FROM TB1
WAITFOR DELAY '0:0:05'
SELECT * FROM TB1
--在事务开启后打开另外事务修改数据并提交
--=====================================================
在快照隔离级别下,在事务执行过程中,数据已被外部事务修改并且提交,但查询会得到过时数据(取决于生成快照的第一次时间点在外部事物发生前还是发生后),对过时数据修改会报以下错误:
快照隔离事务由于更新冲突而中止。您无法在数据库'DB5'中使用快照隔离来直接或间接访问表 'dbo.TB1',以便更新、删除或插入已由其他事务修改或删除的行。请重试该事务或更改 update/delete 语句的隔离级别。
--推断:快照事务隔离级别下,在第一次查询时建立快照,并在后续访问快照并持续到事务结束,因此数据可能过时
--建议:1)避免在快照事务隔离级别下修改数据
2)确定业务允许访问过时数据
优点:有效较少读和写得阻塞
缺点:维护行版本需要额外的开销,且可能读取到旧数据,在快照隔离级别下修改数据会引发事务冲突。
参考:http://www.cnblogs.com/lyhabc/articles/3219693.html
相关文章推荐
- Transaction And Lock--两种方式实现可重复读
- Transaction And Lock--已提交读快照
- Transaction And Lock--READ COMMITTED隔离级别下的"脏读"
- Transaction And Lock--死锁错误号1205
- Transaction And Lock--存储过程中使用事务的模板
- Transaction (Process ID) was deadlocked on lock resources with another process and has been chose
- Transaction And Lock--在事务中使用TRY CATCH
- Transaction And Lock--唯一索引下INSERT导致的死锁
- Transaction And Lock--由外键导致的死锁
- Transaction And Lock--锁相关基础
- About transaction lock and V$lock view
- Transaction And Lock--由Lookup导致的死锁情况
- Transaction And Lock--解决死锁/锁的几种有效方式
- Transaction And Lock--使用资源锁来控制并发
- About transaction lock and V$lock view
- Transaction And Lock--常用的查询事务和锁的语句
- Compare PostgreSQL and Oracle dead lock detect and transaction
- Transaction (Process ID ) was deadlocked on lock resources with another process and has been chosen
- Transaction And Lock--事务中使用return会回滚事务吗?
- Transaction And Lock--存在嵌套事务吗?