Alter Database Single_User後是誰占住了唯一的Session呢?
今天一台SQL無意間發生HBA卡異常,連接San Storage該卡常會當掉。
一定要重開機才能讓該HBA卡又WORK,但也撐不久。
因此毅然決然將資料庫搬到另一部SQL上。
以前都是停掉SQL後直接搬mdf及ldf到另一部SQL後attach上去。
但由於HBA卡遇到大IO就當,因此絕對是沒辦法這樣幹
因此本次移機就用Bakup跟Restore的方式,先將定期備份的檔案還原到另一部SQL上
但最後還是要將TailLog補上(只備份log出來,HBA卡還不會當),以下為備份語法
USE [MASTER];
GO
ALTER DATABASE [MYDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
BACKUP LOG [MYDB] TO DISK=N’C:\MYDB_LOG.BAK’WITH NORECOVERY;
GO
經過上述方式完成資料庫搬移後,我突然想到,我是在master資料庫執行上述語法。
但是Single_User是可以允許一條Session進入資料庫,那會不會我切換成Single_User
後,馬上有Session又連進該資料庫作業呢?來個小實驗吧。
步驟一 : 開一個Session ID為85,然後將[daniel]資料庫設為Single_User模式
步驟二 : 如下圖,我們可以確認目前沒有任何Session是有連線到[daniel]資料庫
步驟三 : 如下圖,我們開另一個Session ID 76來連線到[daniel]資料庫,可以看到結果是無法
連上資料庫,訊息顯示已經被一位使用者佔用了。
步驟四 : 此時我們回去剛剛的Session ID 85,然後用該Session連線到[daniel]資料庫,由下圖
可以發現居然可以順利連上[daniel]資料庫。
結論 : 當我們將某個DB設定為Single_User模式後,此時我們用sp_who2並看不到有任何Session在該DB。
但當我們用其他的Session想連接進去該DB都是失敗,因為佔住該DB的唯一使用者就是剛剛執行Alter指令
的那一個Session,因此一旦我們將剛剛執行Alter指令的Session給kill掉後,另一條Session就可以順利進入
該DB了。
我是ROCK
rockchang@mails.fju.edu.tw