很久之前有寫過一篇搬移系統資料庫的網誌,不過其實也就是抄msdn的,今天實做搬移使用者資料庫時,遇到很多屎結,導致不能使用detach方式搬移邏輯檔案,訊息如:
Transaction (Process ID 239) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
其實就是很多的連線一直進入sql server,踢也不能踢,殺也不能殺
解決方案很簡單
SET DEADLOCK_PRIORITY 'HIGH'
這樣就行了,
這意思是把你現在的連線優先權設成high,這樣其他的連線屎結就應該被踢掉,
接著
EXEC sp_detach_db 'dbname', 'true'
然後再設回NORMAL就可以了
SET DEADLOCK_PRIORITY 'NORMAL'
另外這是一個踢掉連線的方式
use master
declare @i varchar(max)=''
select @i=@i+'kill '+cast(spid as varchar(10))+';' from master.dbo.sysprocesses
where db_name(dbid)='dbname'
execute(@i)
這是設成單一使用者模式的方式
USE [master]
ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
這是設回去的方式
ALTER DATABASE dbname SET MULTI_USER
另外就是OFFLINE 和 ONLINE
ALTER DATABASE dbname SET OFFLINE
ALTER DATABASE dbname SET ONLINE
其他相關的東西 查一下 msdn會比較詳盡