Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server в Linux
В этом руководстве вы узнаете, как настроить репликацию моментальных снимков SQL Server на Linux с двумя экземплярами SQL Server, используя Transact-SQL (T-SQL). Издатель и распространитель находятся на одной инстанции, а подписчик — на отдельной инстанции.
- Включение агентов репликации SQL Server в Linux
- Создание образца базы данных
- Настройка папки моментальных снимков для доступа со стороны агентов SQL Server
- Настройка распространителя
- Настройка издателя
- Настройте публикацию и статьи
- Настройте абонента
- Выполнение заданий репликации
Вы можете настроить все компоненты репликации с помощью процедур, сохранённых в репликации.
Prerequisites
Чтобы завершить работу с этим руководством, вам потребуется:
два экземпляра SQL Server с последней версией SQL Server на Linux;
Средство для выдачи запросов T-SQL для настройки репликации, например sqlcmd или SQL Server Management Studio (SSMS)
См. статью "Использование SQL Server Management Studio в Windows для управления SQL Server на Linux".
Note
SQL Server Replication поддерживается на Linux в версиях SQL Server 2017 (14.x) CU 18 и позднее. Для получения дополнительной информации см. информацию о релизе SQL Server на Linux.
Подробные шаги
Включите агенты репликации SQL Server на Linux. На обоих хост-компьютерах выполните приведенные ниже команды в терминале.
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true sudo systemctl restart mssql-serverСоздайте образцы базы данных и таблицы. На сервере публикации создайте образец базы данных и таблицу, которые будут служить статьями для публикации.
CREATE DATABASE Sales; GO USE [Sales]; GO CREATE TABLE Customer ( [CustomerID] INT NOT NULL, [SalesAmount] DECIMAL NOT NULL ); GO INSERT INTO Customer (CustomerID, SalesAmount) VALUES (1, 100), (2, 200), (3, 300); GOВ другом экземпляре SQL Server (подписчике) создайте базу данных для получения статей.
CREATE DATABASE Sales; GOНа дистрибьюторе создайте папку snapshot для агентов SQL Server для чтения и записи, а также предоставьте пользователю доступ
mssql:sudo mkdir /var/opt/mssql/data/ReplData/ sudo chown mssql /var/opt/mssql/data/ReplData/ sudo chgrp mssql /var/opt/mssql/data/ReplData/Настройте распределитель. В этом примере издатель также является распространителем. Выполните приведенные ниже команды в издателе, чтобы также настроить экземпляр для распространения.
DECLARE @distributor AS SYSNAME; DECLARE @distributorlogin AS SYSNAME; DECLARE @distributorpassword AS SYSNAME; -- Specify the distributor name. Use the 'hostname' command in the terminal to find the hostname. SET @distributor = N'<distributor instance name>'; -- In this example, it will be the name of the publisher SET @distributorlogin = N'<distributor login>'; SET @distributorpassword = N'<distributor password>'; -- Specify the distribution database. USE master; EXECUTE sp_adddistributor @distributor = @distributor; -- this should be the hostname -- Log into the distributor and create the distribution database. -- In this example, the publisher and distributor are on the same host. EXECUTE sp_adddistributiondb @database = N'distribution', @log_file_size = 2, @deletebatchsize_xact = 5000, @deletebatchsize_cmd = 2000, @security_mode = 0, @login = @distributorlogin, @password = @distributorpassword; GO -- Log into the distributor and configure the snapshot directory. -- In this example, the publisher and distributor are on the same host. USE [distribution]; GO DECLARE @snapshotdirectory AS NVARCHAR (500) = N'/var/opt/mssql/data/ReplData/'; IF (NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'UIProperties' AND type = 'U')) CREATE TABLE UIProperties(id INT); IF (EXISTS (SELECT * FROM ::fn_listextendedproperty ('SnapshotFolder', 'user', 'dbo', 'table', 'UIProperties', NULL, NULL))) EXECUTE sp_updateextendedproperty N'SnapshotFolder', @snapshotdirectory, 'user', dbo, 'table', 'UIProperties'; ELSE EXECUTE sp_addextendedproperty N'SnapshotFolder', @snapshotdirectory, 'user', dbo, 'table', 'UIProperties'; GOНастройте издателя. Выполните следующие команды T-SQL на издателе.
DECLARE @publisher AS SYSNAME; DECLARE @distributorlogin AS SYSNAME; DECLARE @distributorpassword AS SYSNAME; -- Specify the publisher name. Use the 'hostname' command in the terminal to find the hostname. SET @publisher = N'<instance name>'; SET @distributorlogin = N'<distributor login>'; SET @distributorpassword = N'<distributor password>'; -- Specify the distribution database. -- Adding the distribution publishers EXECUTE sp_adddistpublisher @publisher = @publisher, @distribution_db = N'distribution', @security_mode = 0, @login = @distributorlogin, @password = @distributorpassword, @working_directory = N'/var/opt/mssql/data/ReplData', @trusted = N'false', @thirdparty_flag = 0, @publisher_type = N'MSSQLSERVER'; GOНастройте работу агента публикации и снимков. Выполните следующие команды T-SQL на издателе.
USE [Sales]; GO DECLARE @publisherlogin AS SYSNAME; DECLARE @publisherpassword AS SYSNAME; SET @publisherlogin = N'<publisher login>'; SET @publisherpassword = N'<publisher password>'; EXECUTE sp_replicationdboption @dbname = N'Sales', @optname = N'publish', @value = N'true'; -- Add the snapshot publication EXECUTE sp_addpublication @publication = N'SnapshotRepl', @description = N'Snapshot publication of database ''Sales'' from Publisher ''<PUBLISHER HOSTNAME>''.', @retention = 0, @allow_push = N'true', @repl_freq = N'snapshot', @status = N'active', @independent_agent = N'true'; EXECUTE sp_addpublication_snapshot @publication = N'SnapshotRepl', @frequency_type = 1, @frequency_interval = 1, @frequency_relative_interval = 1, @frequency_recurrence_factor = 0, @frequency_subday = 8, @frequency_subday_interval = 1, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @publisher_security_mode = 0, @publisher_login = @publisherlogin, @publisher_password = @publisherpassword;Создайте
Customerстатью изCustomerтаблицы.Выполните следующие команды T-SQL на издателе.
USE [Sales]; GO EXECUTE sp_addarticle @publication = N'SnapshotRepl', @article = N'Customer', @source_owner = N'dbo', @source_object = N'Customer', @type = N'logbased', @description = NULL, @creation_script = NULL, @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509D, @destination_table = N'Customer', @destination_owner = N'dbo', @identityrangemanagementoption = N'manual', @vertical_partition = N'false';Настройте подписку. Выполните следующие команды T-SQL на издателе.
USE [Sales]; GO DECLARE @subscriber AS SYSNAME; DECLARE @subscriber_db AS SYSNAME; DECLARE @subscriberLogin AS SYSNAME; DECLARE @subscriberPassword AS SYSNAME; SET @subscriber = N'<instance name>'; -- for example, MSSQLSERVER SET @subscriber_db = N'Sales'; SET @subscriberLogin = N'<subscriber login>'; SET @subscriberPassword = N'<subscriber password>'; EXECUTE sp_addsubscription @publication = N'SnapshotRepl', @subscriber = @subscriber, @destination_db = @subscriber_db, @subscription_type = N'Push', @sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0; EXECUTE sp_addpushsubscription_agent @publication = N'SnapshotRepl', @subscriber = @subscriber, @subscriber_db = @subscriber_db, @subscriber_security_mode = 0, @subscriber_login = @subscriberLogin, @subscriber_password = @subscriberPassword, @frequency_type = 1, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 0, @active_start_date = 0, @active_end_date = 19950101; GOВыполните задания агента репликации. Выполните следующий запрос, чтобы получить список заданий:
SELECT name, date_modified FROM msdb.dbo.sysjobs ORDER BY date_modified DESC;Запустите задание агента создания снимка, чтобы создать снимок:
USE msdb; GO -- Generate the publication snapshot, for example. EXECUTE dbo.sp_start_job N'PUBLISHER-PUBLICATION-SnapshotRepl-1'; GOНачните работу агента по распространению публикации среди подписчика:
USE msdb; GO -- Distribute the publication to the subscriber. EXECUTE dbo.sp_start_job N'DISTRIBUTOR-PUBLICATION-SnapshotRepl-SUBSCRIBER'; GOПодключитесь к абоненту и запросите реплицированные данные.
На подписчике проверьте, работает ли репликация, выполнив следующий запрос:
SELECT * FROM [Sales].[dbo].[Customer];
В этом руководстве вы настроили репликацию моментальных снимков SQL Server для двух экземпляров на Linux с помощью T-SQL.
- Включение агентов репликации SQL Server в Linux
- Создание образца базы данных
- Настройка папки моментальных снимков для доступа со стороны агентов SQL Server
- Настройка распространителя
- Настройка издателя
- Настройте публикацию и статьи
- Настройте абонента
- Выполнение заданий репликации