SQLServer 事务日志传送

事务日志传送概述

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,执行完全备份

    
    
    
    
USE master; ALTER DATABASE test SET RECOVERY FULL ; GO BACKUP DATABASE test TO DISK = ' \\192.168.0.3\PrimaryData\test.bak ' WITH FORMAT; GO

如果上面一句话执行成功的话,这个应该没问题。之后的步骤就简单了。

3,开始执行日志传送

访问\\192.168.0.3\PrimaryData\ 可以看到刚才备份的文件。

然后在数据库上右键-属性-事务日志传送

设置备份文件夹,这里我都备份到了辅助服务器上。

SQLServer 事务日志传送_第1张图片

确定之后点击添加服务器,设置要连接的数据库。

SQLServer 事务日志传送_第2张图片

设置复制文件的位置,这里最好在辅助服务器上。可以很快访问到,省去了网络带来的延迟。

SQLServer 事务日志传送_第3张图片

这里的两种模式上文都有介绍,大家可以根据需要来选择。

SQLServer 事务日志传送_第4张图片

到此,主服务器上的配置就完成了。

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;

下篇详细讲故障恢复。

本文同步发表在我的个人博客:http://xiaogangblog.com/archives/375

你可能感兴趣的:(SQLServer 事务日志传送)