SQL 2008 R2数据库恢复时间太长或数据库无法完成启动

北京雨翰数据恢复 2018-02-26 02:32:18
数据库版本:SQL Server 2008 R2 (RTM) - 10.50.1600.1
备份文件版本也是:SQL Server 2008 R2 (RTM) - 10.50.1600.1
将数据库备份文件restore database到新数据库后,输出:
引用
已处理百分之 10。
已处理百分之 20。
已处理百分之 30。
已处理百分之 40。
已处理百分之 50。
已处理百分之 60。
已处理百分之 70。
已处理百分之 80。
已处理百分之 90。
已处理百分之 100。
已为数据库 'liu1',文件 'test1' (位于文件 1 上)处理了 915584 页。
已为数据库 'liu1',文件 'test1_LOG' (位于文件 1 上)处理了 1 页。
RESTORE DATABASE 成功处理了 915585 页,花费 267.842 秒(26.706 MB/秒)。

后一直无法完成数据库恢复工作。执行sp_who查看到恢复数据库的进程一直处于Conditional状态中。
将sql 2008 R2服务器shutdown with nowait强制关闭后,启动数据库服务器,新恢复出来的数据库test1一直无法访问,执行sp_who查看到有个访问test1的后台系统进程一直处于DB STARTUP状态中。

网上找到:FIX: Slow performance when you recover a database if there are many VLFs inside the transaction log in SQL Server 2005, in SQL Server 2008 or in SQL Server 2008 R2
https://support.microsoft.com/en-us/help/2455009/fix-slow-performance-when-you-recover-a-database-if-there-are-many-vlf

执行dbcc loginfo输出1539行。
引用
1> dbcc loginfo(test1)
2> go
FileId FileSize StartOffset FSeqNo Status Parity CreateLSN
----------- -------------------- -------------------- ----------- ----------- ------ ---------------------------
2 1507328 8192 27484 0 64 0
2 1507328 1515520 27469 0 128 0
2 1507328 3022848 27470 0 128 0
2 1761280 4530176 27471 0 64 0
2 38535168 6291456 27485 2 64 27484000000006600001
2 38535168 44826624 0 0 0 27484000000006600001
2 38535168 83361792 0 0 0 27484000000006600001
2 38535168 121896960 0 0 0 27484000000006600001
2 38535168 160432128 0 0 0 27484000000006600001


将sql 2008 R2打补丁到SQLServer2008R2SP1-KB2528583-x64-CHS (10.51.2500)或者sqlserver2008r2sp3-kb2979597-x64-chs(10.53.6000)仍然存在类似的问题。
我怀疑是在恢复完数据库日志后
请大家提供下思路。
多谢。

...全文
1327 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 8 楼 kk185800961 的回复:
你是执行了还原数据库 :restore database …… with recovery 然后一直等待中,接着又强制重启服务,起来后还是一直等待中。 数据库的状态现在是不是 norecovery ?数据库多大?总内存多大?是否限制了内存? 如果一切正常,那就是数据库正常恢复中,只是很慢…………
restore database进行recovery阶段的时候, 进程一致处于conditional。
  • 打赏
  • 举报
回复
引用 8 楼 kk185800961 的回复:
你是执行了还原数据库 :restore database …… with recovery 然后一直等待中,接着又强制重启服务,起来后还是一直等待中。 数据库的状态现在是不是 norecovery ?数据库多大?总内存多大?是否限制了内存? 如果一切正常,那就是数据库正常恢复中,只是很慢…………
我觉得和内存没有关系。sql服务器启动后,数据库一致处于dbstartup状态中。 且sqlservr进程cpu利用率25%
xiaoxiangqing 2018-02-27
  • 打赏
  • 举报
回复
看一下windows的错误日志
薛定谔的DBA 2018-02-27
  • 打赏
  • 举报
回复
你是执行了还原数据库 :restore database …… with recovery 然后一直等待中,接着又强制重启服务,起来后还是一直等待中。 数据库的状态现在是不是 norecovery ?数据库多大?总内存多大?是否限制了内存? 如果一切正常,那就是数据库正常恢复中,只是很慢…………
  • 打赏
  • 举报
回复
引用 5 楼 z10843087 的回复:
看看错误日志有没有有用的信息
错误日志文件中没有异常信息。
OwenZeng_DBA 2018-02-26
  • 打赏
  • 举报
回复
看看错误日志有没有有用的信息
  • 打赏
  • 举报
回复
引用 3 楼 z10843087 的回复:
把刚才还原的备份文件在其他服务器上面去还原一下试试。 另外用continue_after_error 试试。另外看看error log

