在 SQL Server 2019 中启用事务复制的可更新订阅
入门和注意事项
本文旨在复制 SQL Server 2019。 其中一个功能是启用“可续订订阅”。
默认情况下,在早期版本的 SQL Server 中启用此功能,但自 2017 起(可能)已禁用此功能。
此功能可能会在将来的 SQL Server 版本中删除。 除非升级现有环境,否则建议在新建环境中替换它,例如合并复制。
环境
使用两台服务器和一台 SQL 服务器。 Windows 服务器在安装后立即处于未设置的其他状态。
- 第一个(发布端)
-
- Windows Server 2019 Standard Edition
- SQL Server 2019 Developer Edition (Standard Edition 以上必須)
- SQL Server Management Studio 18.9.1
- 第二台(订户端)
-
- Windows Server 2019 Standard Edition
- SQL Server 2019 Express Edition
- SQL Server Management Studio 18.9.1
目的
更新了第一台服务器或第二台服务器上的表记录 确保彼此服务器上的表记录同步。
顺便说一下,一个发布端是好的,但订阅者可以有好几个。 此外,即使一台服务器有多个 SQL Server 实例,它也会正常工作。
安装 SQL 服务器
SQL 服务器安装不是此提示的主要部分,因此请省去详细信息。 仅列出与复制相关的内容。
安装发布端需要标准版或更高版本。 此提示将开发人员版安装为测试环境。
订阅者对快速版没有问题。 当然,其他版本也没关系,具体取决于数据库配置。
在“选择功能”下,选择“数据库引擎服务”和“SQL Server 复制”。 发布端和订阅服务器端都相同。
实例配置是发布端和订阅服务器端的默认值。 如果更改实例名称,则只是在后续服务器规范中指定实例名称。
在发布端,将“SQL Server 代理”设置为自动启动。 您可以稍后更改此设置。
此提示使用 SQL Server sa 帐户对复制进行身份验证。 因此,请启用 SQL Server 身份验证。 如果不想在安全方面使用 sa 帐户,请将 SQL Server 身份验证替换为 Windows 身份验证或其他帐户,如下所述。
使此设置在两台服务器上都相同。
SQL Server Management Studio 的安装
安装下载的 SQL Server 管理工作室。 安装屏幕将仅安装,因此将省略说明。
如果系统提示您安装后重新启动,请重新启动 Windows。 此外,如果 Windows 更新中有修补程序,请安装它。
在发布端创建数据库和表
在发布端创建表时,订阅服务器会自动复制表和记录。
我省略了细节,因为创建方法与常规过程相同。
在 SQL 服务器管理工作室中,创建名为“发布数据库”的数据库。
创建名为“用户”的表并按如下方式注册列: 只要确保记录同步,就可以对表的名称、数量和列内容进行任何操作。 但是,只需要主键。
您已经添加了一些记录,以确保在创建复制后同步记录。
设置远程连接
将数据库设置为可远程访问彼此的服务器。 有关详细信息,请参阅下面的提示。
文件夹权限设置
在发布服务器上打开以下文件夹的属性: 文件夹的路径取决于 SQL Server 版本和实例名称。
- C:\Program Files\Microsoft SQL Server\MSSQL15. MSSQLSERVER\MSSQL\ReplData
从“安全”选项卡添加“服务”帐户并将其设置为“完全控制”。
配置分发
这一次,您将在与发布相同的服务器上创建分发。
启动 SQL 服务器管理工作室,右键单击“复制”,然后选择“配置分发”。
单击“下一步”。
选中“<使自己的服务器>成为您自己的分发服务器”。
然后,单击“下一步”以完成它。
创建出版物
我最初从向导创建它,如下图所示, 在 SQL Server 2019 中,从向导创建记录不会启用“可更新订阅”,并且无法在表之间同步记录。
因此,我们将使用 T-SQL 创建发布。
下面是用于使用 SQL Server 身份验证创建发布的 SQL。 请根据您的设置更改密码。
-- トランザクションパブリケーションを追加するための宣言
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'パブリケーションDB';
SET @publication = N'パブリケーション';
SET @login = 'sa';
SET @password = 'saパスワード';
USE [パブリケーションDB]
-- パブリケーションデータベースでトランザクションレプリケーションを有効にする。
EXEC sp_replicationdboption
@dbname=@publicationDB,
@optname=N'publish',
@value = N'true';
-- sp_addlogreader_agent を実行して、エージェントジョブを作成します。
EXEC sp_addlogreader_agent
@publisher_login = @login,
@publisher_password = @password,
@publisher_security_mode = 0;
-- 即時更新、キュー更新、およびプルサブスクリプションをサポートするトランザクションパブリケーションを作成します。
EXEC sp_addpublication
@publication = @publication,
@status = N'active',
@allow_sync_tran = N'true',
@allow_queued_tran = N'true',
@allow_pull = N'true',
@independent_agent = N'true',
-- 関連するデフォルトのプロパティを明示的に宣言する
@conflict_policy = N'pub wins';
-- デフォルトのスケジュールを使用して、パブリケーションの新しいスナップショットジョブを作成します。
EXEC sp_addpublication_snapshot
@publication = @publication,
@publisher_login = @login,
@publisher_password = @password,
@publisher_security_mode = 0;
GO
要进行 Windows 身份验证,请将“sp_addlogreader_agent”和“sp_addpublication_snapshot”更改为:
SQL Server 身份验证
@publisher_login = @login,
@publisher_password = @password,
@publisher_security_mode = 0;
Windows 身份验证
@job_login = @login,
@job_password = @password,
@publisher_security_mode = 1;
成功创建后,将显示以下信息:
此外,请打开已创建的发布的属性,并确保启用了“可更新订阅”。
指定文章
如果最初在向导中创建它,则同时指定文章, 由于上述脚本没有文章处理,因此请从属性中指定它。
从左侧菜单中选择“文章”,选中要同步的表,然后单击“确定”按钮。
“msrepl_tran_version”将添加到要同步的表的列中,同时添加表触发器。
创建订阅
右键单击刚刚创建的发布,然后选择“新建订阅”。
单击“下一步”。
选择您创建的发布。
选中“在分发服务器<服务器名称>运行所有代理” 。
单击“添加 SQL Server 订阅服务器”按钮。
指定要注册为订阅服务器的服务器(+ 实例名称)。
如果没有订阅服务器数据库,请创建一个新数据库。 如果已存在,则显示所选内容。
指定数据库后,单击“下一步”。
如果您有多个订阅者,则可以在此处注册任意数量的订阅者。
单击“...”按钮。
现在,代理运行是 sa 帐户,但请根据您的环境进行设置。
选择“连续运行”。
“可续订订阅”设置应与操作匹配。
如果“同时提交更改”,则会立即同步,但所有服务器都必须运行。
“将更改排队,如果可能,提交”会在运行时提交,即使服务器未运行也是如此, 但是,同步计时很慢。
选中“使用预定义的链接服务器或远程服务器”。
选择“立即”。
单击“下一步”。
单击“完成”按钮。
如果没有错误,请关闭它。
几分钟后,您可以看到数据库是在订阅服务器上创建的,并且表也已创建。
您可以验证记录是否也同步。
如果一段时间后未同步,请执行以下操作:
右键单击创建的订阅,然后选择“重新初始化”。
选中“使用新快照”,然后单击“设置为重新初始化”按钮。
如果出现错误,请重试。
检查操作
尝试添加或更改发布端的表。
等待几秒钟,您将看到它与订阅者同步。
现在,尝试更改订阅服务器上的记录。
您可以验证发布端是否已同步。
如果有多个订阅服务器,请确保订阅服务器之间同步。