Alter Database Single_User後是誰占住了唯一的Session呢?

  • 592
  • 0

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模式

1

 

 

步驟二 : 如下圖,我們可以確認目前沒有任何Session是有連線到[daniel]資料庫

2

 

 

步驟三 : 如下圖,我們開另一個Session ID 76來連線到[daniel]資料庫,可以看到結果是無法

連上資料庫,訊息顯示已經被一位使用者佔用了。

3

 

步驟四 : 此時我們回去剛剛的Session ID 85,然後用該Session連線到[daniel]資料庫,由下圖

可以發現居然可以順利連上[daniel]資料庫。

4

 

結論 : 當我們將某個DB設定為Single_User模式後,此時我們用sp_who2並看不到有任何Session在該DB。

但當我們用其他的Session想連接進去該DB都是失敗,因為佔住該DB的唯一使用者就是剛剛執行Alter指令

的那一個Session,因此一旦我們將剛剛執行Alter指令的Session給kill掉後,另一條Session就可以順利進入

該DB了。

我是ROCK

rockchang@mails.fju.edu.tw