项目场景:
SQLSERVER 2012
问题描述
1、服务器意外断电
2、SqlServer数据库恢复挂起状态
3、SqlServer数据库操作过程意外分离数据库
4、SqlServer数据库分离后导致无法附加
解决步骤
1、创建一个空数据库,命名采用“问题数据库“名称
建议在其他空闲服务器或设备上进行此操作,数据库修复完成后再拷贝到原服务器附加。
2、停止 MSSQLSERVER服务
3、将“问题数据库”替换到空数据库位置
4、启动MSSQLSERVER服务
5、将数据库设置为单用户模式和紧急模式
将test替换为对应数据库名称
alter database test set single_user
alter database test set emergency
6、执行步骤5若出现数据库无法访问报错执行以下步骤
将数据库文件权限添加EveryOne完全修改权限,继续步骤5
7、执行数据库修复指令
将test替换为对应数据库名称
USE master
GO
ALTER DATABASE test SET SINGLE_USER
GO
ALTER DATABASE test SET EMERGENCY
GO
DBCC CHECKDB(test,REPAIR_ALLOW_DATA_LOSS)
go
ALTER DATABASE test SET ONLINE
GO
ALTER DATABASE test SET MULTI_USER
GO
8、执行修复报错无法放置锁错误,排查后发现是有用户占用,执行以下命令
将test替换为对应数据库名称,kill掉占用进程后继续步骤7。
USE master;
GO
DECLARE @SQL VARCHAR(MAX);
SET @SQL=''
SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID)
FROM master..sysprocesses
WHERE dbid=DB_ID('test');
EXEC(@SQL);