问题还是一样。
OwenZeng_DBA 2018-02-26
  • 打赏
  • 举报
回复
把刚才还原的备份文件在其他服务器上面去还原一下试试。 另外用continue_after_error 试试。另外看看error log
  • 打赏
  • 举报
回复
引用 1 楼 yenange 的回复:
RESTORE DATABASE dbName WITH RECOVERY;
试下是否可以
就是在执行with recovery的阶段出现的这个问题。
吉普赛的歌 2018-02-26
  • 打赏
  • 举报
回复
RESTORE DATABASE dbName WITH RECOVERY;
试下是否可以
今天将由于需要就将我的SQL 2008升级到SQL 2008 R2. 说到为什么要升级是因为,从另一台机器上备份了一个数据库,到我的机器上还原的时候提示“System.Data.SqlClient.Sqlerror:该数据库是在运行版本10.50.2500的服务器上备份的,该版本与此服务器(运行版本10.00.1600)不兼容。请在支持该备份的服务器上还原数据库,或者使用与此服务器兼容的备份。” 经过一番查证得知: 所谓的10.00.1600其实就是SQL 2008 10.50.1600其实就是SQL 2008 R2 10.50.2500其实就是SQL 2008 R2 SP1 这样一来基本就明了了。 我得升级自己的数据库SQL 2008 R2 SP1。 这篇文章就把我先升级到SQL 2008 R2的过程详细记录下来,下一篇文章会介绍升级R2R2 SP1. 第一步:准备安装程序。 首先SQL 2008是安装好的 因此只需要下载SQL 2008 R2安装程序,下载地址如下:http://care.dlservice.microsoft.com/dl/download/1/E/6/1E626796-588A-495C-917B-321093FB98EB/2052/SQLFULL_x86_CHS.exe?lcid=2052&ptype=pcare 第二步:升级开始。SHOW TIME!!! 1、如果是从SQL2008升级到SQL2008R2那么只能选择左侧“安装”对应右侧“从SQL SERVER 2000,SQL 2005或SQL 2008升级”这个选项来升级。 大家也注意到有一个“维护”但是这个选项是“从SQL 2008其他例如EXPRESS版本升级” 在此,要区分清楚。 2、安装程序支持规则检查。通过之后就继续下一步。 3、输入产品密钥,这个地方,你的密钥是什么版本的,装完之后你的数据库就是什么版本:像企业版,开发版等等等。 4、许可条款必须接受,不然人家不让用啊~~~ 5、安装程序支持文件。 6、程序支持规则安装完成后程序会自动检测安装的文件是否满足需求。 7、当你的服务器中只有一个实例的时候,你很难听到实例这个词,人们都直接叫他“数据库”了。只有在服务器上安装的实例数目超过两个的时候你才会听到“实例”二字比较多。 但是“实例”肯定是学习数据库过程中必须熟知的东东!!! 此处,选择你想要升级的实例。下一步就行了。 8、以前安装过的组件(component)都会出现在这里,不用管,以前有的,现在当然也要有,闭着眼睛点击“下一步”吧! 9、因为是升级安装,所以你以前的实例名字是什么,这里还是什么。继续“下一步”。 10、不废话,“下一步”。 11、是否发送错误报告,随便,下一步。 12、“下一步”。 13、点击“升级”按钮进行升级,中途等待大约20-30分钟就完成了。 升级过程中如图: 14、安装成功要求重新启动。重启吧没的说!! 15、重启完毕,启动SSMS(SQL SERVER MANAGEMENT STUDIO)在登陆界面上就会立马察觉到不同,SQL 2008变成了SQL 2008 R2. 16、连接上数据库引擎,在左侧导航栏就可以看到你数据库的版本了。这次变成了10.50.1600。如果还要升级到10.50.2500。那就继续安装一个升级补丁吧! 至此,10.00.1600升级10.50.1600已经成功完成。 总结一下: 10.00.1600就是SQL SERVER 2008 10.50.1600就是SQL SERVER 2008 R2 这篇博文里讲的是升级安装,如果你要进行全新安装,请按照如下操作: 一、卸载SQL SERVER 2008,一定要卸载,数据库不像其他常用的应用程序(那些程序会自动检测是否有旧版本,然后给你卸载并升级)。 另:对SQL来说,如果你安装好之后,再进行一次安装的话,实际上安装的是另外一个实例。 二、卸载完之后就安装就行了。执行的是安装---全新安装。 其他细节参考我的博文:SQL SERVER 2008安装(在实例、权限等方面,SQL 2008SQL 2008 R2是一样的)。

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