0

我有两台 SQL Server 2008 R2 服务器,一台用于 PROD,另一台用于 DR。我正在尝试为名为 School 的数据库添加日志传送。

到目前为止的步骤

  • 备份学校数据库
  • 使用 UI 或使用以下 SQL 语句恢复数据库,即

    Restore database "School" 
    From disk ='t:\Data\School.bak' 
    with NoRecovery
    
  • 结果是数据库卡在恢复中

  • 如果我用

    Restore database "School" 
    From disk ='t:\Data\School.bak' 
    With recovery
    

    数据库还原完成,但日志传送失败。

  • 我已删除数据库并使用重新创建它

    Restore database "School" 
    From disk ='t:\Data\School.bak' 
    With **NoRecovery** 
    

    但它仍然停留在恢复状态

有没有一种方法可以恢复数据库而不会使数据库陷入恢复状态。

4

2 回答 2

1

这对我来说似乎是预期的行为。我误读了什么吗?

使用该选项还原数据库和任何差异或所需的事务日志备份后NORECOVERY,您需要告诉 SQL Server 您已完成文件还原。该NORECOVERY选项专门用于让您恢复多个文件。

你应该只需要运行:

RESTORE DATABASE [School] WITH RECOVERY;

这将告诉 SQL Server 您已完成,它将完成恢复,并且不再显示为正在恢复。

于 2017-08-15T17:01:37.690 回答
0

我已删除数据库并使用从磁盘 ='t:\Data\School.bak' 和 NoRecovery 恢复数据库“School”再次重新创建它

如果您没有任何进一步的日志,您也必须使用以下命令

restore database databasename with recovery

更多信息:

使用 UI 或使用以下 SQL 语句恢复数据库,即

下次尝试使用tsql发出restore语句,这样你就可以知道状态

restore database databasename from disk="path"
 with stats=5

现在,如果您想深入了解它在哪里以及它在做什么,您可以使用如下所示的跟踪标志

dbcc traceon(3004,3605,-1)
GO
  restore database databasename from disk="path"
     with stats=5

这会将输出记录到错误日志,如下所示

2008-01-23 08:59:56.26 spid52 恢复数据库:数据库 dbPerf_MAIN
2008-01-23 08:59:56.26 spid52 打开备份集
2008-01-23 08:59:56.31 spid52 恢复:配置部分已加载 2008-01-23 08 :59:56.31 spid52 恢复:备份集已打开
2008-01-23 08:59:56.31 spid52 恢复:计划开始
2008-01-23 08:59:56.32 spid52 停止全文爬网数据库 dbPerf_MAIN
2008-01-23 08: 59:56.32 spid52 卸载全文目录
2008-01-23 08:59:56.32 spid52 X 锁定数据库:dbPerf_MAIN
2008-01-23 08:59:56.32 spid52 恢复:计划完成
2008-01-23 08:59:56.32 spid52恢复:dbPerf_MAIN 上的 BeginRestore(离线)
2008-01-23 08:59:56.40 spid52 恢复:PreparingContainers 2008-01-23 08:59:56.43 spid52 恢复:容器准备就绪

对于您当前的问题,您可以查看事件日志,因为它将记录当前阶段

有没有一种方法可以恢复数据库而不会使数据库陷入恢复状态。

您将必须获取备份的 spid 并查看等待类型并相应地进行故障排除

select * from sys.dm_Exec_requests where sessionid=backupspid
于 2017-08-15T16:49:07.220 回答