MSSQL 2016 Server:所有数据库都标记为Recovery Pending状态

时间:2017-05-20 02:03:07

标签: sql-server-2016

今晚我遇到了这个问题,我的生产服务器上的所有数据库在执行Windows(服务器2016)更新后,我的Redgate SQL备份软件更新并重新启动服务器后处于恢复挂起状态。查看日志,我发现所有数据库都无法通过“拒绝访问”错误访问。所以我认为这与运行MSSQLSERVER服务的用户有关。所以我明确设置了该用户的数据和日志文件夹的权限,并重新启动了SQL Server服务,一切都很好。

然而,这台服务器已经运行了很长时间 - 我还没有看到这种问题,突然用户无法访问数据和日志文件夹。 SOMETHING必须删除这些文件夹的权限。另外,现在当我查看这些文件夹的安全选项卡时,我看到我正在使用的用于运行MSSQLSERVER的用户是明确定义的。但是在具有完全相同配置的登台服务器上,我没有看到用户在那里明确定义,但服务器运行正常。

所以 - 对我的问题。到底发生了什么?有任何想法吗?我是否应该担心现在在我的数据和日志文件夹的“安全”选项卡中明确定义了运行我的MSSQLSERVER服务的用户帐户?

2 个答案:

答案 0 :(得分:1)

使用手动方法来修复SQL Server数据库中的恢复挂起状态,该状态如下-

将数据库状态设置为紧急状态:

ALTER DATABASE [dbname] SET EMERGENCY

将数据库置于多用户模式:

ALTER DATABASE [dbname] SET MULTI_USER

分离数据库:

EXEC sp_detach_db'[dbname]'

仅重新附加数据文件:

EXEC sp_attach_single_file_db @dbname ='[dbname]',      @physname = N'[mdf路径]'

您还可以从-https://community.spiceworks.com/how_to/157233-how-to-fix-recovery-pending-state-in-sql-server-database

获得解决方案

答案 1 :(得分:0)

使用 ALTER DATABASE ... 重建登录。先设置成紧急,然后重建日志,然后设置在线和多用户。您将收到一条警告,指出数据库可能在事务上不一致(确实如此)。

Alter Database TestDB Set Emergency;
Go

Alter Database TestDB Rebuild Log On 
    (Name = N'TestDB_log',
    FileName = N'L:\Path\To\LogFile\TestDB_log.ldf')
Go

Alter Database TestDB Set Online, Multi_user;
Go