Hi!请登陆

事务日志传送

2020-10-27 64 10/27

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 <Database_Name>
FROM DISK ='d:\PrimaryData\Database_name.trn' WITH RECOVERY

如果无法访问活动事务日志,那么可以使用下面的命令来恢复数据库.

RESTORE DATABASE <Database_Name> WITH RECOVERY;

下篇详细讲故障恢复.
如果主服务器数据库一直处于正在还原的状态.
可以使用:

RESTORE database   dbname with recovery

命令强制结束.

Tag:

相关推荐