Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server в Linux
В этом руководстве вы узнаете, как настроить репликацию моментальных снимков SQL Server на Linux с двумя экземплярами SQL Server, используя Transact-SQL (T-SQL). Издатель и распространитель находятся на одной инстанции, а подписчик — на отдельной инстанции.
- Включение агентов репликации SQL Server в Linux
- Создание образца базы данных
- Настройка папки моментальных снимков для доступа со стороны агентов SQL Server
- Настройка распространителя
- Настройка издателя
- Настройка публикации и статей
- Настройка подписчика
- Выполнение заданий репликации
Настройку репликации можно полностью произвести с помощью хранимых процедур репликации.
Предварительные условия
Для работы с этим учебником необходимы указанные ниже компоненты.
два экземпляра SQL Server с последней версией SQL Server на Linux;
Средство для выдачи запросов T-SQL для настройки репликации, например sqlcmd или SQL Server Management Studio (SSMS)
См. статью "Использование SQL Server Management Studio в Windows для управления SQL Server на Linux".
Примечание.
Репликация SQL Server поддерживается в Linux в SQL Server 2017 (14.x) (CU 18) и более поздних версиях.
Подробные инструкции
Включите агенты репликации 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Создайте папку моментальных снимков, из которой будут производить чтение и в которую будут производить запись агенты 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 'hostname' command on in 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 distributor and create Distribution Database. -- In this example, our publisher and distributor is 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 DECLARE @snapshotdirectory AS NVARCHAR (500); SET @snapshotdirectory = N'/var/opt/mssql/data/ReplData/'; -- Log into distributor and create Distribution Database. -- In this example, our publisher and distributor is on the same host USE [distribution]; GO 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 distributor name. Use 'hostname' command on in 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 на издателе.
DECLARE @replicationdb AS SYSNAME; DECLARE @publisherlogin AS SYSNAME; DECLARE @publisherpassword AS SYSNAME; SET @replicationdb = N'Sales'; SET @publisherlogin = N'<Publisher login>'; SET @publisherpassword = N'<Publisher Password>'; USE [Sales]; GO 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;Создайте статьи из таблицы Sales.
Выполните следующие команды 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, @identityrangemanagementoption = N'manual', @destination_table = N'customer', @destination_owner = N'dbo', @vertical_partition = N'false';Настройте подписку. Выполните следующие команды T-SQL на издателе.
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>'; USE [Sales]; GO 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 snapshot of publications, for example EXECUTE dbo.sp_start_job N'PUBLISHER-PUBLICATION-SnapshotRepl-1'; GOЧтобы запустить задание, выполните задание репликации моментальных снимков.
USE msdb; GO --distribute the publication to subscriber, for example 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
- Настройка распространителя
- Настройка издателя
- Настройка публикации и статей
- Настройка подписчика
- Выполнение заданий репликации