Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11603874
  • 博文数量: 8065
  • 博客积分: 10002
  • 博客等级: 中将
  • 技术积分: 96708
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-16 17:06
文章分类

全部博文(8065)

文章存档

2008年(8065)

分类: 服务器与存储

2008-05-21 09:17:42

近日,用户打电话请求技术支持,说素材采集数据库连接不上,笔者在网管控制台启动应用程序,发现确实如此,如图1。
笔者进行了简单的测试:ping数据库服务器没有问题,证明网络连接没有问题。ODBC连接也可以连接到数据库服务器的MASTER数据库,证明客户端没有问题。问题应该出在CMS应用数据库上。
直到现在笔者还没有认识到问题的严重性,打开企业管理器,察看CMS数据库的状态,竟然是“置疑”!

 
图1 错误信息

出现“置疑”状态有几种可能:
1、数据库文件或者相关的日志文件丢失;
2、数据库所在的路径发生变化;
3、磁盘可用空间不足;
4、SQL Server可能没有足够的时间来恢复数据库;
5、数据库在数据写入的过程中数据页因为停电或者内存泄漏等操作被损坏。
为了查看故障情况,首先,重新启动了数据库服务器,察看SQL Server服务管理器中的SQL Server的运作状况,发现其运行正常,说明SQL Server服务是正常的。打开企业管理器,故障情况依旧。
首先向部门领导报告了故障发生的情况,请示以后紧急启用了一台临时服务器。
根据故障的状况和“置疑”发生的可能性,笔者逐一进行了排查。文件路径没有改变,文件也没有丢失,磁盘空间还有30GB,没有进行数据库恢复操作,那就只有最后一种可能了。问一下同事数据中心是否停过电,回答是没有。仔细问了一下,有没有异常发生,这时候有个同事说刚才在调试KVM的时候不小心把电源线给拔下来,由于没有认识到是连接的服务器,连续接插了几次,啊!这可是资料存储的Server啊!不过还好,数据库文件、日志文件还在,可以使用数据库附加到服务器。打开查询分析器输入以下脚本命令:
EXEC sp_attach_db @dbname = N'cms',
@filename1 = N'd:\Data\cms.mdf',
@filename2 = N'e:\Data\cms_log.ldf'
如果数据库文件没有问题,这样的话就应该OK了。因为文件很大,执行开始以后,笔者就离开机房回到座位上,耐心等待数据库附加完成。不过,最不愿意看到的事情发生了,数据库文件损坏,不是有效的数据库文件头,可以确认这是灾难性的!还好,想到还有完整的数据备份机制,至少可以把损失降低到最低程度吧。

近日,用户打电话请求技术支持,说素材采集数据库连接不上,笔者在网管控制台启动应用程序,发现确实如此,如图1。
笔者进行了简单的测试:ping数据库服务器没有问题,证明网络连接没有问题。ODBC连接也可以连接到数据库服务器的MASTER数据库,证明客户端没有问题。问题应该出在CMS应用数据库上。
直到现在笔者还没有认识到问题的严重性,打开企业管理器,察看CMS数据库的状态,竟然是“置疑”!

 
图1 错误信息

出现“置疑”状态有几种可能:
1、数据库文件或者相关的日志文件丢失;
2、数据库所在的路径发生变化;
3、磁盘可用空间不足;
4、SQL Server可能没有足够的时间来恢复数据库;
5、数据库在数据写入的过程中数据页因为停电或者内存泄漏等操作被损坏。
为了查看故障情况,首先,重新启动了数据库服务器,察看SQL Server服务管理器中的SQL Server的运作状况,发现其运行正常,说明SQL Server服务是正常的。打开企业管理器,故障情况依旧。
首先向部门领导报告了故障发生的情况,请示以后紧急启用了一台临时服务器。
根据故障的状况和“置疑”发生的可能性,笔者逐一进行了排查。文件路径没有改变,文件也没有丢失,磁盘空间还有30GB,没有进行数据库恢复操作,那就只有最后一种可能了。问一下同事数据中心是否停过电,回答是没有。仔细问了一下,有没有异常发生,这时候有个同事说刚才在调试KVM的时候不小心把电源线给拔下来,由于没有认识到是连接的服务器,连续接插了几次,啊!这可是资料存储的Server啊!不过还好,数据库文件、日志文件还在,可以使用数据库附加到服务器。打开查询分析器输入以下脚本命令:
EXEC sp_attach_db @dbname = N'cms',
@filename1 = N'd:\Data\cms.mdf',
@filename2 = N'e:\Data\cms_log.ldf'
如果数据库文件没有问题,这样的话就应该OK了。因为文件很大,执行开始以后,笔者就离开机房回到座位上,耐心等待数据库附加完成。不过,最不愿意看到的事情发生了,数据库文件损坏,不是有效的数据库文件头,可以确认这是灾难性的!还好,想到还有完整的数据备份机制,至少可以把损失降低到最低程度吧。

 
图2 还原数据库

