快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

Pop Rivett的SQL Server常见问题解答4:Pop可以进行日志传送

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

Pop Rivett从事原木运输

很多人来找我说:“伙计,您已经到位了,如何确保备用SQL Server始终与生产服务器保持同步?” 通常,我会疲倦地叹口气,并告诉他们,这项工作需要毕生的经验和天赋,需要花很长时间才能解释,但这一次我决定与您分享一种我一直认为有效的技术。

它基于日志传送 –一种非常标准的技术,用于保持两个数据库同步。本质上,一个生产数据库的备用副本处于“备用”模式,因此如果主数据库发生故障,可以相当快地切换它。

299-PopLogShips_001.jpg

图1:Pop尝试运送整个树结构

首先要做的是确保您的“活动”数据库正在使用“完全恢复”模型。接下来,通过还原完整备份,然后依次将所有后续增量日志应用于该副本,来创建“备用”克隆。那时两个数据库应该是相同的。(您始终可以使用SQL Compare和SQL Data Compare进行检查)。

然后,从主服务器备份日志后,会将它们按顺序还原到“备用”。这意味着由主服务器执行的所有事务随后将在备用数据库上执行,从而使两者保持同步。如果主服务器出现故障,则可以将备用服务器投入运行,尽管此过程必须是手动过程。

处理

如此处所示,该过程包括以下三个基本步骤:

  1. 在主服务器(svr1)上,使用备份过程s_BackupAllDatabases计划了有关数据库的备份作业,该备份过程先前在Pop Rivett Backs Up中进行了介绍。
  2. 在备用服务器上,过程s_nrSyncDir从主服务器上复制最新的完全备份和/或任何新的日志备份。
  3. 在备用服务器,所讨论的数据库(或多个)使用存储过程,恢复s_RestoreDatabase 先前所描述流行Rivett还原。它将还原完整备份,然后还原日志。

注意
本文的代码下载中提供了尝试此日志传送过程所需的所有脚本(请参见文章标题右侧的框中的“代码下载”链接)。

“备份”和“还原”存储过程对备份文件名的格式使用以下约定,以确保按正确的顺序使用正确的文件:

  • Databasename_Full_yyyymmdd_hhmmss.bak用于完整备份
  • 增量备份的数据库名称_Log_yyymmdd_hhmmss.bak

让我们详细介绍此过程。

在主服务器上…

1.创建一个名为“ Admin ” 的数据库

2.在管理数据库中,创建DatabaseBackup

您可以使用此表来控制应备份的数据库并设置备份文件的保留期限。

3.创建存储过程Admin..s_BackupAllDatabases

4.创建文件夹:

  • C:\ Backup \ Full \
  • C:\ Backup \ Log \

5.创建作业以备份数据库

一个。每天计划完整备份:

b。计划每15分钟进行一次日志备份:

— 编者注 — 必须在主服务器和备用服务器上都启用
xp_cmdshell。在测试期间,我只是使用SQL Server外围应用配置器工具(在“功能的外围应用配置器”下)启用了它,然后运行示例,然后再次手动禁用了它。但是,通常,您应该将权限分配给调度程序用户以启用它,运行作业然后禁用它。创建具有必要权限的用户后,可以从Enterprise Manager / SSMS(编辑作业步骤|高级选项卡|以用户身份运行)中指定与之一起运行任务的用户。

另一方面,请注意在第5步中的路径后面是否有“ \”。如果您错过了它们(如我第一次这样做),则该过程似乎可以“运行”,但.bak文件的名称错误。
— 最终编辑说明 —

在备用服务器上…

1.创建文件夹:

  • C:\ BackupCopy \ Full \
  • C:\ BackupCopy \ Log \
  • C:\ BackupCopy \ Log \ Archive \
  • C:\ sql \ Data \
  • C:\ sql \ Log \

2.在主服务器和备用服务器之间同步SQL Server登录ID,方法是编写来自主服务器的登录ID的脚本,然后在备用服务器上运行该脚本以创建登录ID。使用使用NT身份验证的登录ID更加容易。或者,如果您的备用服务器没有其他用途,请备份Master主服务器上的数据库并将其还原到备用服务器。

3.创建一个名为Admin的数据库

4.在管理数据库中,创建以下存储过程:

  • s_nrSyncDir
  • s_RestoreDatabase

5.创建一个作业以复制源服务器上的所有备份。每5分钟安排一次,但是应该经常设置同步。例如

6.将数据库的最新完整备份从c:\ BackupCopy \ Full \复制c:\ BackupCopy \ Log \

7.计划运行以下作业–或将其作为第二项任务添加到上述作业中。我建议创建一个用于复制完整备份的单独作业,并将其添加到日志文件副本中。

现在,它将删除数据库mydb(如果存在),还原完整备份(将数据和日志文件移动到请求的目录)并还原所有日志。请注意以下几点:

  • 数据库将“恢复”并准备应用其他日志。它将无法访问(“ restore”(恢复)将出现在其名称之后)。如果执行RESTORE DATABASE命令,则应使其联机。但是,如果执行此操作,则必须还原另一个完整数据库(该数据库将删除该数据库并重新创建),然后才能还原更多日志。或者,您可以还原到待机状态,这将使您能够以只读模式访问数据库-您将必须指定回滚文件来还原更多日志。
  • c:\BackupCopy\Log\Archive在完整数据库还原之前,将具有完整时间戳的时间戳记的所有日志移至\。
  • 恢复每个文件后,将其移动到c:\BackupCopy\Log\Archive\。因此,需要两个本地文件夹s_nrSyncDir

— 编者注 —
在步骤5 的@RemoteDir分配中,C$指的是管理员共享。我没有访问此权限,因此我只是在主服务器的C:\ Backup文件夹上创建了一个名为Backup的共享(通过在Computer Management Windows管理工具中右键单击Shares,然后选择Create New Share以启动该共享)。向导)。因此,对我而言,分配是:@RemoteDir =’\\ svr1 \ Backup \ Full \’。您可能需要svr1的标准路径(例如<servername>。<domainname> .com)。

仅出于测试目的,我将此文件夹的访问权限授予了Everyone。当然,通常,您仅会向运行nrSyncDir过程的进程授予必要的权限。

该定义#Files临时表,在规定s_RestoreDatabase,适用于SQL Server 2000的而是定义在SQL Server 2005已经改变如果您正在运行SQL 2005,您将需要更换该表的定义在s_RestoreDatabase.sql脚本,以及在Files.sql中
提供的脚本 – 最终 编辑者的注释 –

如果由于日志文件损坏或某人干扰了源数据库而导致日志传送失败,则必须按以下方式重新启动它:

  1. 停止还原作业。
  2. 将最新的完整备份复制到中c:\BackupCopy\Log\
  3. 恢复数据库(通过恢复来还原数据库mydb)–还原过程中确实应包括此内容。
  4. 重新启动还原作业。

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1922638