Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server en Linux
En este tutorial se configura la replicación de instantáneas de SQL Server en Linux con dos instancias de SQL Server mediante Transact-SQL (T-SQL). El publicador y el distribuidor son la misma instancia, mientras que el suscriptor está en una instancia independiente.
- Habilitación de los agentes de replicación de SQL Server en Linux
- Crear una base de datos de ejemplo
- Configuración de la carpeta de instantáneas para el acceso de los agentes de SQL Server
- Configurar el distribuidor
- Configuración del publicador
- Configurar la publicación y los artículos
- Configurar al abonado
- Ejecución de los trabajos de replicación
Puedes configurar todos los componentes de replicación con procedimientos almacenados de replicación.
Prerequisites
Para completar este tutorial, necesita:
Dos instancias de SQL Server con la versión más reciente de SQL Server en Linux
Herramienta para emitir consultas de T-SQL para configurar la replicación, como sqlcmd o SQL Server Management Studio (SSMS)
Vea Uso de SQL Server Management Studio en Windows para administrar SQL Server en Linux.
Note
La replicación de SQL Server se admite en Linux en SQL Server 2017 (14.x) (CU 18) y versiones posteriores.
Pasos detallados
Habilite los agentes de replicación de SQL Server en Linux. En ambos equipos host, ejecute los siguientes comandos en el terminal.
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true sudo systemctl restart mssql-serverCree la base de datos y la tabla de ejemplo. En el publicador, cree una base de datos y una tabla de ejemplo para que actúen como artículos de una publicación.
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); GOEn la otra instancia de SQL Server, el suscriptor, cree la base de datos para recibir los artículos.
CREATE DATABASE Sales; GOEn el distribuidor, crea la carpeta de instantánea desde la que los agentes de SQL Server puedan leer y en la que puedan escribir, y concede acceso al usuario
mssql:sudo mkdir /var/opt/mssql/data/ReplData/ sudo chown mssql /var/opt/mssql/data/ReplData/ sudo chgrp mssql /var/opt/mssql/data/ReplData/Configura el distribuidor. En este ejemplo, el publicador también es el distribuidor. Ejecute los siguientes comandos en el publicador para configurar también la instancia de distribución.
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'; GOConfigura el publicador. Ejecute los siguientes comandos de T-SQL en el publicador.
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'; GOConfigura el trabajo de publicación y captura de instantáneas del agente. Ejecute los siguientes comandos de T-SQL en el publicador.
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;Crea el artículo
Customera partir de la tablaCustomer.Ejecute los siguientes comandos de T-SQL en el publicador.
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';Configure la suscripción. Ejecute los siguientes comandos de T-SQL en el publicador.
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; GOEjecute los trabajos del agente de replicación. Ejecute la consulta siguiente para obtener una lista de trabajos:
SELECT name, date_modified FROM msdb.dbo.sysjobs ORDER BY date_modified DESC;Inicia el trabajo del agente de instantáneas para generar la instantánea:
USE msdb; GO -- Generate the publication snapshot, for example. EXECUTE dbo.sp_start_job N'PUBLISHER-PUBLICATION-SnapshotRepl-1'; GOInicia el trabajo de agente de distribución para distribuir la publicación al suscriptor:
USE msdb; GO -- Distribute the publication to the subscriber. EXECUTE dbo.sp_start_job N'DISTRIBUTOR-PUBLICATION-SnapshotRepl-SUBSCRIBER'; GOConéctate con el abonado y consulta los datos replicados.
En el suscriptor, compruebe que la replicación funciona al ejecutar la siguiente consulta:
SELECT * FROM [Sales].[dbo].[Customer];
En este tutorial se ha configurado la replicación de instantáneas de SQL Server en Linux con dos instancias de SQL Server mediante T-SQL.
- Habilitación de los agentes de replicación de SQL Server en Linux
- Crear una base de datos de ejemplo
- Configuración de la carpeta de instantáneas para el acceso de los agentes de SQL Server
- Configurar el distribuidor
- Configuración del publicador
- Configurar la publicación y los artículos
- Configurar al abonado
- Ejecución de los trabajos de replicación