在我的 SQL Server 2008 上,我有一个 SQL 代理作业,用于每晚恢复数据库。程序:
- 在其他服务器上查找最新备份
- 终止与目标数据库的所有连接
- 使用替换和恢复功能恢复目标数据库
上周末失败了,因为数据库正被系统进程(spid 11 检查点)使用。由于我无法终止系统进程,我通过重新启动 sql server 解决了这个问题。这个周末也失败了,出现了同样的错误(此数据库中的 checkpint 进程来自sp_who
),当我运行:
SELECT session_id,request_id,command,status,start_time
FROM sys.dm_exec_requests
WHERE session_id = 11
表明:
11 0 CHECKPOINT background 2010-04-06 10:17:49.103
每次服务器出现故障时我都无法重新启动它。
有人能帮我解决这个问题吗?
提前致谢
曼约特
答案1
不要杀死小于 50 的 SPID!这些是系统进程
要查看是否可以将数据库从“恢复”状态中移除,请尝试
RESTORE DATABASE MyDB WITH RECOVERY
评论后进行编辑
假设您想恢复数据库但不想保留它......
停止 SQL Server,将 MDF/LDF 移到其他位置,启动 SQL Server。
数据库离线(我忘记了确切的状态)。然后你可以删除它,然后恢复它
答案2
已修复-因为它每天都会恢复。我已将其从重新索引、dbcc checkdb、更新统计等维护计划中排除。
即使它们在单独的时间表内运行,排除数据库也可以解决问题。
答案3
不要关闭打开的连接,而是尝试
ALTER DATABASE myDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
然后进行恢复,或者更好的是,删除它,然后恢复。
完成后,不要忘记将数据库恢复到以前的状态:
ALTER DATABASE myDatabase SET MULTI_USER