今晚我遇到了这个问题,我的生产服务器上的所有数据库在执行Windows(服务器2016)更新后,我的Redgate SQL备份软件更新并重新启动服务器后处于恢复挂起状态。查看日志,我发现所有数据库都无法通过“拒绝访问”错误访问。所以我认为这与运行MSSQLSERVER服务的用户有关。所以我明确设置了该用户的数据和日志文件夹的权限,并重新启动了SQL Server服务,一切都很好。
然而,这台服务器已经运行了很长时间 - 我还没有看到这种问题,突然用户无法访问数据和日志文件夹。 SOMETHING必须删除这些文件夹的权限。另外,现在当我查看这些文件夹的安全选项卡时,我看到我正在使用的用于运行MSSQLSERVER的用户是明确定义的。但是在具有完全相同配置的登台服务器上,我没有看到用户在那里明确定义,但服务器运行正常。
所以 - 对我的问题。到底发生了什么?有任何想法吗?我是否应该担心现在在我的数据和日志文件夹的“安全”选项卡中明确定义了运行我的MSSQLSERVER服务的用户帐户?
答案 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路径]'
获得解决方案答案 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