SQL Server数据库同步方案

serverA — server B ---- serverC
其中serverB可以同时访问server A 和server C ,但是server A 和 server C之间不能相互访问,现需要把server A 的数据同步到server C ,非实时。

在这里插入图片描述

此方案结合了bcp , sqlcmd工具在server B 部署脚本,从server A导出数据,导入到server C.

说明:此方案只针对部分表的非实时同步,另外还可以考虑使用sp_addlinkedserver,sp_addlinkedsrvlogin方式实现,但是在测试中发现一个十几万的表在写入到server C 的时候特别慢。故此测试此方案,十几万的数据1分钟左右完成。

Sync_db.bat

@echo off

echo --------------------------------------------------------------------
echo ----------正在同步生产数据库数据到镜像库,请勿关闭窗口----------------------
echo --------------------------------------------------------------------

set bcp="D:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\bcp.exe"
set sqlcmd="D:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\SQLCMD.EXE"

REM 格式化时间
set datevar=%date:~0,4%%date:~5,2%%date:~8,2%
set timevar=%time:~0,2%
set timevar=%timevar%%time:~3,2%%time:~6,2%
set fileA="D:\DMP\sqlserver\ZHOUDB\Bus_tab.txt"

REM 记录操作日志
set logfile_path="D:\scripts\sqlserver\logs"
set logfile="D:\scripts\sqlserver\logs\SyncZHOUDB_%datevar%%timevar%.log"

call :LOG > %logfile%
exit /B

:LOG
echo --------------------------------------------------------------
echo ---------------- 记录操作日志--------- -----------------------
echo --------------------------------------------------------------
set /a startS=%time:~6,2%
set /a startM=%time:~3,2%
echo Start_Time %time%

echo 1.从生产10.128.23.6导出数据
bcp ZHOUDB.dbo.Bus_tab out D:\DMP\sqlserver\ZHOUDB\Bus_tab.txt -c -t "," -r "\n"  -S"192.168.1.1,1433" -U"chakan" -P"chakan@123"

echo 2.清空镜像库10.128.103.78表数据否则出现唯一键冲突,并退出sqlcmd
sqlcmd -S tcp:10.128.103.78,1433 -d ZHOUDB_SS -U sa -P "Sjzt$db_2023" -i D:\scripts\sqlserver\ZHOUDB.sql

echo 3.导入数据 
bcp ZHOUDB_SS.dbo.Bus_tab in D:\DMP\sqlserver\ZHOUDB\Bus_tab.txt -c -t "," -r "\n"  -S"192.168.1.2,1433" -U"sa" -P"chakan@123"

echo 4.删除备份文件
del "%fileA%"

if %ERRORLEVEL% neq 0 (
    echo 删除操作执行失败,错误代码: %ERRORLEVEL%
    goto :end
)

if exist "%fileA%" (
    echo 文件删除失败: %fileA%
) else (
    echo 文件已成功删除: %fileA%
)

echo.
set /a endS=%time:~6,2%
set /a endM=%time:~3,2%
echo End_Time %time%
set /a diffS_=%endS%-%startS%
set /a diffM_=%endM%-%startM%
echo.
echo.
echo Cost_Time %diffM_% Min %diffS_% Second
echo.
echo.
:end
echo -------------------END----------------------

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