2014年6月12日 星期四

搬移使用者資料庫

很久之前有寫過一篇搬移系統資料庫的網誌,不過其實也就是抄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會比較詳盡