我正在编写一组脚本(在 SQL Server Management Studio 中)来修复客户数据库(SQL Server 2008 R2)中的某些数据不一致。
我得到了一个.bak
包含数据库的文件,并将其恢复到我的系统中,例如SampleDatabase
. 现在我正在编写我的脚本,一段时间后,我已经解决了大部分问题。
所以现在我想.bak
再次恢复那个原始文件,以确保我的所有脚本都针对原始数据运行,并做他们应该做的事情。我关闭 SQL Server Management Studio 中的所有 Windows,在我的数据库中打开一个全新的查询窗口master
,然后发出我的RESTORE
命令:
RESTORE DATABASE [SampleDatabase]
FROM DISK = N'c:\tmp\sample.bak'
WITH FILE = 1,
MOVE N'Sample_PRIMARY' TO N'c:\mssql\Sample_PRIMARY.MDF',
MOVE N'Sample_LOG' TO N'C:\mssql\Sample_LOG.LDF',
NOUNLOAD, REPLACE, STATS = 5
不幸的是,我现在收到一条错误消息:
消息 3101,级别 16,状态 1,行 2
无法获得独占访问,因为数据库正在使用中。
消息 3013,级别 16,状态 1,第 2 行
RESTORE DATABASE 异常终止。
这似乎有点奇怪,因为我确保我已将所有 SSMS Windows 都关闭到该数据库中 - 为什么它仍在使用中?
我怎样才能尽快解决这种情况?我知道现在唯一可行的解决方案是重新启动MSSQLSERVER
服务 - 但这是一个相当冗长且有些麻烦的过程......
是否有另一种更有效、更简化的方法让这个数据库“停止使用”,这样我就可以再次在它上面恢复备份以检查我的脚本?
以下变体的用途
ROLLBACK IMMEDIATE
很常见:注意SQLCMD模式。
尝试在数据库选项中限制对受限用户的访问。做你的事,然后设置回多用户。