带日志传送的SQL Server灾难恢复 译文
SQL Server
本文将详细和您讨论如何通过配置,实现带日志传送的SQL Server灾难恢复,进而提高数据库的高可用性。

【51CTO.com快译】目前,业界有着许多种灾难恢复(disaster recovery,DR)技术,其中包括:数据库镜像、集群、复制等解决方案。而日志传送方式是一种更简单、更易于配置与维护的方法。本文将和您讨论带有日志传送的SQL Server灾难恢复步骤。在讨论具体配置之前,让我们先来了解一下日志传送的基本概念。

带有日志传送的灾难恢复方案

日志传送主要通过维护备用服务器上的备份,并按需接替主服务器,以提高数据库的整体可用性。也就是说,在主数据库由于受灾而不可用时,您可以通过手动的方式,将备用数据库连上线,继续提供原有的服务。

为了给数据库配置日志传送,SQL Server会创建如下三个代理作业,来自动执行备份(backup)、复制(copy)和还原(restore)操作:

  • 第一个作业工作在主实例上。它会在主数据库上去备份事务日志(transaction log)。
  • 第二个作业工作在备用服务器上。它将日志备份从主服务器复制到备用服务器。
  • 第三个作业也工作在备用服务器上。它不但能够恢复日志的备份,而且可以替换备用数据库上的日志条目。

