En esta página se describe cómo configurar una instancia de Cloud SQL para publicar en un suscriptor que sea externo a Cloud SQL o que esté en Cloud SQL. La replicación externa en Cloud SQL para SQL Server usa la replicación transaccional, en la que Cloud SQL actúa como editor de un suscriptor.
La replicación transaccional admite la publicación de varios tipos de objetos, tal como se documenta en Microsoft. Además, en Cloud SQL, las limitaciones de esta función son similares a las que documenta Microsoft.
Estos son algunos de los objetos admitidos:
- Tablas
- Procedimientos almacenados
- Vistas
- Vistas de índice
- Funciones definidas por el usuario
Aunque en esta página se muestran ejemplos del proceso de publicación, consulta Publicar datos y objetos de base de datos en la documentación de Microsoft para obtener más información. Te recomendamos que uses SQL Server Management Studio (SSMS) en el proceso de publicación, ya que las opciones disponibles pueden ser más evidentes en SSMS.
Consulta también Información sobre la replicación en Cloud SQL.
Implementar la replicación transaccional
Una instancia de Cloud SQL puede actuar como editor y distribuidor de un suscriptor externo mediante la replicación transaccional.
Para configurar la replicación transaccional, puede hacer lo siguiente:
- Usa los procedimientos almacenados que proporciona Cloud SQL. Van precedidas de:
gcloudsql_transrepl_
- Refinar la replicación mediante procedimientos almacenados proporcionados por Microsoft
Limitaciones y requisitos previos
Cuando planifique la replicación transaccional, consulte esta sección.
Limitaciones
- Las instancias que usan alta disponibilidad no tienen una dirección IP saliente coherente. Estas instancias no pueden ser editores si utilizan la conectividad de IP pública. Por lo tanto, si una instancia usa alta disponibilidad, debe usar la conectividad de IP privada.
- Para definir un artículo, consulta Define an Article (Definir un artículo) en la documentación de Microsoft, donde también se indican las limitaciones y restricciones.
- Los procedimientos almacenados proporcionados por Cloud SQL solo admiten suscripciones push.
- La replicación externa no se puede configurar en una instancia configurada con replicación.
Requisitos previos
Debe configurarse la conectividad de red bidireccional entre una instancia de Cloud SQL y la instancia de suscriptor. El suscriptor puede ser externo (por ejemplo, un suscriptor local) o interno a Cloud SQL.
En las instancias de Cloud SQL que usan IPs públicas, Cloud SQL usa una dirección IP diferente en sus rutas de salida y entrada. La réplica debe incluir en su lista de permitidos la dirección IP saliente de la instancia principal, que puedes obtener con el comando gcloud
:
gcloud sql instances describe [PRIMARY_NAME] --format="default(ipAddresses)"
Para usar la IP privada de Cloud SQL con una instancia local, debes configurar el acceso a servicios privados. Para ello, es necesario que la VPC de Cloud SQL y la del cliente se emparejen a través de un intervalo de direcciones IP personalizado que se debe anunciar.
Cuando se conecte desde un entorno local, el cortafuegos local debe permitir las conexiones entrantes y salientes. En concreto, el cortafuegos local debe permitir este tipo de conexiones en el puerto 1433 al intervalo de subred de acceso a servicios privados que se usa para el servicio específico (en este caso, para Cloud SQL). Google Cloud Te recomendamos que permitas un intervalo de subredes en lugar de una IP específica para cada instancia creada.
Para obtener información relacionada, consulta lo siguiente:
- Configurar IP privada (incluye un enlace para configurar el acceso privado a servicios)
- acceso privado a servicios
- Configurar el acceso privado a servicios
Permisos y roles
En las siguientes secciones se explican los permisos y los roles.
Permisos empaquetados
Los procedimientos almacenados proporcionados por Cloud SQL incluyen los permisos necesarios para la replicación transaccional. Se trata de procedimientos almacenados de envoltorio que a veces llaman a uno o varios procedimientos almacenados de Microsoft. Para obtener información sobre los procedimientos almacenados de Microsoft, consulta la documentación de Microsoft.
Rol necesario
Las cuentas utilizadas (incluida la del agente de lectura de registros) necesitan un rol de db_owner
, como en el caso del usuario sqlserver
. Para obtener la información necesaria, consulta el modelo de seguridad del agente de réplica.
Usar procedimientos almacenados para publicar, distribuir y suscribirse
En esta sección se sugieren los pasos para configurar la replicación transaccional.
El usuario sqlserver
tiene procedimientos almacenados para configurar tu instancia de Cloud SQL de forma que actúe como editor. Para obtener información de referencia, consulta Procedimientos almacenados de Cloud SQL.
Preparar la replicación transaccional con una base de datos de prueba
Antes de configurar la replicación transaccional para una base de datos de producción, puede configurar su instancia como editor de objetos de base de datos de prueba. En esta página, la base de datos de prueba se llama pub_demo
.
Conéctate a tu instancia de Cloud SQL con el usuario sqlserver
y crea una base de datos para hacer pruebas. Por ejemplo:
Create Database pub_demo;
GO
USE pub_demo;
CREATE TABLE Employee(employeeId INT primary key);
INSERT INTO Employee([employeeId]) VALUES (1);
INSERT INTO Employee([employeeId]) VALUES (2);
-- Add procedure
CREATE OR ALTER PROCEDURE dbo.p_GetDate
AS
SELECT getdate()
-- Add view
CREATE OR ALTER VIEW dbo.v_GetDbs
AS
SELECT name from sys.databases
-- Function
CREATE OR ALTER FUNCTION dbo.fn_ListDbFiles(@id int)
RETURNS TABLE
AS
RETURN
(
select * from sys.master_files where database_id = @id
)
Configurar la base de datos de distribución
En el caso de la base de datos de distribución, puedes usar msdb.dbo.gcloudsql_transrepl_setup_distribution
, que es un procedimiento almacenado de envoltorio para estos procedimientos almacenados de Microsoft:
Por ejemplo:
EXEC msdb.dbo.gcloudsql_transrepl_setup_distribution @login='sqlserver', @password='<password>'
Habilitar una base de datos para la publicación
Para habilitar o inhabilitar la opción de publicación de una base de datos, puedes usar
msdb.dbo.gcloudsql_transrepl_replicationdboption
. Este procedimiento almacenado se aplica a la opción de publicación del editor que usa sp_replicationdboption.
Por ejemplo:
EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption @db='pub_demo', @value='true'
Añadir un agente de lectura de registros
Puede configurar un agente de lector de registro para una base de datos que use sp_addlogreader_agent.
Por ejemplo:
EXEC msdb.dbo.gcloudsql_transrepl_addlogreader_agent @db='pub_demo', @login='sqlserver', @password='<password>'
Crear la publicación de la base de datos
Puedes usar msdb.dbo.gcloudsql_transrepl_addpublication
para crear una publicación transaccional para la base de datos que especifiques. Este procedimiento almacenado
envuelve
sp_addpublication.
Por ejemplo:
EXEC msdb.dbo.gcloudsql_transrepl_addpublication @db='pub_demo', @publication='pub1'
Crea un agente de creación de una copia de la publicación especificada.
Para crear un agente de creación de una copia de la base de datos del editor, puedes usar msdb.dbo.gcloudsql_transrepl_addpublication_snapshot
, que envuelve sp_addpublication_snapshot.
Por ejemplo:
EXEC msdb.dbo.gcloudsql_transrepl_addpublication_snapshot @db='pub_demo', @publication='pub1', @login='sqlserver', @password='<password>'
Crear un artículo y añadirlo a la publicación
Puede crear un artículo desde la base de datos del editor y añadirlo a la publicación. Como usuario sqlserver
, utiliza
sp_addarticle.
También puede añadir artículos mediante SSMS. Para obtener más información, consulta Añadir y quitar artículos de una publicación.
Por ejemplo:
USE pub_demo;
GO
EXEC sp_addarticle @publication = 'pub1',
@article = 'csql_dbo.employee',
@source_owner = 'dbo',
@source_object = 'Employee',
@description = N'cloudsql_article_table',
@schema_option = 0x000000000903409D,
@identityrangemanagementoption = N'manual',
@destination_table = 'Employee',
@destination_owner = 'dbo';
-- add function
use [pub_demo]
exec sp_addarticle @publication = N'pub1',
@article = N'fn_ListDbFiles',
@source_owner = N'dbo',
@source_object = N'fn_ListDbFiles',
@type = N'func schema only',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008000001,
@destination_table = N'fn_ListDbFiles',
@destination_owner = N'dbo',
@status = 16
-- add procedure
use [pub_demo]
exec sp_addarticle @publication = N'pub1',
@article = N'p_GetDate',
@source_owner = N'dbo',
@source_object = N'p_GetDate',
@type = N'proc schema only',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008000001,
@destination_table = N'p_GetDate',
@destination_owner = N'dbo',
@status = 16
-- add view
use [pub_demo]
exec sp_addarticle @publication = N'pub1',
@article = N'v_GetDbs',
@source_owner = N'dbo',
@source_object = N'v_GetDbs',
@type = N'view schema only',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008000001,
@destination_table = N'v_GetDbs',
@destination_owner = N'dbo',
@status = 16
Añadir la suscripción a la publicación
Desde la base de datos, puedes añadir la suscripción a la publicación. Como usuario sqlserver
, define el estado de suscriptor con sp_addsubscription.
Por ejemplo:
Use pub_demo;
GO
EXEC sp_addsubscription @publication ='pub1',
@subscriber = N'10.10.100.1,1433',
@destination_db = pub_demo,
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0
Conectarse al suscriptor y crear una base de datos de suscripciones
Puedes conectarte al suscriptor y crear una base de datos de suscripciones para rellenar los datos replicados.
Por ejemplo:
Create Database pub_demo
Añadir una nueva tarea de agente programada para sincronizar la suscripción push
Puede añadir una nueva tarea de agente programada para sincronizar la suscripción push con la publicación. Por ejemplo, en la base de datos del editor, ejecuta un comando similar al siguiente. Este comando usa
msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent
, un envoltorio almacenado
procedimiento para
sp_addpushsubscription_agent:
EXEC msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent
@db='pub_demo',
@publication = 'pub1',
@subscriber_db= 'pub_demo',
@subscriber_login='sqlserver',
@subscriber_password='<password>',
@subscriber='11.11.111.1,1433'
Iniciar un trabajo de agente de instantánea de publicación
Para iniciar un trabajo de agente de creación de una copia de una publicación, sigue estos pasos:
USE pub_demo;
EXEC sp_startpublication_snapshot
@publication = 'pub1'
Conceder acceso a una cuenta para usar el monitor de réplicas
Usa msdb.dbo.gcloudsql_transrepl_addmonitoraccess
para lo siguiente:
- Proporcionar acceso al Monitor de replicación en SSMS
- Consultar tablas en la base de datos de distribución
Por lo tanto, este procedimiento almacenado le permite usar la instrucción SELECT en las tablas relacionadas con la replicación de la base de datos de distribución, como la tabla MSrepl_errors:
EXEC msdb.dbo.gcloudsql_transrepl_addmonitoraccess
@login = 'sqlserver'
Cambiar una propiedad de una base de datos de distribución
Puedes cambiar el heartbeat_interval
. Usa el procedimiento msdb.dbo.gcloudsql_transrepl_changedistributor_property
, que envuelve a sp_changedistributor_property
.
Para obtener más información, consulta la documentación de sp_changedistributor_property
. Consulta también esa documentación para obtener más información sobre el valor de heartbeat_interval
.
Por ejemplo:
EXEC msdb.dbo.gcloudsql_transrepl_changedistributor_property
@property = N'heartbeat_interval',
@value = 90
Usar el Monitor de replicación
Haga clic con el botón derecho en el nodo de replicación de SSMS y elija Iniciar Monitor de replicación.
Si hace clic en la pestaña Agentes, debería ver una vista similar a la siguiente:
Usar procedimientos almacenados para eliminar la replicación
En esta sección se sugieren los pasos para quitar la replicación transaccional.
Cancelar la suscripción
Para eliminar la suscripción, usa el procedimiento almacenado sp_dropsubscription
.
Aquí tienes un ejemplo de los comandos para cancelar la suscripción:
USE pub_demo;
GO
EXEC sp_dropsubscription
@publication = 'csql_pub_pub_demo',
@article = N'all',
@subscriber = N'11.11.111.1,1433'
Eliminar el suscriptor
Para eliminar el suscriptor, usa el procedimiento almacenado msdb.dbo.gcloudsql_transrepl_dropsubscriber
:
EXEC msdb.dbo.gcloudsql_transrepl_dropsubscriber
@subscriber = N'11.11.111.1,1433'
Abandonar la publicación
Para eliminar la publicación, usa el procedimiento almacenado msdb.dbo.gcloudsql_transrepl_droppublication
:
EXEC msdb.dbo.gcloudsql_transrepl_droppublication
@db = 'pub_demo', @publication='pub1'
Inhabilitar la base de datos de publicaciones
Para inhabilitar la base de datos de publicaciones, usa el procedimiento almacenado msdb.dbo.gcloudsql_transrepl_replicationdboption
:
EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption
@db='pub_demo',
@value=N'false'
Eliminar la base de datos de distribución
Para quitar la base de datos de distribución, usa el procedimiento almacenado msdb.dbo.gcloudsql_transrepl_remove_distribution
:
EXEC msdb.dbo.gcloudsql_transrepl_remove_distribution
Consejos y pasos para solucionar problemas
En las siguientes secciones se tratan temas habituales para solucionar problemas.
Ejecutar procedimientos almacenados desde la base de datos correcta
Es posible que recibas el siguiente error al ejecutar sp_addarticle
, sp_addsubscription
o sp_startpublication_snapshot
:
Only members of the sysadmin fixed server role or db_owner fixed database role can perform this operation.
Además, puede que se produzca el siguiente error al ejecutar sp_dropsubscription
:
This database is not enabled for publication.
Si se producen estos errores, ten en cuenta que debes ejecutar esos procedimientos almacenados desde la base de datos a la que se aplican. Puede usar lo siguiente para confirmar que se ejecutan desde la base de datos correcta:
USE <database_name>;
GO
<Run stored proc>
Replicación
Los errores de replicación se proporcionan en los registros de errores de SQL y en otros lugares. Puede consultar algunas tablas de la base de datos de distribución directamente para ver si hay errores de replicación. Por ejemplo:
select * from [cloudsql_distribution]..msrepl_errors
select * from [cloudsql_distribution]..MSreplication_monitordata
Microsoft ofrece más ejemplos
sobre cómo buscar errores con el Monitor de replicación. Por ejemplo, es posible que el usuario sqlserver
no tenga acceso a un comando.
Tareas del agente de replicación
Una vez configurada la replicación, los nuevos trabajos del agente SQL no se muestran en SSMS al usuario sqlserver
. Sin embargo, puedes verlos de las siguientes formas:
USE msdb
select * from dbo.sysjobs
Faltan editores en el Monitor de replicación
Puedes usar el monitor de replicación para ver el estado de la replicación y solucionar problemas relacionados con ella.
Por ejemplo, si configuras la replicación y tu instancia de Cloud SQL de editor utiliza una dirección IP, es posible que SSMS no pueda encontrar el editor. Esto se debe a que no conoce la asignación entre el nombre de host y la dirección IP.
El monitor de replicación contiene una pestaña Publicaciones vacía:
Como solución alternativa, puedes crear alias en el Administrador de configuración de SQL Server entre el nombre de host de SQL Server del editor y la dirección IP utilizada para conectarse desde SSMS:
Inicia el Administrador de configuración de SQL Server.
Busca el nodo Aliases y selecciónalo.
Haz clic con el botón derecho en el cuadro situado debajo de Nombre de alias para crear un alias. El mismo procedimiento se aplica tanto a los alias de 32 bits como a los de 64 bits:
Recupera el nombre de host real de tu instancia de editor con esta consulta:
En la ventana de alias, rellena estos campos antes de seleccionar Aceptar:
Nombre de alias: indica el nombre del servidor de la consulta del paso 4.
Número de puerto: proporciona el puerto 1433.
Protocolo: deja el valor predeterminado TCP/IP.
Servidor: proporcione la dirección IP de la instancia de Publisher.
Conéctate con el nuevo alias e inicia el Monitor de replicación:
La información de publicación debe ser similar a la siguiente:
Para obtener más información sobre cómo solucionar problemas de replicación, consulta el artículo Solucionador de problemas: buscar errores en la replicación transaccional de SQL Server.
Estimación del tamaño de los artículos necesarios para la replicación
Si usas una instancia de Cloud SQL como editor, es necesario hacer una copia inicial de los artículos que se van a generar para empezar la replicación. Esta captura se almacena de forma local. En función del número de artículos, su tamaño y el tipo de datos, los requisitos de almacenamiento pueden aumentar. El procedimiento sp_spaceused
almacenado proporciona solo una estimación aproximada del espacio en disco necesario para un artículo.
La captura incluye archivos que almacenan esquemas y datos.
Siguientes pasos
- Consulta información sobre la replicación en Cloud SQL.