我实际上是在尝试制作一个脚本(在 Sql Server 2008 中)从一个备份文件中恢复一个数据库。我编写了以下代码,但出现错误 -
Msg 3101, Level 16, State 1, Line 3 Exclusive access could not be obtained because the database is in use. Msg 3013, Level 16, State 1, Line 3 RESTORE DATABASE is terminating abnormally.
我该如何解决这个问题?
IF DB_ID('AdventureWorksDW') IS NOT NULL BEGIN RESTORE DATABASE [AdventureWorksDW] FILE = N'AdventureWorksDW_Data' FROM DISK = N'C:\Program Files\Microsoft SQL Server\ MSSQL10_50.SS2008\MSSQL\Backup\AdventureWorksDW.bak' WITH FILE = 1, MOVE N'AdventureWorksDW_Data' TO N'C:\Program Files\Microsoft SQL Server\ MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW.mdf', MOVE N'AdventureWorksDW_Log' TO N'C:\Program Files\Microsoft SQL Server\ MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW_0.LDF', NOUNLOAD, STATS = 10 END
我假设如果您要恢复数据库,则不关心该数据库上的任何现有事务。正确的?如果是这样,这应该适合你:
USE master GO ALTER DATABASE AdventureWorksDW SET SINGLE_USER --This rolls back all uncommitted transactions in the db. WITH ROLLBACK IMMEDIATE GO RESTORE DATABASE AdventureWorksDW FROM ... ... GO
现在,还有一项需要注意的事项。将数据库设置为单用户模式后,其他人可能会尝试连接到数据库。如果他们成功,您将无法继续进行还原。这是一场比赛!我的建议是一次运行所有三个语句。