sqlserver 開啟快照


同事總結的 記錄之
(1).打開快照:
在master數據庫執行如下:
ALTER DATABASE [dbname] SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE [dbname] SET READ_COMMITTED_SNAPSHOT ON;
在nc數據庫下執行如下:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED

說明:以上三句腳本可以確定開啟已提交讀隔離級別快照(即使人為修改為snapshot模式情況下)


(2).切換模式
--默認是read committed,所以以下不用修改;僅在被人為修改為snapshot時的情況下用
//切換成:已提交讀隔離快照(語句級)
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
//切換成:快照事務級別
SET TRANSACTION ISOLATION LEVEL SNAPSHOT

//查看當前模式(是事務級快照還是已提交讀隔離級別快照)
DBCC Useroptions --默認是read committed

(3).查看是否開啟
//查看當前是否開始快照(事務快照和已提交讀隔離快照)
select name,user_access,user_access_desc,snapshot_isolation_state,snapshot_isolation_state_desc,is_read_committed_snapshot_on from sys.databases

附:遇到問題及解決方案
(4).如果(1)開啟快照腳本執行時有其它數據庫連接,可以嘗試如下:
1問題解決. 停止NC服務,多個應用都要停止。
2. 重啟sql server數據庫
3. 殺掉當前數據庫所有session
declare @kid varchar(8000)
set @kid=''
select @kid=@kid+' kill '+cast(spid as varchar(8))
from master..sysprocesses
where dbid=db_id('ncdb')
exec(@kid)
4. 快照腳本(慎用,有時候不容易切換回單用戶,優先檢查前面幾個步驟沒問題)
I.ALTER DATABASE [dbname] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;
II. ---(1)中的三句開啟快照腳本---
III.ALTER DATABASE [dbname] SET MULTI_USER;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM