SQL Server 生产服务器 - 所有数据库都处于恢复挂起状态

Posted

技术标签:

【中文标题】SQL Server 生产服务器 - 所有数据库都处于恢复挂起状态【英文标题】:SQL Server production server - all databases are in recovery pending state 【发布时间】:2015-02-12 06:16:19 【问题描述】:

我的 SQL Server 生产服务器中的所有数据库都处于恢复挂起状态。我尝试执行不同的查询,但它们没有用。请帮助我,因为客户端的生产工作已停止。

尝试执行alter commands - 但显示错误如下:

Msg 5120, Level 16, State 101, Line 1 无法打开物理文件 “G:\Data\MSSQL\Database.mdf”。操作系统错误 3:“3(系统 找不到指定的路径。)”。文件激活失败。 物理文件名“G:\Data\MSSQL\Data\Database_log.ldf”可能是 不正确。消息 945,级别 14,状态 2,第 1 行数据库“数据库” 由于无法访问文件或内存不足而无法打开或 磁盘空间。有关详细信息,请参阅 SQL Server 错误日志

消息 5069,第 16 级,状态 1,第 1 行

【问题讨论】:

您能否添加更多信息,例如错误日志和您正在运行的 SQL Server 版本。 无法联系数据库管理员,急需解决办法 如果您对数据库服务器没有足够的权限,您应该将此问题上报给您的数据库管理员。 你做了什么操作导致 SQL server 给出这个消息。您是否移动了任何文件,更改了任何驱动器。该消息仅说明找不到 mdf 文件所在的数据库位置。你能检查一下 db 文件是否存在于 G:\Data\MSSQL\Database.mdf Shanky--由于断电导致服务器关闭-服务器再次启动后显示上述错误 【参考方案1】:

恢复挂起意味着由于某种原因 SQL 无法在数据库上运行重新启动恢复。通常这是因为日志丢失或损坏。

检查是否可以在指定文件夹中找到 Database.mdf 和 Database_log.ldf 文件。 检查您的系统是否没有耗尽磁盘空间。

这可能是由硬盘驱动器故障引起的。您可能需要对上一次完整备份、任何差异进行完整还原,然后将日志还原到发生日志错误为止。

查看类似问题here

【讨论】:

【参考方案2】:

Recovery Pending – 如果 SQL Server 知道需要运行数据库恢复但有什么阻止它启动,则服务器会将数据库标记为“Recovery Pending”状态。这与 SUSPECT 状态不同,因为不能说恢复会失败——它只是还没有开始。

执行以下查询集:

ALTER DATABASE [DBName] SET EMERGENCY; GO
ALTER DATABASE [DBName] set single_user GO
DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS; GO
ALTER DATABASE [DBName] set multi_user GO

注意:您还可以阅读 DBCC CHECKDB REPAIR ALLOW DATA LOSS 上的Microsoft Warning。

【讨论】:

【参考方案3】:

这可能是由于以下可能的原因:

权限

在服务列表中找到您的 SQL Server 实例并双击它,然后选择登录选项卡。正是这个log on 帐户必须具有足够的权限才能写入临时备份文件夹位置。检查临时备份文件夹的权限,方法是在 Windows 资源管理器中右键单击它,选择属性,然后导航到安全选项卡。确保 SQL Server 使用的帐户对该文件夹具有明确的读/写权限。

映射驱动器

使用完全限定的 UNC 路径而不是映射的驱动器号。

缺乏域信任

您可以通过确保在两个域之间建立信任来解决此问题。您可能还需要为 SQL Server 服务帐户配置域之间的直通身份验证。

恢复数据库请参考here

【讨论】:

【参考方案4】:

执行这些查询以修复处于恢复挂起状态的SQL server database

ALTER DATABASE [DBName] SET EMERGENCY
GO
ALTER DATABASE [DBName] SET single_user
GO
DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS
GO
ALTER DATABASE [DBName] SET multi_user
GO

EMERGENCY 模式将SQL Server database 标记为READ_ONLY,停用日志记录,并仅授予系统管理员权限。此方法能够解决任何技术问题并将数据库恢复到可访问状态。数据库会自动退出EMERGENCY模式。

【讨论】:

以上是关于SQL Server 生产服务器 - 所有数据库都处于恢复挂起状态的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 Query 生产速度慢,但开发速度快

SQL Server数据库告警改进

在生产之前,您如何在可能的 sql server 死锁上测试您的软件?

sql server 本地复制订阅 实现数据库服务器 读写分离

sql server 本地复制订阅 实现数据库服务器 读写分离

SQL Server 审计功能-记录所有的操作记录