Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server sur Linux
Dans ce tutoriel, vous allez configurer la réplication de capture instantanée SQL Server sur Linux avec deux instances de SQL Server à l’aide de Transact-SQL (T-SQL). Le serveur de publication et le serveur de distribution sont identiques et l’abonné se trouve sur une instance distincte.
- Activer les agents de réplication SQL Server sur Linux
- Créer un exemple de base de données
- Configurer le dossier de captures instantanées pour l’accès aux agents SQL Server
- Configurer le serveur de distribution
- Configurer le serveur de publication
- Configurez la publication et les articles
- Configurez l’abonné
- Exécuter des tâches de réplication
Vous pouvez configurer tous les composants de réplication avec des procédures stockées de réplication.
Prerequisites
Pour terminer ce tutoriel, vous avez besoin de ce qui suit :
Deux instances de SQL Server avec la dernière version de SQL Server sur Linux
Outil permettant de émettre des requêtes T-SQL pour configurer la réplication, telles que sqlcmd ou SQL Server Management Studio (SSMS)
Consultez Utiliser SQL Server Management Studio sur Windows pour la gestion de SQL Server sur Linux.
Note
La réplication SQL Server est prise en charge sur Linux dans SQL Server 2017 (14.x) (CU 18) et les versions ultérieures.
Étapes détaillées
Activez les agents de réplication SQL Server sur Linux. Sur les deux machines hôtes, exécutez les commandes suivantes dans le terminal.
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true sudo systemctl restart mssql-serverCréez l’exemple de base de données et de table. Sur le serveur de publication, créez un exemple de base de données et de table qui servira d’articles pour une publication.
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); GOSur l’autre instance de SQL Server, celle de l’abonné, créez la base de données destinée à recevoir les articles.
CREATE DATABASE Sales; GOSur le distributeur, créez le dossier snapshot pour que les agents SQL Server puissent lire et y écrire, et accordez l’accès à l’utilisateur
mssql:sudo mkdir /var/opt/mssql/data/ReplData/ sudo chown mssql /var/opt/mssql/data/ReplData/ sudo chgrp mssql /var/opt/mssql/data/ReplData/Configurez le distributeur. Dans cet exemple, l’éditeur est également le distributeur. Exécutez les commandes suivantes sur le serveur de publication pour configurer également l’instance pour la 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'; GOConfigurez l’éditeur. Exécutez les commandes T-SQL suivantes sur l’éditeur.
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'; GOConfigurez la publication et la tâche de l’agent d’instantané. Exécutez les commandes T-SQL suivantes sur l’éditeur.
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;Créez l’article
Customerà partir duCustomertableau.Exécutez les commandes T-SQL suivantes sur l’éditeur.
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';Configurez l’abonnement. Exécutez les commandes T-SQL suivantes sur l’éditeur.
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; GOExécutez les travaux de l’agent de réplication. Exécutez la requête suivante pour obtenir la liste des tâches :
SELECT name, date_modified FROM msdb.dbo.sysjobs ORDER BY date_modified DESC;Démarrez la tâche de l’agent de capture instantanée pour générer l’instantané :
USE msdb; GO -- Generate the publication snapshot, for example. EXECUTE dbo.sp_start_job N'PUBLISHER-PUBLICATION-SnapshotRepl-1'; GOLancer le travail d’agent de distribution pour distribuer la publication à l’abonné :
USE msdb; GO -- Distribute the publication to the subscriber. EXECUTE dbo.sp_start_job N'DISTRIBUTOR-PUBLICATION-SnapshotRepl-SUBSCRIBER'; GOConnectez-vous à l’abonné et interrogez les données répliquées.
Sur l’abonné, vérifiez que la réplication fonctionne en exécutant la requête suivante :
SELECT * FROM [Sales].[dbo].[Customer];
Dans ce tutoriel, vous avez configuré la réplication d’instantané de SQL Server sur Linux avec deux instances de SQL Server à l’aide de T-SQL.
- Activer les agents de réplication SQL Server sur Linux
- Créer un exemple de base de données
- Configurer le dossier de captures instantanées pour l’accès aux agents SQL Server
- Configurer le serveur de distribution
- Configurer le serveur de publication
- Configurez la publication et les articles
- Configurez l’abonné
- Exécuter des tâches de réplication
Contenu connexe
- Réplication de SQL Server
- Réplication SQL Server sur Linux
- Procédures stockées de réplication (Transact-SQL)