Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server unter Linux
In diesem Tutorial konfigurieren Sie die Replikation von SQL Server-Momentaufnahmen unter Linux mit zwei Instanzen von SQL Server mithilfe von Transact-SQL (T-SQL). Der Herausgeber und der Verteiler sind auf derselben Instanz, und der Abonnent befindet sich auf einer separaten Instanz.
- Aktivieren von SQL Server-Replikations-Agents unter Linux
- Erstellen einer Beispieldatenbank
- Konfigurieren des Momentaufnahmeordners für den Zugriff durch SQL Server-Agents
- Konfigurieren des Verteilers
- Konfigurieren des Herausgebers
- Konfigurieren von Veröffentlichungen und Artikeln
- Konfigurieren des Abonnenten
- Ausführen der Replikationsaufträge
Alle Replikationskonfigurationen können mit gespeicherten Replikationsprozeduren konfiguriert werden.
Voraussetzungen
Um die Schritte dieses Tutorials abzuschließen, benötigen Sie Folgendes:
Zwei Instanzen von SQL Server mit der aktuellen Version von SQL Server für Linux
Ein Tool zum Ausgeben von T-SQL-Abfragen zum Einrichten der Replikation, z. B. sqlcmd oder SQL Server Management Studio (SSMS)
Siehe Verwenden von SQL Server Management Studio unter Windows zum Verwalten von SQL Server für Linux.
Hinweis
SQL Server-Replikation wird unter Linux in SQL Server 2017 (14.x) (CU 18) und höheren Versionen unterstützt.
Ausführliche Schritte
Aktivieren Sie SQL Server-Replikations-Agents unter Linux. Führen Sie auf beiden Hostcomputern die folgenden Befehle im Terminal aus.
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true sudo systemctl restart mssql-serverErstellen Sie die Beispieldatenbank und -tabelle. Erstellen Sie auf dem Herausgeber eine Beispieldatenbank und -tabelle, die als Artikel für eine Veröffentlichung fungieren.
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); GOErstellen Sie auf der anderen SQL Server-Instanz, dem Abonnenten, die Datenbank, um die Artikel zu empfangen.
CREATE DATABASE Sales; GOErstellen Sie den Momentaufnahmeordner für SQL Server-Agents zum Lesen/Schreiben. Erstellen Sie auf dem Verteiler den Momentaufnahmeordner, und gewähren Sie dem Benutzer „mssql“ Zugriff.
sudo mkdir /var/opt/mssql/data/ReplData/ sudo chown mssql /var/opt/mssql/data/ReplData/ sudo chgrp mssql /var/opt/mssql/data/ReplData/Konfigurieren Sie den Verteiler. In diesem Beispiel ist der Herausgeber ebenfalls der Verteiler. Führen Sie die folgenden Befehle auf dem Verleger aus, um die Instanz ebenfalls für die Verteilung zu konfigurieren.
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'; GOKonfigurieren Sie den Verleger. Führen Sie die folgenden T-SQL-Befehle auf dem Herausgeber aus.
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'; GOKonfigurieren Sie Veröffentlichungsaufträge. Führen Sie die folgenden T-SQL-Befehle auf dem Herausgeber aus.
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;Erstellen Sie Artikel aus der Tabelle „Vertrieb“.
Führen Sie die folgenden T-SQL-Befehle auf dem Herausgeber aus.
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';Konfigurieren Sie das Abonnement. Führen Sie die folgenden T-SQL-Befehle auf dem Herausgeber aus.
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; GOFühren Sie die Replikations-Agent-Aufträge aus. Führen Sie die folgende Abfrage aus, um eine Liste der Aufträge zu erhalten:
SELECT name, date_modified FROM msdb.dbo.sysjobs ORDER BY date_modified DESC;Führen Sie den Momentaufnahme- Replikationsauftrag zum Generieren der Momentaufnahme aus:
USE msdb; GO --generate snapshot of publications, for example EXECUTE dbo.sp_start_job N'PUBLISHER-PUBLICATION-SnapshotRepl-1'; GOFühren Sie den Snapshot-Replikationsauftrag aus, um den Auftrag zu starten:
USE msdb; GO --distribute the publication to subscriber, for example EXECUTE dbo.sp_start_job N'DISTRIBUTOR-PUBLICATION-SnapshotRepl-SUBSCRIBER'; GOStellen Sie eine Verbindung mit dem Abonnenten her, und fragen Sie replizierte Daten ab.
Überprüfen Sie auf dem Abonnenten, ob die Replikation funktioniert, indem Sie die folgende Abfrage ausführen:
SELECT * FROM [Sales].[dbo].[Customer];
In diesem Tutorial konfigurierten Sie die Replikation von SQL Server-Momentaufnahmen unter Linux mit zwei Instanzen von SQL Server mithilfe von T-SQL.
- Aktivieren von SQL Server-Replikations-Agents unter Linux
- Erstellen einer Beispieldatenbank
- Konfigurieren des Momentaufnahmeordners für den Zugriff durch SQL Server-Agents
- Konfigurieren des Verteilers
- Konfigurieren des Herausgebers
- Konfigurieren von Veröffentlichungen und Artikeln
- Konfigurieren des Abonnenten
- Ausführen der Replikationsaufträge