传送事务日志

微软sql server2005 standby有两个解决方案,一是数据库镜像,而是传送事务日志。本文主要介绍传送事务日志需要注意的地方。生产环境的数据库原先的备份方式是,每天凌晨一个整备,每隔15分钟一个log备份。

第一步,主数据库上右击 任务 ,传送事务日志


第二步:
勾选将此数据库启用为日志传送配置中的数据库

注意:share为共享文件夹,本例将备份日志放到了辅助服务器上.
第三步:
点击 添加,按下图设置

注:temp1.bak为主数据库的最新完整备份文件,提前已将该备份拷入辅助数据库的share文件夹中.
第四步:
复制文件 必须输入备份所在地址

注:“在以下时间后删除复制的文件”的作业=复制作业,也就是本例中的LSCopy_temp1
第五步:
还原事务日志

注:选无恢复模式后,数据库一直处于还原状态,不能访问,无法验证数据的同步情况。
备用模式的好处就是可以在restore作业不执行的时候,执行select查询;需要注意的是,有查询连接辅助服务器时,restore会报错。所以尽量不要读取辅助数据库。
备用模式是通过产生一个tuf的文件来记录的。每进行一次restore,tuf文件就会recreate一次。
第六步:
作业执行几天后,出错啦!很多时候不是刚设置完成就暴露这个错误。
提示如下:
此备份集中的日志开始于 LSN 22000000007700001,该 LSN 太晚,无法应用到数据库。可以还原包含 LSN 22000000007600001 的较早的日志备份

原因:主数据库每15分钟的log备份和该功能的backup作业交替执行,乱了手脚。解决办法,主数据库的15分钟log备份是要不得了。这点似乎和oracle的redo、archive差远了。主数据的全备还是没问题的,可以继续保留而且全备很关键。

总结:
传送事务日志的原理
备份主数据库的log,将该log备份restore至辅助数据库,辅助数据库应为还原状态或者备用/只读模式。用T-sql表述如下:

 1restore database temp1
 2from disk='E:\Share\temp1bak'
 3with move 'temp1'to 'G:\data\temp1.mdf',
 4move'Part1'to 'G:\data\temp1_1.ndf',
 5move'Part2'to 'G:\data\temp1_2.ndf',
 6move'Part3'to 'G:\data\temp1_3.ndf',
 7move'trans_log'to 'G:\data\temp1_4.ndf',
 8move'temp1_log'to 'H:\Log\temp1_5.ldf',STANDBY='E:\UNDO\ROLLBACK_UNDO_temp1.BAK',replace;
 9
10
11
12
13restore log temp1
14from disk='F:\Share\temp1_backup_200807160115.trn'
15with move 'temp1'to 'G:\data\temp1.mdf',
16move'Part1'to 'G:\data\temp1_1.ndf',
17move'Part2'to 'G:\data\temp1_2.ndf',
18move'Part3'to 'G:\data\temp1_3.ndf',
19move'trans_log'to 'G:\data\temp1_4.ndf',
20move'temp1_log'to 'H:\Log\temp1_5.ldf',STANDBY='E:\UNDO\ROLLBACK_UNDO_temp1.BAK';

PS:正在还原状态的数据库无法drop,可执行

restore database temp1
go
drop database temp1

备用/只读状态的辅助数据库,复制中带了主数据库的发布。drop辅助数据库时提示数据库正应用于发布,无法删除。可执行

1alter database temp1 
2set OFFLINE
3go
4drop database temp1
5go

PS:如果是多台standby,那么首先停掉主上的日常log备份,再执行晚上的全备作业。将备份拷贝到多台辅助数据库机器上,使用上述代码恢复数据库的全备份至standby状态。配制主数据库,选择否,辅助数据库已经初始化。将主的备份放到主数据库的机器上,使用辅助数据库上的copy作业将主数据库上的备份拷贝到辅助数据库的机器上。
 

原文地址:https://www.cnblogs.com/shined/p/1244537.html