Sqlerver还原数据库时一直就卡在那里提示“正在还原…”的状态,此时无法操作数据库
原因分析
1)管理器不会主动刷新,需要手工刷新一下才能看到最新状态(性能方面的考虑)
2)很少情况下,恢复进程被挂起了。这个时候假设你要恢复并且回到可访问状态,要执行:
代码如下:
RESTORE database dbname with recovery
这使得恢复过程能完全结束。
3)如果你要不断恢复后面的日志文件,的确需要使数据库处于“正在还原状态”,
这通常是执行下面命令:
代码如下:
RESTORE database dbname with norecovery
预计时间大约需要10分钟。
正在恢复
重启后一直显示“正在恢复“原因是直接重启sqlserver服务,导致有些事务没有提交 引起的。正常来说一直等待就行。
快速结束”正在恢复“状态
1、关闭数据库服务
2、把数据文件和日志文件都剪切走
3、启动 数据库服务
4、删除数据库,因为Mdf、ldf文件都切走了,所以不会丢失文件
5、附加数据库,因为文件很大,同样需要等待很久,我是10几分钟附加完成的,耐心等待
查看恢复进度
从sqlserver错误日志中,可以看到恢复的进度,和预估剩余时间
--第一个参数:存档编号;第二个参数固定死写1表示sqlserver错误日志;第三个参数包含的字符串
--其实这个系统自带的存储过程总共有7个参数,但是后面的参数没必要,所以就传了前3个必要的参数
--存档编号0没有的话,就写1、2都找找看,正常来说不在0就在1
user [master]
Exec xp_readerrorlog 0,1,'Recovery of database'
查看还原进度
好像并不准确
SELECT DB_NAME(er.[database_id]) [DatabaseName],
er.[command] AS [CommandType],
er.[percent_complete], er.start_time,
CONVERT(DECIMAL(5, 2), er.[percent_complete]) AS [Complete_Percent]
,CONVERT(DECIMAL(38, 2), er.[total_elapsed_time] / 60000.00) AS [ElapsedTime_m]
,CONVERT(DECIMAL(38, 2), er.[estimated_completion_time] / 60000.00) AS [EstimatedCompletionTime_m]
FROM sys.dm_exec_requests AS er
WHERE --DB_NAME(er.[database_id]) in ('xxxx') and
er.[command] in ( 'RESTORE DATABASE' ,'BACKUP DATABASE')
order by er.start_time desc
© 版权声明
文章版权归作者所有,未经允许请勿转载。