INF:旁路(紧急)模式和 DUMP TRANSACTION WITH NO_LOG

本文已归档。它按“原样”提供,并且不再更新。
概要
在极少情况下,由于启动时的恢复故障,数据库可能会标记为可疑。正常情况下,这会阻止任何人访问数据。不过,可以手动将可疑数据库的状态设置为“旁路模式”(又称“紧急模式”),选择或者使用大容量复制程序 (BCP) 向外复制数据。虽然您无法在旁路模式下进行任何常规的数据修改,但可以运行 DUMP TRANSACTION WITH NO_LOG。请注意,不支持在旁路模式下执行此操作,此操作可能具有危险性。

由于类似的原因,如果启动恢复花了很长时间,您不应将其中止,而应将数据库设置为旁路模式,然后执行 DUMP TRANSACTION WITH NO_LOG。
更多信息
通常会记录 DUMP TRANSACTION 执行的所有操作,因此该事务是可恢复、可中止的。然而,日志空间将供 DUMP 命令本身使用。如果事务日志已经满了,没有足够的空间来执行要进行日志记录的 DUMP TRANSACTION,则 WITH NO_LOG 选项可以截断事务日志,不进行任何记录。

DUMP TRANSACTION WITH NO_LOG 在正常情况下相对安全。服务器采取了措施,可确保即使服务器在此操作期间失败,恢复仍会成功。

在极少情况下,自动恢复(又称作启动恢复)可能会失败,将数据库标记为可疑。由于特定原因,恢复失败。必须记下最初导致恢复失败的错误日志消息,因为它可能有助于诊断原因。

“恢复”是一个使数据库保持一致的过程,操作方法是:重做或撤消上一个检查点之后启动或者在上一个检查点时未提交的所有事务。此过程依赖于事务日志的预写入特性(所有修改的页都先写入到日志中,然后再写入到数据库中)。恢复包括读取每条日志记录,将其时间戳与对应的数据库页的时间戳进行比较,然后撤消更改(如果是未提交的事务)或者重做更改(如果是提交的事务)。记下了导致恢复失败的错误日志消息之后,请尝试将数据库状态设置回正常,并重新启动 SQL Server 以确定第二次是否能成功恢复。您可以通过 sp_resetstatus 存储过程更改数据库状态。这是一个补充存储过程,可以通过 Mssql\Install 目录中的 Instsupl.sql 脚本安装它。有关更多信息,请参见联机文档中的“重设可疑状态”。

如果恢复仍然失败,请记下错误消息并与您的主要支持提供商联系。您还应该验证上一次正确数据库备份的可用性,因为可能需要它。不过,虽然在事务上和物理上不一致,但数据库中的大多数数据通常仍然是可用的。可以通过将数据库状态设置为旁路或紧急模式来访问这些数据。方法如下:打开“allow updates”后,如果是 SQL 6.5 数据库,则将 sysdatabases.status 设置为 -32768,如果是 SQL 7.0 数据库,则将 sysdatabases.status 设置为 32768。例如,对 SQL 6.5 数据库使用以下命令:
   UPDATE SYSDATABASES SET STATUS=-32768 WHERE NAME='DBNAME'				

执行了此操作后,您可以进入数据库,选择数据或者使用 BCP 将数据取出来。进行此操作时可能会遇到错误,但大多数情况下都可以检索到大量数据。
属性

文章 ID:165918 - 上次审阅时间:12/04/2015 16:40:01 - 修订版本: 3.1

Microsoft SQL Server 4.21a 标准版, Microsoft SQL Server 6.0 标准版, Microsoft SQL Server 6.5 标准版

  • kbnosurvey kbarchive kbinfo kbusage KB165918
反馈