今天上午有时间完成自己一直未实施的一个想法,即修改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博客 ” ,链接:http://blog.itpub.net/37724/viewspace-1024115/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/37724/viewspace-1024115/