欢迎来到天天文库
浏览记录
ID:35465820
大小:67.62 KB
页数:7页
时间:2019-03-25
《调整事务隔离级别的方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、http://technet.microsoft.com/zh-cn/librarv/msl73763.aspxSQLServer2005联机丛书(2007年9月)SETTRANSACTIONISOLATIONLEVEL(Transact-SQL)□语法SETTRANSACTIONISOLATIONLEVEL{READUNCOMMITTED
2、READCOMMITTED
3、REPEATABLEREAD
4、SNAPSHOT
5、SERIALIZABLE}[;]□参数READUNCOMMITTED指定语句可以读取已由其他事务修改但尚
6、未提交的行。在READUNCOMMITTED级別运行的出务,不会发出共享锁來防上其他事务修改当前事务读取的数据。READUNCOMMITTED事务也不会被排他锁阻塞,排他锁会禁止当前事务读取Jt他爭务已修改但尚未提交的行。设置此选项之后,可以读取未提交的修改,这种读取称为脏读。在爭务结束之前,可以更改数据中的值,行也可以出现在数据集中或从数据集中消失。该选项的作用与在事务内所冇SELECT语句中的所有表上设置NOLOCK相同。这是隔离级别中限制最少的级别。在SQLServer2005中,您还可以使用下列任意一种方法,在
7、保护来务不脏读未提交的数据修改的同时尽量减少锁定争用:•READCOMMITTED隔离级别,并将READ_COMMITTED_SNAPSHOT数据库选项设置为ON。•SNAPSHOT隔离级别。READCOMMITTED指定语句不能读取己由其他爭务修改但尚未提交的数据。这样可以避免脏读。其他事务可以在当前事务的各个语句之间更改数据,从而产牛不可重复读取和幻像数据。该选项是SQLServer的默认设置。READCOMMITTED的行为取决于READ_COMMITTED_SNAPSHOT数据库选项的设置:•如果将READ_C
8、OMMITTED_SNAPSHOT设置为OFF(默认设置),则数据库引擎会使用共方锁防止其他事务在当前事务执行读取操作期间修改行.共孚锁还会阻止语句在其他事务完成之前读取由这些事务修改的行。语旬完成后便会释放共亨锁。•如果将READ_COMMITTED_SNAPSHOT设置为0N,则数据库引擎会使用行版木控制为每个语句提供一个在事务上一致的数据快照,因为该数据在语句开始时就存在。不使用锁来防止其他事务更新数据。当READ_COMMITTED_SNAPSHOT数据库选项设置为ON时,您可以使用READCOMMITTEDL
9、OCK表提示为READCOMMITTED隔离级别上运行的事务中的各语句请求共亨锁,而不是行版木控制。彳注意:设置READ^COMMITTEDSNAPSHOT选项时,数据库中仅允许存在执行ALTERDATABASE命令的连接。在ALTERDATABASE完成Z前,数据库中不允许有其他打开的连接。数据库不必处于单用户模式。REPEATABLEREAD指定语句不能读取已由其他事务修改但尚未提交的行,并R指定,其他任何事务都不能在当前事务完成Z前修改由当前来务读取的数据。对事务中的每个语句所读取的全部数据都设睥了共享锁,并且该
10、共享锁一直保持到事务完成为止。这样可以防止其他事务修改当前事务读取的任何行。其他事务可以插入与当前事务所发出语句的搜索条件和匹配的新行。如果当前事务随后重试执行该语句,它会检索新行,从而产生幻读。由于共京锁一直保持到事务结束,而不是在每个语句结束时释放,所以并发级别低于默认的READCOMMITTED隔离级别。此选项只在必要时使用。SNAPSHOT指定事务中任何语句读取的数据都将是在事务开始时便存在的数据的事务上一致的版本。事务只能识别在其开始之前提交的数据修改。在当前事务中执行的语句将看不到在当前事务开始以后由其他事
11、务所做的数据修改。其效杲就好像事务中的语句获得了已提交数据的快照,因为该数据在事务开始时就存在。除非正在恢复数据库,否则SNAPSHOT爭务不会在读取数据时请求锁。读取数据的SNAPSHOT事务不会阻止其他事务写入数据。写入数据的事务也不会阻止SNAPSHOT事务读取数据。在数据库恢复的冋滚阶段,如果尝试读取由其他止在冋滚的事务锁定的数据,则SNAPSHOT事务将诘:求一个锁。在事务完成回滚之前,SNAPSHOT事务会一直被阻塞。当事务取得授权之后,便会立即释放锁。必须将ALLOW_SNAPSHOT_ISOLATION
12、数据库选项设置为ON,才能开始一个使用SNAPSHOT隔离级别的事务。如果使用SNAPSHOT隔离级别的事务访问多个数据库中的数据,则必须在每个数据库中将ALLOW_SNAPSHOT_ISOLATION都设置为ON。不能将通过其他隔离级别开始的事务设置为SNAPSHOT隔离级别,否则将导致事务中止。如果一个事务在SNAPSHOT隔
此文档下载收益归作者所有