sql serer 快照事務區別

2022-02-06 22:47:35 字數 2617 閱讀 4624

sql server 2005/2008的事務有兩種是支援快照讀取(官方叫:行版本管理器讀取),如果遇到衝突的時候快照會讀取事務執行前的資料避免被阻塞

現假如已啟動事務:

begin

tran

update

academy 

setname='

科技學院

'where

name='

科技學院'--

commit --測試後再執行這句

快照分為兩種:

1、已提交讀行版本管理器模式:

**alter

database

testdb 

setread_committed_snapshot 

onwith

rollback

immediate

settransaction

isolation

level

read

committed

begin

tran

select

*from

academy 

--可執行,查詢將在快照資料上查詢資料,並且如果衝突程序的事務更新提交後會立即查詢到更新後的最新資料,所以會造成不可重複讀

select

*from

academy 

with

(updlock)

--將被阻塞,原因是顯示宣告更新鎖updlock(排它鎖也一樣),會在真實資料上申請更新鎖(不是在快照資料上),申請更新鎖顯然就會被衝突程序的排它鎖阻塞

update

academy 

setname='

數學學院

'where

name='

數學學院'--

在其餘行(非更新行)是非排它鎖或非更新鎖時可執行,因為在已提交讀模式下update會先遍歷整個表查詢要更新的行,在遍歷的時候就會對遍歷行臨時加上更新鎖,如果任意一行有排它鎖或更新鎖,就會造成阻塞(當然有個解決辦法是在update條件涉及的列上使用聚集索引,直接從索引b樹上查詢要更新的行),查完要更新的資料後,事務就會向程序申請釋放非更新行的更新鎖,接著申請將更新行的更新鎖轉換為排它鎖

delete

from

academy  

where

name='

cx'--在其餘行(非更新行)是非排它鎖或非更新鎖時可執行,同update

insert

into

academy 

values

(newid

(),'

new_subject')

--可執行,插入資料在驗證主鍵不重複後(判斷重複是根據主鍵索引,不是根據查詢),立即插入資料接著立刻申請排它鎖

commit

2、快照模式:

**alter

database

testdb 

setallow_snapshot_isolation 

onset

transaction

isolation

level

snapshot

begin

tran

select

*from

academy 

--可執行,查詢將在快照資料上查詢資料,但是和已提交讀的區別是衝突程序的事務更新提交後再執行本查詢還是查詢本事務開始前的快照資料,只要事務不結束就不會讀取資料庫中的真實資料,所以不會造成不可重複讀

select

*from

academy 

with

(updlock)

--將被阻塞,原因是顯示宣告更新鎖updlock(排它鎖也一樣),會在真實資料上申請更新鎖(不是在快照資料上),申請更新鎖顯然就會被衝突程序的排它鎖阻塞

update

academy 

setname='

數學學院

'where

name='

數學學院'--

delete

from

academy  

where

name='

cx'--可執行,同update

insert

into

academy 

values

(newid

(),'

new_subject')

--可執行,插入資料在驗證主鍵不重複後(判斷重複是根據主鍵索引,不是根據查詢),立即插入資料接著立刻申請排它鎖

commit

一點補充(以下原資料是指資料庫內事務開始前的資料):

update在事務內如果對原資料造成更改(如果更改後和原資料相比未作任何更改不算),那麼會將原資料和更新後未提交的資料都暫時儲存下來申請排它鎖(但是請注意原資料在nolock或uncommitted查詢下不會被查詢到,nolock查詢是針對事務的最新資料不管提交沒有,nolock不會去查原資料),接著如果事務回滾就刪除更新資料,如果事務提交就刪除原資料

insert在事務內在插入前會檢查即將插入的資料的主鍵或者唯一鍵是否和原資料重複(判斷重複不是在原資料上查詢而是用的索引),如果不重複則插入資料並且對剛才插入的資料申請排它鎖,如果找到原資料內有重複的鍵值,就會對原資料重複的資料行申請排它鎖

快照複製,事務複製,合併複製的區別

簡單來說 1.快照複製和事務複製是單向的 2005及以後的版本中加入了訂閱端可更新的事務複製 2.合併複製是雙向的。1.快照複製對錶結構沒有要求 2.事務複製要求表有主鍵 3.合併複製要求表有 rowguid 列 快照複製 1 概念 快照複製是完全按照資料和資料庫物件出現時的狀態來複製和分發它們的過...

備份與快照的區別

快照 資料儲存的某一時刻的狀態記錄 備份 資料儲存的某一時刻的副本 原資料存放結構 邏輯位址01 234實體地址01 2345 6789 資料abc d邏輯位址01 234實體地址01 2345 6789 資料abc d生成快照時快照位址 0 1 對應的實體地址 0 3 將會被鎖定不可更改 此時將a...

快照和映象的區別

閱讀指南 本部落格文章主要講述資料備份領域的兩個重要概念 快照和映象 詳解 快照是一種基於時間點的資料拷貝技術,是資料備份領域的乙個重要的概念,理解好快照,並且有效的管理快照,是磁碟管理中的重要一課。快照的目的在於能夠記錄出某乙個時刻的資料資訊並將其儲存,如果之後發生某些故障需要資料恢復的時候,可以...