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

如何按计划自动同步两个SQL Server数据库中的数据

在线QQ客服:1922638

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

挑战

通常需要一种在SQL数据库之间实时同步数据的方式,例如,当某个数据在一个位置(数据库)中更改/添加以与另一个数据库同步时,就需要一种同步方法。需要按计划自动检测更改,并自动与另一个数据库同步。此过程应完全自动化,并且完全无人值守。

ApexSQL Data Diff是用于比较SQL数据库,数据库备份,脚本文件夹和源代码控制项目之间的数据的第三方工具。可以安排它在特定的时间/日期运行,以使数据库几乎实时同步。例如,让我们安排它每15分钟运行一次比较,如果数据库之间存在一些差异,则将执行同步。这样,我们几乎可以实时保持数据库同步

为了设置此过程,请按照下列步骤操作:

  1. 运行ApexSQL数据差异
  2. 在“ 新建项目”窗口的“ 数据源”选项卡下,设置源数据库和目标数据库:

    如何按计划自动同步两个SQL Server数据库中的数据

  3. 如果需要设置特定的比较或同步选项,请转到“ 选项”选项
  4. 单击右下角的“ 比较”按钮以启动比较过程
  5. 比较过程完成后,比较结果将显示在“ 结果”网格中:

    如何按计划自动同步两个SQL Server数据库中的数据

  6. 检查所有具有相应行的对象,然后单击“ 主页”选项卡中的“ 保存”按钮:

    如何按计划自动同步两个SQL Server数据库中的数据

    保存的项目文件包含所有选定的选项以及将用于计划数据同步的对象/行。

  7. 保存项目后,单击“ 主页”选项卡上的“ 同步”按钮以启动“ 同步”向导
  8. 选择立即同步操作,以便直接在目标数据库(中央)上执行同步:

    如何按计划自动同步两个SQL Server数据库中的数据

  9. 在“ 同步”向导的最后一步中,单击右下角的“ 同步”按钮。
  10. 同步过程完成后,将显示“ 结果”窗口,其中包含是否成功同步的信息:

    如何按计划自动同步两个SQL Server数据库中的数据

流程自动化

现在,当使用ApexSQL Data Diff执行初始同步并保存了项目文件时,我们可以通过创建PowerShell脚本轻松地自动化该过程。

设置和整理

首先是创建一个函数,该函数将检查Output文件夹是否存在,将在其中保存带有数据标记的输出摘要。我们希望确保在每次同步时都可以轻松找到(日期标记)应用程序日志,以防万一我们需要解决以下问题:

#检查Outputs文件夹是否存在,如果未创建则创建它,
并返回路径
函数 CheckAndCreateFolder ($ rootFolder , [switch] $ Outputs )
{ 
    $ location  =  $ rootFolder

    #根据使用的开关设置位置,
    如果(($ Outputs  -eq  $ true )
    { 
        $ location  + =  “ \ Outputs ” 
    } 
    #如果不存在则创建文件夹,
    如果(-not  (Test-Path  $ location ))
    {  mkdir  $ location  -Force :$ true  -Confirm :$ false  |  空出 }

    返回 $ location 
}

接下来,让我们为数据标记的输出摘要定义一个根文件夹和位置:

#root整个过程的文件夹
$ rootFolder  =  “ DataSync ”

输出文件的
#location $ outputsLocation    =  CheckAndCreateFolder  $ rootFolder  -Outputs

变量和开关

在本节中,将定义应用程序位置以及数据戳变量以及包含已保存的项目文件的应用程序参数变量,/ sync开关(用于在目标数据库上直接同步),/ rece开关以返回102 –未检测到差异(数据源相等时),并且带有日期戳的输出摘要:

#提供工具的位置,定义日期戳变量和工具的参数
$ toolLocation    =  “ ApexSQLDataDiff ” 
$ dateStamp  =  (Get-Date  -Format  “ MMddyyyy_HHMMss ” ) 
$ toolParameters  =  “ / pr:”“ MyProject.axdd ”“ / out:” “ $ outputsLocation \ DataOutput_ $ dateStamp .txt ”“ / sync / v / f / rece ” 

执行

PowerShell脚本的下一部分将从其位置调用ApexSQL Data Diff及其参数,并定义了返回代码的变量:

#启动数据源的比较
(Invoke-Expression  (“ &`” “  +  $ toolLocation  + ” `“ ” + $ toolParameters ))$ returnCode = $ LASTEXITCODE  
  

最后一部分是定义三个潜在结果:

  1. 存在差异,例如返回码0 –成功
  2. 没有差异,例如返回码102 –未检测到差异
  3. 发生错误,将打开输出摘要此处检查潜在的返回错误代码列表
#将输出写入文件
“ $ outputsLocation \ DataOutput_ $ dateStamp .txt ”


#differences检测
如果($ RETURNCODE  -eq  0 )
{ 
“ 的r `Ñ $ LASTEXITCODE -更改已成功同步” >>   

} 
其他
{ 
    检测#NO变化
    ,如果($ RETURNCODE  -ne  102 )
    { 
“ 的r `ñ $ LASTEXITCODE -没有检测到更改作业已中止。” >> } 发生#an错误否则{ “ 的r `ñ $ LASTEXITCODE -发生错误“ >>   
    
    
    
    
       
	
    #opens输出文件的应用程序执行的误差到底
    调用-项目 “ $ outputsLocation \ DataOutput_ $邮票.TXT ” 
    }

}

排程

现在,该作业已实现自动化,因此可以采用四种不同方式之一进行调度。从有关计划ApexSQL工具的方法的文章中了解更多信息。

查看结果

一旦一切正常运行,就可以随时查看输出摘要。在此示例中,输出文件由此处定义的$ outputsLocation变量定义并且输出文件将保存到$ rootFolder \ $ outputsLocation,例如,在这种情况下为DataSync \ Outputs

如何按计划自动同步两个SQL Server数据库中的数据

如果发生错误,例如,如果省略了/ f开关以及同步脚本路径和名称,则输出摘要中将显示以下内容:

连接:
        正在载入专案
        连接到[(本地)]。[工作区]
        连接成功
        正在连接到[(本地)]。[中央]
        连接成功
文件sync.sql已经存在。使用“ / f”开关覆盖它

ApexSQL Data Diff返回代码:16

快速查看该链接上的文章可提供有关代表IO错误返回错误代码16的信息,这意味着应用程序尝试写入文件(在这种情况下为同步脚本),但该文件已经存在并且为了覆盖它,需要使用/ f开关。

相关推荐

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