虽然我们配置日志传送并不难,但在实现之前,需要注意如下方面:

  • 在数据库级别进行保护:如果您只希望在灾难发生时,仅保护少量的数据库,那么该级别是足够的。不过,如果您想要在SQL Server实例级别,保存大量的数据库,那么单纯的日志传送方案是远远不够的。
  • 需要在备用服务器上手​​动启动故障转移:光靠单一的日志传送配置,我们是不可能以自动的方式,从主服务器故障转移到备用服务器上的。此时,您需要以手动的方式,将备用数据库连上线。
  • 需要手动配置SQL登录:SQL的登录是不会自动从主服务器传送到备用服务器的。您可以将登录名和密码从主服务器实例传输到备用服务器实例,以实现登录名的同步(具体请参见--https://docs.microsoft.com/en-US/troubleshoot/sql/security/transfer-logins-passwords-between-instances)。注意:您往往还需要在备用服务器上手动创建各种维护计划、链接服务器和SSIS(SQL Server Integration Services)包。
  • 数据丢失的风险:通常,在主数据库不可用时,我们只能恢复最后一次事务备份的数据。也就是说,在该事务日志的备份被发往备用服务器之后的任何事务,都将由于缺少备份,而导致数据的丢失。例如:主服务器在上午9点发生故障。如果复制到备用服务器实例B的最后一次备份是在上午8:45进行的,那么上午8:45到9点之间的数据将会丢失。
  • 反向日志传送:当您需要调换服务器的角色,而非重做完整的数据库备份时,这将非常实用。例如,您拥有一个体量很大的备份,并且需要将数据从备用服务器传送到位于远端的主服务器,那么复制完整的备份则可能需要相当长的时间。

如何配置和使用日志传送?

通常,配置日志传送的过程可以被分为两个不同的步骤:

步骤 1 – 在备用服务器上初始化数据库

假设我们在主服务器实例中有两个数据库。我们需要把TestDB1日志传送到原本不带任何数据库的备用服务器上。值得注意的是,为了设置日志传送,数据库需要处于FULL或BULK-LOGGED恢复模式。如果是在SIMPLE恢复模型的情况下,日志传送将因为无法使用事务日志的备份而失败。

  • 首先,我们需要进行一次完整的数据库备份和事务日志的备份。您可以运行如下T-SQL查询,来创建“完整”的和“事务日志”类型的备份:
  1. backup database TestDB1 to disk = ‘c:\backup\TestDB1.bak’ 
  2. backup log TestDB1 to disk = ‘c:\backup\TestDB1.bak’ 

  • 接着,是在备用服务器上进行备份恢复。

  • 在“恢复数据库”界面上,您可以选择“设备”作为数据源,然后单击其图标。

  • 在“选择备份设备”的对话框中,单击“添加”。

  • 选择可恢复的备份文件,然后单击“确定”。

  • 针对TestDB1备份的恢复,将会被执行。

  • 单击“选择页面”下的文件,以便更改各个物理数据库文件的位置。

  • 接着,单击左侧的“选项”。在“选项”页面上,从“恢复状态”下拉列表中选择RESTORE WITH STANDBY。值得注意的是,我们通过选择“RESTORE WITH STANDBY”选项,来确保数据库的只读性。您虽然可以选择“RESTORE WITH NORECOVERY”选项,但是会使得数据库无法被访问到。

  • 选择好上面提到的恢复状态之后,请单击“确定”,以保证数据库能够成功完成恢复。这会让“TestDB1”数据库以“Standby(只读)”的模式,在备用服务器上恢复实例。

至此,数据库已经在备用服务器上完成了初始化。

步骤 2 – 启用主数据库

  • 请右键单击主服务器实例中的“TestDB1”,然后单击“属性”。

  • 请选择“在日志传送配置中,将此作为主数据库启用”的选项。

注意:在默认情况下,事务日志每隔15分钟备份一次。不过,您的事务日志有时会变得太大,而无法在已定义的时间限制内,完成复制和恢复。对此,您需要安排一次针对日志的备份。您可以单击“备份设置”,然后在“事务日志备份设置”的界面上,指定保存备份文件的位置。接下来,请单击“计划”,并将每日的备份频率更改为每1-2分钟运行一次。

  • 请单击“添加”,以设置备用数据库。此时,系统将提示您连接到备用服务器的实例上。

  • 正如步骤 1中所做的设置,我们将在“备用数据库设置”的界面上,选择“否,备用数据库已初始化”的选项。

  • 现在,让我们继续复制文件。在此,请输入备用服务器的备份文件夹的位置,然后设置备份的频率,并单击“确定”。

  • 在“恢复事务日志”的界面上,请将数据库的状态选择为“备用模式”,并选中“恢复备份时,断开数据库中的用户”。在设定好备份的时间间隔后,请单击“确定”。

  • 为了添加备用服务器的实例和数据库,请通过单击“确定”来创建SQL Server的各种代理作业。在单击主“SQL Server代理”后,您可以查看到已创建的备份事务日志的作业。而在备用“SQL Server 代理”中,您可以查看到新创建的两个作业。其中,一个是将事务日志备份从主数据库复制到备用数据库,另一个是将该事务日志还原到备用数据库上。

  • 至此,带日志传送的灾难恢复方案已配置完毕。据此,一旦主数据库出现故障,您可以立即将备用数据库连上线。同时,您可以通过运行如下查询,来确认备用数据库退出了待机(standby)的模式:
  1. Select * from Products 
  2.  
  3. RESTORE DATABASE TestDB1 WITH RECOVERY 

  • 通过刷新数据库,您将查看到备用服务器中的“TestDB1”数据库已上线。

小结

日志传送是一种针对SQL Server的经济、高效且简单的灾难恢复解决方案。当然,它只是在数据库级别执行灾难恢复的理想选择。而对于服务器实例上的灾难恢复,我们可以使用诸如:数据库镜像、故障转移群集等其他灾难恢复技术。此外,配置日志传送也可能会导致数据的丢失。因此若要从损坏的SQL数据库中,恢复已删除或无法访问的数据,请使用专业的SQL恢复工具。

原文标题:SQL Server Disaster Recovery with Log Shipping,作者:Daniel Calbimonte

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

责任编辑:华轩 来源: 51CTO

编辑推荐

SQL编程之高级查询及注意事项SQL Server性能调优方法论与常用工具【SQL Server 2016动态数据屏蔽入门】Azure SQL 数据库V12版的动态数据屏蔽【SQL Server 2016动态数据屏蔽入门】定义屏蔽巧用这19条MySQL优化,效率至少提高3倍
我收藏的内容
点赞
收藏