Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server i Linux
I den här självstudien konfigurerar du SQL Server-replikering av ögonblicksbilder i Linux med två instanser av SQL Server med hjälp av Transact-SQL (T-SQL). Utgivaren och distributören finns på samma instans och prenumeranten finns på en separat instans.
- Aktivera SQL Server-replikeringsagenter i Linux
- Skapa en exempeldatabas
- Konfigurera ögonblicksbildmappen för åtkomst till SQL Server-agenter
- Konfigurera distributören
- Konfigurera utgivaren
- Konfigurera publikation och artiklar
- Konfigurera abonnenten
- Kör replikeringsjobben
Du kan konfigurera alla replikeringskomponenter med replikeringslagrade procedurer.
Förutsättningar
För att slutföra denna handledning behöver du:
Två instanser av SQL Server med den senaste versionen av SQL Server på Linux
Ett verktyg för att utfärda T-SQL-frågor för att konfigurera replikering, till exempel sqlcmd eller SQL Server Management Studio (SSMS)
Se Använda SQL Server Management Studio i Windows för att hantera SQL Server på Linux.
Note
SQL Server-replikering stöds i Linux i SQL Server 2017 (14.x) (CU 18) och senare versioner.
Detaljerade steg
Aktivera SQL Server-replikeringsagenter i Linux. Kör följande kommandon i terminalen på båda värddatorerna.
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true sudo systemctl restart mssql-serverSkapa exempeldatabasen och tabellen. På utgivaren skapar du en exempeldatabas och tabell som fungerar som artiklar för en publikation.
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); GOPå den andra SQL Server-instansen skapar prenumeranten databasen för att ta emot artiklarna.
CREATE DATABASE Sales; GOPå distributören, skapa snapshot-mappen för SQL Server-agenter att läsa från och skriva till, och ge användaren
mssqlåtkomst:sudo mkdir /var/opt/mssql/data/ReplData/ sudo chown mssql /var/opt/mssql/data/ReplData/ sudo chgrp mssql /var/opt/mssql/data/ReplData/Konfigurera distributören. I det här exemplet är utgivaren också distributör. Kör följande kommandon på utgivaren för att konfigurera instansen för distribution.
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'; GOKonfigurera utgivaren. Kör följande T-SQL-kommandon på utgivaren.
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'; GOKonfigurera jobbet för publicerings- och ögonblicksbildsagenten. Kör följande T-SQL-kommandon på utgivaren.
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;Skapa
Customerartikeln frånCustomertabellen.Kör följande T-SQL-kommandon på utgivaren.
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';Konfigurera prenumerationen. Kör följande T-SQL-kommandon på utgivaren.
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; GOKör jobb för replikeringsagent. Kör följande fråga för att hämta en lista över jobb:
SELECT name, date_modified FROM msdb.dbo.sysjobs ORDER BY date_modified DESC;Starta snapshot-agentjobbet för att generera snapshoten:
USE msdb; GO -- Generate the publication snapshot, for example. EXECUTE dbo.sp_start_job N'PUBLISHER-PUBLICATION-SnapshotRepl-1'; GOStarta distributionsagentens jobb för att distribuera publikationen till prenumeranten:
USE msdb; GO -- Distribute the publication to the subscriber. EXECUTE dbo.sp_start_job N'DISTRIBUTOR-PUBLICATION-SnapshotRepl-SUBSCRIBER'; GOKoppla upp dig mot abonnenten och fråga efter den replikerade datan.
Kontrollera att replikeringen fungerar på abonnenten genom att köra följande fråga:
SELECT * FROM [Sales].[dbo].[Customer];
I den här handledningen konfigurerade du SQL Server-ögonblicksbildsreplikering på Linux med två instanser av SQL Server genom att använda T-SQL.
- Aktivera SQL Server-replikeringsagenter i Linux
- Skapa en exempeldatabas
- Konfigurera ögonblicksbildmappen för åtkomst till SQL Server-agenter
- Konfigurera distributören
- Konfigurera utgivaren
- Konfigurera publikation och artiklar
- Konfigurera abonnenten
- Kör replikeringsjobben