0

我正在执行一个 RESTORE DATABASE 语句,该语句通常有效,但偶尔无效,并且不报告任何错误。我们正在针对 SQL Server 2008R2 运行。批处理文件正在执行 sqlcmd 语句以从文件运行 sql 语句。该文件包含以下内容(请注意,名称是虚构的,但由于恢复通常有效,因此是正确的):

USE MASTER;
RESTORE DATABASE TestMLS
FROM DISK = 'c:\TestMLS.bak'
WITH MOVE 'CorrectName1' TO 'c:\TestMLS.MDF',
MOVE 'CorrectName2' TO 'c:\TestMLS.LDF',
REPLACE;
ALTER DATABASE E2SS80Test SET MULTI_USER;

在尝试查找问题时,我们使用“DBCC TRACEON (3004, 3605, -1)”启用了跟踪,它提供了您在恢复正常工作时所期望的正常信息。以下输出是恢复不起作用时日志显示的内容:

08/06/2013 13:42:25,spid59,Unknown,Setting database option MULTI_USER to ON for database TestMLS.
08/06/2013 13:42:25,spid59,Unknown,Resuming any halted fulltext crawls
08/06/2013 13:42:05,spid59,Unknown,X-locking database: TestMLS
08/06/2013 13:42:05,spid59,Unknown,Dismounting FullText catalogs
08/06/2013 13:42:05,spid59,Unknown,Halting FullText crawls on database TestMLS
08/06/2013 13:42:05,spid59,Unknown,Restore: Planning begins
08/06/2013 13:42:05,spid59,Unknown,Restore: Backup set is open
08/06/2013 13:42:05,spid59,Unknown,Restore: Configuration section loaded
08/06/2013 13:42:05,spid59,Unknown,Opening backup set
08/06/2013 13:42:05,spid59,Unknown,RestoreDatabase: Database TestMLS

请注意,恢复:计划开始发生,但恢复:计划完成从未出现。此外,Restore: BeginRestore 永远不会出现。

今天我找到了一种解决方法 - 以前脚本在调用还原之前没有使数据库脱机。添加一个语句来执行此操作似乎允许还原一直工作。

我仍然想知道为什么我们会出现这种行为 - 似乎恢复过程至少应该失败并出现错误,而不是不做被要求的事情。

任何信息或想法表示赞赏。

4

1 回答 1

0

我认为有时不会发生还原,因为当时正在使用被替换的数据库。尝试在RESTORE DATABASE命令之前添加:

ALTER DATABASE [TestMLS] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
于 2013-08-06T21:05:58.430 回答