实现两个SQL Server同步的步骤

流程图

graph LR
A(开始) --> B(创建登陆名和用户)
B --> C(创建数据库备份)
C --> D(还原数据库备份到目标服务器)
D --> E(创建发布者)
E --> F(创建订阅者)
F --> G(创建分发器)
G --> H(启动分发器代理)
H --> I(添加订阅者)
I --> J(启动同步)
J --> K(同步完成)
K --> L(结束)

甘特图

gantt
title SQL Server同步甘特图
dateFormat  YYYY-MM-DD
section 创建登陆名和用户
创建登陆名和用户           :done, 2022-01-01, 1d

section 创建数据库备份
创建数据库备份           :done, 2022-01-02, 1d

section 还原数据库备份到目标服务器
还原数据库备份到目标服务器    :done, 2022-01-03, 1d

section 创建发布者
创建发布者              :done, 2022-01-04, 2d

section 创建订阅者
创建订阅者              :done, 2022-01-06, 2d

section 创建分发器
创建分发器              :done, 2022-01-08, 1d

section 启动分发器代理
启动分发器代理            :done, 2022-01-09, 1d

section 添加订阅者
添加订阅者              :done, 2022-01-10, 1d

section 启动同步
启动同步               :done, 2022-01-11, 1d

section 同步完成
同步完成               :done, 2022-01-12, 1d

section 结束
结束                 :done, 2022-01-13, 1d

步骤及代码示例

  1. 创建登陆名和用户

    -- 创建登陆名
    CREATE LOGIN [登录名] WITH PASSWORD=N'密码', DEFAULT_DATABASE=[数据库名], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
    GO
    
    -- 创建用户
    USE [数据库名]
    GO
    CREATE USER [用户名] FOR LOGIN [登录名] WITH DEFAULT_SCHEMA=[dbo]
    GO
    
  2. 创建数据库备份

    -- 创建数据库备份
    BACKUP DATABASE [数据库名] TO DISK = N'备份文件路径' WITH NOFORMAT, NOINIT, NAME = N'备份集名称', SKIP, NOREWIND, NOUNLOAD, STATS = 10
    GO
    
  3. 还原数据库备份到目标服务器

    -- 还原数据库备份到目标服务器
    RESTORE DATABASE [目标数据库名] FROM DISK = N'备份文件路径' WITH FILE = 1, MOVE N'逻辑数据库名' TO N'目标数据文件路径', NOUNLOAD, REPLACE, STATS = 10
    GO
    
  4. 创建发布者

    -- 创建发布者
    EXEC sp_adddistributor @distributor = N'发布者名称'
    GO
    
  5. 创建订阅者

    -- 创建订阅者
    USE [目标数据库名]
    GO
    EXEC sp_addsubscriber @subscriber = N'订阅者名称', @subscriber_db = N'目标数据库名'
    GO
    
  6. 创建分发器

    -- 创建分发器
    USE [发布者数据库名]
    GO
    EXEC sp_adddistributiondb @database = N'发布者数据库名', @data_folder = N'分发数据文件夹路径', @log_folder = N'分发日志文件夹路径', @backup_folder = N'分发备份文件夹路径', @publisher = N'发布者名称', @sync_mode = N'辅助', @distributor = N'发布者名称'
    GO
    
  7. 启动分发器代理

    -- 启动分发器代理
    USE [发布者数据库名]
    GO
    EXEC sp_adddistributor_agent @distributor = N'发布者名称', @job_login = NULL, @job_password = NULL, @from_publisher = 1, @to_distributor = 0, @from_distributor = 1, @to_publisher = 0
    GO
    
  8. 添加订阅者

    -- 添加