Esta página describe cómo configurar una instancia de Cloud SQL para publicar en un suscriptor externo o interno de Cloud SQL. La replicación externa en Cloud SQL para SQL Server utiliza la replicación transaccional, donde Cloud SQL actúa como publicador de un suscriptor.
La replicación transaccional permite la publicación de varios tipos de objetos, según lo documentado por Microsoft. Además, en Cloud SQL, las limitaciones de esta función son similares a las documentadas por Microsoft.
Algunos de los objetos soportados son los siguientes:
- Tablas
- Procedimientos almacenados
- Vistas
- Vistas del índice
- Funciones definidas por el usuario
Aunque en esta página se incluyen ejemplos del proceso de publicación, consulte "Publicar datos y objetos de base de datos" en la documentación de Microsoft para obtener más información. Considere usar SQL Server Management Studio (SSMS) en su proceso de publicación, ya que las opciones disponibles pueden ser más evidentes en SSMS.
Consulte también Acerca de la replicación en Cloud SQL .
Implementación de la replicación transaccional
Una instancia de Cloud SQL puede actuar como editor y distribuidor de un suscriptor externo, a través de la replicación transaccional.
Para configurar la replicación transaccional, puede:
- Utilice los procedimientos almacenados proporcionados por Cloud SQL. Estos tienen el prefijo
gcloudsql_transrepl_
- Refinar la replicación utilizando procedimientos almacenados proporcionados por Microsoft
Limitaciones y prerrequisitos
Al planificar la replicación transaccional, revise esta sección.
Limitaciones
Las instancias que utilizan alta disponibilidad (HA) carecen de una dirección IP saliente consistente. Estas instancias no pueden ser publicadoras si utilizan conectividad IP pública. Por lo tanto, si una instancia utiliza alta disponibilidad (HA), debe utilizar conectividad IP privada.
Para definir un artículo, consulte Definir un artículo en la documentación de Microsoft, incluidas las limitaciones y restricciones.
Los procedimientos almacenados proporcionados por Cloud SQL solo admiten suscripciones push.
Prerrequisitos
Se debe configurar una conectividad de red bidireccional entre una instancia de Cloud SQL y la instancia del suscriptor. El suscriptor puede ser externo, como por ejemplo, un suscriptor local, o interno a Cloud SQL.
Para las instancias de Cloud SQL que usan IP públicas, Cloud SQL usa una dirección IP diferente en sus rutas de entrada y salida. La réplica debe incluir en la lista de permitidos la dirección IP de salida de la instancia principal, que puede recuperarse con el comando gcloud
:
gcloud sql instances describe [PRIMARY_NAME] --format="default(ipAddresses)"
Para usar una IP privada de Cloud SQL con una instancia local, debe configurar el acceso a servicios privados. Esto requiere la interconexión entre la VPC de Cloud SQL y la VPC del cliente a través de un rango de IP personalizado que debe anunciarse.
Al conectarse desde las instalaciones locales, el firewall local debe permitir conexiones entrantes y salientes. En concreto, debe permitir dichas conexiones en el puerto 1433 al rango de subredes de acceso a servicios privados utilizado para el servicio de Google Cloud (en este caso, Cloud SQL). Considere permitir un rango de subredes en lugar de una IP específica para cada instancia creada.
Para obtener información relacionada, consulte lo siguiente:
- Configurar IP privada (que incluye un enlace para configurar el acceso a servicios privados)
- acceso a servicios privados
- Configuración del acceso a servicios privados
Permisos y roles
Permisos empaquetados
Los procedimientos almacenados que proporciona Cloud SQL incluyen los permisos necesarios para la replicación transaccional. Se trata de procedimientos almacenados de contenedor que, en ocasiones, invocan uno o más procedimientos almacenados de Microsoft. Consulte la documentación de Microsoft para obtener información sobre los procedimientos almacenados de Microsoft.
Rol requerido
Las cuentas utilizadas (incluidas las del agente de lectura de registros) requieren un rol db_owner
, como en el caso del usuario sqlserver
. Para obtener la información necesaria, consulte el Modelo de seguridad del agente de replicación .
Uso de procedimientos almacenados para publicar, distribuir y suscribirse
Esta sección contiene pasos sugeridos para configurar la replicación transaccional.
El usuario sqlserver
ha almacenado procedimientos para configurar su instancia de Cloud SQL como publicador. Para obtener información de referencia, consulte Procedimientos almacenados de Cloud SQL .
Preparación para 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 publicador de objetos de la base de datos de prueba. En esta página, la base de datos de prueba se denomina pub_demo
.
Conéctese a su instancia de Cloud SQL con el usuario sqlserver
y cree una base de datos para realizar 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
Para la base de datos de distribución, puede utilizar msdb.dbo.gcloudsql_transrepl_setup_distribution
, que es un procedimiento almacenado contenedor 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 publicación
Para habilitar o deshabilitar la opción de publicación de una base de datos, puede usar msdb.dbo.gcloudsql_transrepl_replicationdboption
. Este procedimiento almacenado se aplica a la opción de publicación del publicador que usa sp_replicationdboption .
Por ejemplo:
EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption @db='pub_demo', @value='true'
Agregar un agente lector de registros
Puede configurar un agente de lectura de registros para una base de datos que utilice sp_addlogreader_agent .
Por ejemplo:
EXEC msdb.dbo.gcloudsql_transrepl_addlogreader_agent @db='pub_demo', @login='sqlserver', @password='<password>'
Crear la publicación para la base de datos
Puede usar msdb.dbo.gcloudsql_transrepl_addpublication
para crear una publicación transaccional para la base de datos que especifique. Este procedimiento almacenado encapsula sp_addpublication .
Por ejemplo:
EXEC msdb.dbo.gcloudsql_transrepl_addpublication @db='pub_demo', @publication='pub1'
Crear un agente de instantáneas para la publicación especificada
Para crear un agente de instantáneas para la base de datos del publicador, puede utilizar msdb.dbo.gcloudsql_transrepl_addpublication_snapshot
, que encapsula sp_addpublication_snapshot .
Por ejemplo:
EXEC msdb.dbo.gcloudsql_transrepl_addpublication_snapshot @db='pub_demo', @publication='pub1', @login='sqlserver', @password='<password>'
Crea un artículo y agrégalo a la publicación.
Puedes 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 agregar artículos mediante SSMS. Para más información, consulte Agregar y eliminar 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, puede agregar la suscripción a la publicación. Como usuario sqlserver
, configure el estado del suscriptor mediante 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
Puede conectarse al suscriptor y crear una base de datos de suscripciones para completarla con datos replicados.
Por ejemplo:
Create Database pub_demo
Agregue un nuevo trabajo de agente programado para sincronizar la suscripción push
Puede agregar un nuevo trabajo de agente programado para sincronizar la suscripción push con la publicación. Por ejemplo, en la base de datos del publicador, ejecute un comando similar al siguiente. Este comando usa msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent
, un procedimiento almacenado contenedor 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áneas de publicación
Puede iniciar un trabajo de agente de instantáneas de publicación de la siguiente manera:
USE pub_demo;
EXEC sp_startpublication_snapshot
@publication = 'pub1'
Otorgar acceso a una cuenta para utilizar el Monitor de replicación
Utilice msdb.dbo.gcloudsql_transrepl_addmonitoraccess
para:
- 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 utilizar 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 la base de datos de distribución
Puede cambiar el heartbeat_interval
. Utilice el procedimiento msdb.dbo.gcloudsql_transrepl_changedistributor_property
, que encapsula sp_changedistributor_property
.
Para obtener más información, consulte la documentación de sp_changedistributor_property
. Consulte también esa documentación para obtener más información sobre el valor heartbeat_interval
.
Por ejemplo:
EXEC msdb.dbo.gcloudsql_transrepl_changedistributor_property
@property = N'heartbeat_interval',
@value = 90
Utilice el Monitor de replicación
Haga clic con el botón derecho en el nodo de replicación en SSMS y seleccione Iniciar monitor de replicación .
Si hace clic en la pestaña Agentes, debería ver una vista similar a la siguiente:
Uso de procedimientos almacenados para eliminar la replicación
Esta sección contiene pasos sugeridos para eliminar la replicación transaccional.
Cancelar la suscripción
Para cancelar la suscripción, utilice el procedimiento almacenado sp_dropsubscription
.
A continuación se muestra 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'
Dar de baja al suscriptor
Para eliminar el suscriptor, utilice 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 descartar la publicación, utilice el procedimiento almacenado msdb.dbo.gcloudsql_transrepl_droppublication
:
EXEC msdb.dbo.gcloudsql_transrepl_droppublication
@db = 'pub_demo', @publication='pub1'
Deshabilitar la base de datos de publicaciones
Para deshabilitar la base de datos de publicación, utilice 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 eliminar la base de datos de distribución, utilice el procedimiento almacenado msdb.dbo.gcloudsql_transrepl_remove_distribution
:
EXEC msdb.dbo.gcloudsql_transrepl_remove_distribution
Consejos y pasos para solucionar problemas
Ejecución de procedimientos almacenados desde la base de datos correcta
Puede obtener 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 obtener el siguiente error al ejecutar sp_dropsubscription
:
This database is not enabled for publication.
Si se producen estos errores, tenga en cuenta que debe ejecutar dichos procedimientos almacenados desde la base de datos a la que corresponden. 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 muestran en los registros de errores de SQL y en otros lugares. Puede consultar directamente algunas tablas de la base de datos de distribución para detectar errores de replicación. Por ejemplo:
select * from [cloudsql_distribution]..msrepl_errors
select * from [cloudsql_distribution]..MSreplication_monitordata
Microsoft ofrece más ejemplos aquí sobre cómo buscar errores con el Monitor de Replicación. Por ejemplo, el usuario sqlserver
podría no tener acceso a un comando.
Trabajos de agente de replicación
Una vez configurada la replicación, los nuevos trabajos del agente SQL no son visibles en SSMS para el usuario sqlserver
. Sin embargo, puede verlos mediante lo siguiente:
USE msdb
select * from dbo.sysjobs
Editores que faltan en el Monitor de replicación
Puede utilizar el monitor de replicación para ver el estado de la replicación y solucionar problemas de replicación.
Por ejemplo, si configura la replicación y su instancia de Cloud SQL de publicador usa una dirección IP, es posible que SSMS no pueda encontrarlo. Esto se debe a que desconoce la correspondencia 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, puede crear alias en el Administrador de configuración de SQL Server entre el nombre de host de SQL Server del publicador y la dirección IP utilizada para conectarse desde SSMS:
Inicie el Administrador de configuración de SQL Server.
Busque el nodo Alias y selecciónelo.
Haga clic con el botón derecho en el cuadro debajo de "Nombre de alias" para crear uno nuevo. El mismo procedimiento se aplica tanto a alias de 32 bits como a alias de 64 bits:
Recupere el nombre de host real de su instancia de editor mediante esta consulta:
En la ventana de alias, ingrese estos campos antes de seleccionar Aceptar :
Nombre de alias : proporcione el nombre del servidor de la consulta del paso 4.
Número de puerto: proporcione el puerto 1433.
Protocolo: deje el valor predeterminado de TCP/IP.
Servidor: proporcione la dirección IP de la instancia del publicador.
Conéctese utilizando el nuevo alias e inicie 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, consulte Solucionador de problemas: Buscar errores con la replicación transaccional de SQL Server .
Estimación del tamaño de los artículos necesarios para la replicación
Al usar una instancia de Cloud SQL como publicador, se requiere una instantánea inicial de los artículos que se generarán para iniciar la replicación. Esta instantánea se almacena localmente. Según la cantidad de artículos, su tamaño y el tipo de datos, los requisitos de almacenamiento pueden aumentar. El procedimiento almacenado sp_spaceused
proporciona solo una estimación aproximada del espacio en disco necesario para un artículo.
La instantánea incluye archivos que almacenan esquemas y datos.
¿Qué sigue?
- Obtenga información sobre la replicación en Cloud SQL .