資源描述:
《調(diào)整事務(wù)隔離級別的方法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、http://technet.microsoft.com/zh-cn/librarv/msl73763.aspxSQLServer2005聯(lián)機叢書(2007年9月)SETTRANSACTIONISOLATIONLEVEL(Transact-SQL)□語法SETTRANSACTIONISOLATIONLEVEL{READUNCOMMITTED
2、READCOMMITTED
3、REPEATABLEREAD
4、SNAPSHOT
5、SERIALIZABLE}[;]□參數(shù)READUNCOMMITTED指定語句可以讀取已由其他事務(wù)修改但尚
6、未提交的行。在READUNCOMMITTED級別運行的出務(wù),不會發(fā)出共享鎖來防上其他事務(wù)修改當(dāng)前事務(wù)讀取的數(shù)據(jù)。READUNCOMMITTED事務(wù)也不會被排他鎖阻塞,排他鎖會禁止當(dāng)前事務(wù)讀取Jt他爭務(wù)已修改但尚未提交的行。設(shè)置此選項之后,可以讀取未提交的修改,這種讀取稱為臟讀。在爭務(wù)結(jié)束之前,可以更改數(shù)據(jù)中的值,行也可以出現(xiàn)在數(shù)據(jù)集中或從數(shù)據(jù)集中消失。該選項的作用與在事務(wù)內(nèi)所冇SELECT語句中的所有表上設(shè)置NOLOCK相同。這是隔離級別中限制最少的級別。在SQLServer2005中,您還可以使用下列任意一種方法,在
7、保護來務(wù)不臟讀未提交的數(shù)據(jù)修改的同時盡量減少鎖定爭用:?READCOMMITTED隔離級別,并將READ_COMMITTED_SNAPSHOT數(shù)據(jù)庫選項設(shè)置為ON。?SNAPSHOT隔離級別。READCOMMITTED指定語句不能讀取己由其他爭務(wù)修改但尚未提交的數(shù)據(jù)。這樣可以避免臟讀。其他事務(wù)可以在當(dāng)前事務(wù)的各個語句之間更改數(shù)據(jù),從而產(chǎn)牛不可重復(fù)讀取和幻像數(shù)據(jù)。該選項是SQLServer的默認(rèn)設(shè)置。READCOMMITTED的行為取決于READ_COMMITTED_SNAPSHOT數(shù)據(jù)庫選項的設(shè)置:?如果將READ_C
8、OMMITTED_SNAPSHOT設(shè)置為OFF(默認(rèn)設(shè)置),則數(shù)據(jù)庫引擎會使用共方鎖防止其他事務(wù)在當(dāng)前事務(wù)執(zhí)行讀取操作期間修改行.共孚鎖還會阻止語句在其他事務(wù)完成之前讀取由這些事務(wù)修改的行。語旬完成后便會釋放共亨鎖。?如果將READ_COMMITTED_SNAPSHOT設(shè)置為0N,則數(shù)據(jù)庫引擎會使用行版木控制為每個語句提供一個在事務(wù)上一致的數(shù)據(jù)快照,因為該數(shù)據(jù)在語句開始時就存在。不使用鎖來防止其他事務(wù)更新數(shù)據(jù)。當(dāng)READ_COMMITTED_SNAPSHOT數(shù)據(jù)庫選項設(shè)置為ON時,您可以使用READCOMMITTEDL
9、OCK表提示為READCOMMITTED隔離級別上運行的事務(wù)中的各語句請求共亨鎖,而不是行版木控制。彳注意:設(shè)置READ^COMMITTEDSNAPSHOT選項時,數(shù)據(jù)庫中僅允許存在執(zhí)行ALTERDATABASE命令的連接。在ALTERDATABASE完成Z前,數(shù)據(jù)庫中不允許有其他打開的連接。數(shù)據(jù)庫不必處于單用戶模式。REPEATABLEREAD指定語句不能讀取已由其他事務(wù)修改但尚未提交的行,并R指定,其他任何事務(wù)都不能在當(dāng)前事務(wù)完成Z前修改由當(dāng)前來務(wù)讀取的數(shù)據(jù)。對事務(wù)中的每個語句所讀取的全部數(shù)據(jù)都設(shè)睥了共享鎖,并且該
10、共享鎖一直保持到事務(wù)完成為止。這樣可以防止其他事務(wù)修改當(dāng)前事務(wù)讀取的任何行。其他事務(wù)可以插入與當(dāng)前事務(wù)所發(fā)出語句的搜索條件和匹配的新行。如果當(dāng)前事務(wù)隨后重試執(zhí)行該語句,它會檢索新行,從而產(chǎn)生幻讀。由于共京鎖一直保持到事務(wù)結(jié)束,而不是在每個語句結(jié)束時釋放,所以并發(fā)級別低于默認(rèn)的READCOMMITTED隔離級別。此選項只在必要時使用。SNAPSHOT指定事務(wù)中任何語句讀取的數(shù)據(jù)都將是在事務(wù)開始時便存在的數(shù)據(jù)的事務(wù)上一致的版本。事務(wù)只能識別在其開始之前提交的數(shù)據(jù)修改。在當(dāng)前事務(wù)中執(zhí)行的語句將看不到在當(dāng)前事務(wù)開始以后由其他事
11、務(wù)所做的數(shù)據(jù)修改。其效杲就好像事務(wù)中的語句獲得了已提交數(shù)據(jù)的快照,因為該數(shù)據(jù)在事務(wù)開始時就存在。除非正在恢復(fù)數(shù)據(jù)庫,否則SNAPSHOT爭務(wù)不會在讀取數(shù)據(jù)時請求鎖。讀取數(shù)據(jù)的SNAPSHOT事務(wù)不會阻止其他事務(wù)寫入數(shù)據(jù)。寫入數(shù)據(jù)的事務(wù)也不會阻止SNAPSHOT事務(wù)讀取數(shù)據(jù)。在數(shù)據(jù)庫恢復(fù)的冋滾階段,如果嘗試讀取由其他止在冋滾的事務(wù)鎖定的數(shù)據(jù),則SNAPSHOT事務(wù)將詰:求一個鎖。在事務(wù)完成回滾之前,SNAPSHOT事務(wù)會一直被阻塞。當(dāng)事務(wù)取得授權(quán)之后,便會立即釋放鎖。必須將ALLOW_SNAPSHOT_ISOLATION
12、數(shù)據(jù)庫選項設(shè)置為ON,才能開始一個使用SNAPSHOT隔離級別的事務(wù)。如果使用SNAPSHOT隔離級別的事務(wù)訪問多個數(shù)據(jù)庫中的數(shù)據(jù),則必須在每個數(shù)據(jù)庫中將ALLOW_SNAPSHOT_ISOLATION都設(shè)置為ON。不能將通過其他隔離級別開始的事務(wù)設(shè)置為SNAPSHOT隔離級別,否則將導(dǎo)致事務(wù)中止。如果一個事務(wù)在SNAPSHOT隔