SQL Server的事务日志传送备份是仅次于镜像的高可靠性备份方案,可以达到分钟级的灾难恢复能力.其项目实施成本,又远小于镜像的投入,因此是一种非常实用的备份解决方案.前文介绍过SQLServer 镜像功能完全实现, 镜像是一种高性能的备份方案,但其局限性在于镜像的辅助服务器也就是镜像服务器只能 有一个,当我们考虑过个目标服务器的时候,镜像就满足不了我们的需求了,这时候日志传送可谓雪中送炭,日志传送也可以结合镜像来组合使用. 在选择镜像还是日志传送的时候我们应考虑: 需要多少个目标服务器? 如果只需要一个目标数据库,建议使用数据库镜像解决方案. 如果需要多个目标数据库,则需要使用日志传送(可以单独使用,也可以与数据库镜像一起使用).如果将这两种方法组合使用,就既能享有数据库镜像的好处,又能获得日志传送提供的多个目标数据库的支持. 如果需要延迟还原目标数据库的日志(通常是为了防止逻辑错误),请使用日志传送(可以单独使用,也可以与数据库镜像一起使用). 日志传送还可以和数据库复制一起使用. 故在事务日志传送中提供了No recovery mode和Standby mode,两者的介绍如下:
1.无恢复模式(No recovery mode):
既不前滚也不回滚未提交的事务,数据不可读.
2.备用模式(Standby mode):
在恢复日志期间回滚所有未提交的事务,并且将所有未提交的事务保存为一个单独的Transaction Undo File(TUF)文件,恢复过程通过该文件来维护事务的完整性,当恢复下一个事物的时候则恢复所有已提交的事务.Standby mode中的复选框勾选则当日志恢复的时候,断开所有用户的连接,如果有一个用户没有断开,则还原无法进行.
事务日志传送实现:
其实操作比较简单,但是会遇到稀奇古怪的问题.在这里也把问题总结下. 首先需要两个用来做日志传送的数据库.叫做主数据库和辅助数据库.当然还可以配置监视数据库. 主数据库IP: 192.168.0.2 辅助数据库IP:192.168.0.3 下面通过简单的几步就可以实现:
1,建立共享文件夹以及复制文件夹 建立好需要传送日志的数据库,并在辅助服务器上建一个共享文件夹叫做PrimaryData,用来传送备份文件. 设置好权限.保证主服务器可以访问,或者直接设置EveryOne都可访问.
这里设置不当会出现以下错误:
无法打开备份设备 '\\192.168.0.3\PrimaryData\test.bak'.出现操作系统错误 53(找不到网络路径.).
解决方法:
设置共享文件:
exec master..xp_cmdshell 'net use \\192.168.0.3\PrimaryData 密码 /user:用户名'
至于句话的意思大家可以去查下咯.执行成功后就可以将数据库备份到网络路径上了. 报错为:
1 系统发生1312错误
3 指定的登陆会话不存在.可能已被终止
解决方法:
exec master..xp_cmdshell 'net use \\192.168.0.3\PrimaryData 密码 /user:192.168.10.3\administrator'
2,执行完全备份
USEmaster;ALTERDATABASEtestSETRECOVERYFULL;GOBACKUPDATABASEtest TODISK='\\192.168.0.3\PrimaryData\test.bak'WITHFORMAT;GO
如果上面一句话执行成功的话,这个应该没问题.之后的步骤就简单了.
3,开始执行日志传送
访问\\192.168.0.3\\PrimaryData\ 可以看到刚才备份的文件. 然后在数据库上右键-属性-事务日志传送 设置备份文件夹,这里我都备份到了辅助服务器上. 确定之后点击添加服务器,设置要连接的数据库. 设置复制文件的位置,这里最好在辅助服务器上.可以很快访问到,省去了网络带来的延迟. 这里的两种模式上文都有介绍,大家可以根据需要来选择. 到此,主服务器上的配置就完成了.
4,辅助服务器上查看记录
如果以上步骤没问题的话,我们可以在辅助服务器上的PrimaryData 目录下看到trn后缀的文件. 可以在代理下 查看作业执行的历史记录. 如果你选择的是备用模式.我通过查看历史记录遇到了一个问题是 "因为数据库正在使用,所以无法获得对数据库的独占访问权" 网上有介绍说用sql语句来杀掉进程,不过这种方式不是长久之计.可以通过配置数据库的属性,在数据库属性的[选项]选项卡中,设置[限制访问]参数为"Single"即可. 使用无恢复模式不会出现这样的问题.
5,故障恢复
将主服务器上的日志传送停止,然后将最后的备份文件复制到辅助服务器上执行以下语句:
RESTORE LOG
FROM DISK ='d:\PrimaryData\Database_name.trn' WITH RECOVERY
如果无法访问活动事务日志,那么可以使用下面的命令来恢复数据库.
RESTORE DATABASE WITH RECOVERY;
下篇详细讲故障恢复. 如果主服务器数据库一直处于正在还原的状态. 可以使用:
RESTORE database dbname with recovery
命令强制结束.