ITPub博客

首页 > 数据库 > 数据库开发技术 > 尝试修改SQL Server的重做日志文件,使其按照修改的结果执行重做,结果失败

尝试修改SQL Server的重做日志文件,使其按照修改的结果执行重做,结果失败

原创 数据库开发技术 作者:lawzjf 时间:2009-07-14 10:56:08 0 删除 编辑

今天上午有时间完成自己一直未实施的一个想法,即修改SQL Server的重做日志,看是否能让SQL Server按照自己的修改执行重做操作,结果让人失望,大致原因应该是重做日志文件日志记录会有校验和之类的机制,修改后,SQL Server不认了。不过也算了却一桩心事。

大致过程如下:

执行数据库全库备份。
执行事务日志备份。
update表t中的一个列值,如把b=‘aaaa’,改为'bbbb'。
查看上述update产生的重做记录,记下其LSN号码。
根据LSN号码,计算其在日志文件中的位置,使用WinHex在重做日志文件中查找对应的日志记录,并把其中的bbbb对应的十六进制数据62626262改为65656565,即eeee。
执行事务日志尾部备份,从而备份上述修改过的日志内容。
执行全库恢复。
由第一次日志备份执行恢复。
由第二次日志日志备份执行恢复,结果报错如下:

已为数据库 'dbfull',文件 'dbfull' (位于文件 1 上)处理了 0 页。
已为数据库 'dbfull',文件 'dbfull_log' (位于文件 1 上)处理了 3 页。
消息 9004,级别 16,状态 3,服务器 APPLE,第 1 行
处理数据库 'dbfull' 的日志时出错。如果可能,请从备份还原。如果没有可用备份,可能需要重新生成日志。
消息 3013,级别 16,状态 1,服务器 APPLE,第 1 行
RESTORE LOG 正在异常终止。

2010-07-20补充:

只要把数据库设置为无数据页IO校验机制,上述实验即可成功,也就是说:数据库的数据页IO校验机制同时对数据文件和重做日志文件生效。

设置数据库无数据页校验机制的命令:

alter database db_name set page_verify none

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/37724/viewspace-1024115/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 几个问题
请登录后发表评论 登录
全部评论

注册时间:2008-01-18

  • 博文量
    279
  • 访问量
    990821