拿出以前制定的备份策略看了一下,CMS数据库的备份是这样的:星期日、三凌晨2:00执行数据库完整备份,同时备份事务日志,星期一、二、四、五、六凌晨2:00执行数据库差异备份,同时备份事务日志。MASTER的数据库备份是在每天的1:00执行完全备份,每个星期的每一天都单独保留相应的备份。如果要将CMS数据库还原到星期二下午16:00时的状态,根据备份方案要执行如下操作:还原在星期日凌晨2:00创建的数据库完整备份,还原在星期二凌晨 2:00 创建的差异数据库备份。但是最后一次差异备份后数据库修改的数据怎么办?每天的数据量可是接近万条啊,不会需要手工重新输入吧。
现在也不知道MASTER数据库是否完整。根据状况分析,有可能MSATER数据库也有故障。先恢复今天凌晨1:00备份的MASTER数据库。打开企业管理器,选择数据库,右键所有任务,选择还原数据库。
选择数据库名为:master,从备份设备上恢复,选择master_back.bak数据库备份,选择数据库完全还原备份集合,然后点击确定。哦,怎么出错了?原来,笔者忙中出错:数据库上要强行恢复正在运行的MASTER数据库,这怎么行呢?正确的步骤应该是首先要进入单用户模式,然后才能恢复MASTER数据库。进入管理工具的服务管理器,找到SQL Server服务,停止该服务。
小提示:要以单用户方式启动数据库,必须在启动参数中输入-CM,重新启动数据库就以单用户方式启动了。
重新进入还原MASTER数据库窗口,选择备份文件,确定即可。至此,已经成功还原了MASTER数据库,同时又自动关闭了SQL Server服务。为了避免因为操作失误或者其它的原因导致恢复出现错误,决定先在自己的机器上模拟一下恢复过程。
于是,在自己的PC上,创建一个数据库test,只建立了一个表qq,输入5条数据,然后完整备份这个test数据库,因为是完整备份而且是第一次,所以选择“追加到媒体”或者“重写现有媒体”均可。这个完全备份相当于星期日凌晨2:00的完全备份。再给test数据库插入5条数据。现在给这个数据库做一次差异备份,这个差异备份的目的相当于星期一凌晨2:00的差异备份。
打开test数据库,进入备份数据库窗口,选取刚建立的备份设备,选择差异备份,注意,选择“追加到媒体”。同样的操作再给数据库插入5条纪录,完成星期二凌晨的差异备份。

 
图2 还原数据库

拿出以前制定的备份策略看了一下,CMS数据库的备份是这样的:星期日、三凌晨2:00执行数据库完整备份,同时备份事务日志,星期一、二、四、五、六凌晨2:00执行数据库差异备份,同时备份事务日志。MASTER的数据库备份是在每天的1:00执行完全备份,每个星期的每一天都单独保留相应的备份。如果要将CMS数据库还原到星期二下午16:00时的状态,根据备份方案要执行如下操作:还原在星期日凌晨2:00创建的数据库完整备份,还原在星期二凌晨 2:00 创建的差异数据库备份。但是最后一次差异备份后数据库修改的数据怎么办?每天的数据量可是接近万条啊,不会需要手工重新输入吧。
现在也不知道MASTER数据库是否完整。根据状况分析,有可能MSATER数据库也有故障。先恢复今天凌晨1:00备份的MASTER数据库。打开企业管理器,选择数据库,右键所有任务,选择还原数据库。
选择数据库名为:master,从备份设备上恢复,选择master_back.bak数据库备份,选择数据库完全还原备份集合,然后点击确定。哦,怎么出错了?原来,笔者忙中出错:数据库上要强行恢复正在运行的MASTER数据库,这怎么行呢?正确的步骤应该是首先要进入单用户模式,然后才能恢复MASTER数据库。进入管理工具的服务管理器,找到SQL Server服务,停止该服务。
小提示:要以单用户方式启动数据库,必须在启动参数中输入-CM,重新启动数据库就以单用户方式启动了。
重新进入还原MASTER数据库窗口,选择备份文件,确定即可。至此,已经成功还原了MASTER数据库,同时又自动关闭了SQL Server服务。为了避免因为操作失误或者其它的原因导致恢复出现错误,决定先在自己的机器上模拟一下恢复过程。
于是,在自己的PC上,创建一个数据库test,只建立了一个表qq,输入5条数据,然后完整备份这个test数据库,因为是完整备份而且是第一次,所以选择“追加到媒体”或者“重写现有媒体”均可。这个完全备份相当于星期日凌晨2:00的完全备份。再给test数据库插入5条数据。现在给这个数据库做一次差异备份,这个差异备份的目的相当于星期一凌晨2:00的差异备份。
打开test数据库,进入备份数据库窗口,选取刚建立的备份设备,选择差异备份,注意,选择“追加到媒体”。同样的操作再给数据库插入5条纪录,完成星期二凌晨的差异备份。

阅读(667) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~