用户登录
用户注册

分享至

还原数据库文件的实战

  • 作者: 晓风残月洞房夜
  • 来源: 51数据库
  • 2020-12-21

    一个图片素材数据库发生了故障。工程师仔细检查数据库文件和日志文件的路径和大小后发现,既不是磁盘空间的问题,也不是数据库恢复造成的故障,基本确定是数据页损坏造成的。因此,需要启用数据库备份来还原故障数据库。

    笔者是公司的数据库管理员,前几天就遇到一例图片素材数据库的故障。由于电源故障导致数次非正常启动服务器,图片素材数据库正常启动后显示“置疑”状态。故障发生时间为9∶30。

    查找数据库故障原因

    笔者首先检查了数据库文件和日志文件的路径和大小,显示正常;磁盘还有50GB的空间,不是磁盘空间的问题;没有执行数据库恢复操作,故也不是数据库恢复造成的故障。因此基本可以确定是数据页损坏造成的故障。笔者首先备份了系统分区以及数据库所在的数据分区,完整保存故障现场。然后停止数据库服务,把数据库文件以及日志文件保存到其他磁盘。笔者建议在测试环境中修复数据库,否则可能会进一步损伤数据库。在测试环境中,笔者将数据库文件和日志文件附加到服务器,发现提示信息显示的文件“d:DataImes.mdf”的文件头不是有效的文件头,数据库文件损坏。因此需启用数据库备份还原数据库。

    笔者仔细察看了数据库备份策略,图片素材数据库使用“数据库维护计划”创建备份策略:每天1∶30执行完整备份数据库,每个小时执行事务日志备份,备份后的数据库以及事务日志文件通过分布式文件系统自动同步到其他服务器中,也就是说数据库备份和文件备份有两个完整的副本。如果要将图片素材数据库还原到9∶30时的状态,根据备份策略以及数据库恢复条件,需要完成如下工作:备份最后一次事务日志备份(9∶00)后的日志,还原1∶30创建的完整备份数据库,还原每个小时的事务日志备份,还原最后一次事务日志后的日志备份,更改数据库的状态。

    五步恢复数据库

    笔者在恢复数据库时,喜欢使用“查询分析器”的脚本模式。因为脚本的恢复效率要高于“企业管理器”图形模式,当然读者可以选择自己熟悉的方法恢复数据库。

    1. 备份最后一次事务日志后的日志备份。打开查询分析器,创建临时备份设备,然后备份事务日志,保存最后一次事务日志备份后生成的新日志。

    2. 还原1∶30创建的完整备份数据库。还原每天1∶30创建的完整数据库备份。数据库还原后不能访问,但可继续恢复日志。恢复后的数据库状态为“正在装载”。

    3. 还原9∶00之前每个小时事务日志备份。还原2∶00~9∶00的数据库事务日志备份,还原参数使用“NORECOVERY”。脚本如下:

    RESTORE LOG Imes

    FROM disk=‘e:123Imes_LOG

    _200804080200.TRN’

    WITH NORECOVERY

    RESTORE LOG Imes

    FROM disk=‘e:123Imes_LOG

    _200804080300.TRN’

    NORECOVERY

    RESTORE LOG Imes

    FROM disk=‘e:123Imes_LOG

    _200804080400.TRN’

    WITH NORECOVERY

    RESTORE LOG Imes

    FROM disk=‘e:123Imes_LOG

    _200804080500.TRN’

    WITH NORECOVERY

    RESTORE LOG Imes

    FROM disk=‘e:123Imes_LOG

    _200804080600.TRN’

    WITH NORECOVERY

    RESTORE LOG Imes

    FROM disk=‘e:123Imes_LOG

    _200804080700.TRN’

    WITH NORECOVERY

    RESTORE LOG Imes

    FROM disk=‘e:123Imes_LOG

    _200804080800.TRN’

    WITH NORECOVERY

    RESTORE LOG Imes

    FROM disk=‘e:123Imes_LOG

    _200804080900.TRN’

    WITH NORECOVERY

    4. 还原最后一次事务日志后的日志备份。还原9∶00~9∶30生成的日志,该日志单独备份在新创建的备份设备中。

    5. 更改数据库状态。所有日志文件还原后,数据库的状态为“正在装载”,用户不能正常访问数据库,需将其设置为正常模式方可访问。至此,数据库恢复完成。经过验证,数据库丢失几条数据,基本没有对业务系统造成影响。网络管理员在日常维护数据库的过程中,建议经常校验数据库。模拟数据库恢复环境,测试恢复脚本,保证数据库恢复脚本的准确性以及恢复效率。在恢复数据库时,笔者建议在非生产环境中恢复。恢复完成后,完整备份数据库,然后将数据库恢复到生产环境中。
 


软件
前端设计
程序设计
Java相关