我正在尝试将生产数据库的备份还原到我们的开发服务器。当我运行以前运行的以下脚本时:
RESTORE DATABASE M2MDATA01 FROM DISK = 'C:\Install\SQLBackup\M2MDATA01.SQLBackup' WITH REPLACE,
MOVE 'M2MDATA01' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\M2MData01.mdf',
MOVE 'M2MDATA01_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\M2MData01.ldf'
我收到以下错误:
Error 12/21/2009 9:06:09 AM 0:00:00.000 SQL Server Database Error: Exclusive access could not be obtained because the database is in use. 5 0
但是,我不知道怎么可能使用它。我该怎么说?
答案 0 :(得分:3)
检查连接的内容(简单方法)
SELECT * FROM sys.sysprocesses S WHERE S.dbid = DB_ID('M2MDATA01')
注意:sysprocesses can not be emulated using dmvs ...
编辑,检查锁定
SELECT * FROM sys.dm_tran_locks L WHERE L.resource_type = 'DATABASE' AND L.resource_database_id = DB_ID('M2MDATA01')
答案 1 :(得分:2)
在SQL Server Management Studio中,转到Management =>活动监视器。这将显示连接到所有数据库的所有进程,并允许您终止这些进程(仅建议作为最后的手段)。
答案 2 :(得分:0)
Profiler是一个选项。
从Sql Server Management Studio中,选择“工具”|“Sql Server Profiler”。
至少应该告诉您某些内容是否正在使用相关数据库。
答案 3 :(得分:0)
这里最简单的解决方案是删除数据库并选择“关闭现有连接”复选框,然后再点击好。然后恢复将正常工作。这只是DEV吗? :}
答案 4 :(得分:0)
如果您正在恢复数据库,那么您真的关心谁连接了吗?或者这些连接正在做什么?我想不会。通过将数据库设置为单用户模式然后恢复数据库,只需“将所有人踢出去”。
USER master
GO
ALTER DATABASE M2MDATA01
SET SINGLE_USER
--This rolls back all uncommitted transactions in the db.
WITH ROLLBACK IMMEDIATE
GO
RESTORE DATABASE M2MDATA01
FROM DISK = 'C:\Install\SQLBackup\M2MDATA01.SQLBackup'
WITH REPLACE,
MOVE 'M2MDATA01' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\M2MData01.mdf',
MOVE 'M2MDATA01_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\M2MData01.ldf'
GO
现在,需要注意一个额外的项目。将数据库设置为单用户模式后,其他人可能会尝试连接到数据库。如果成功,您将无法继续还原。这是一场比赛!我的建议是一次性运行所有三个语句。