Procedimientos recomendados para SQL Data Sync de Azure

Se aplica a:Azure SQL Database

En este artículo, se describen los procedimientos recomendados para Azure SQL Data Sync.

Para obtener información general acerca de SQL Data Sync, consulte Sincronización de datos entre varias bases de datos locales y de la nube con Azure SQL Data Sync.

Importante

Actualmente, Azure SQL Data Sync no es compatible con Azure SQL Managed Instance ni con Azure Synapse Analytics.

Seguridad y confiabilidad

Agente cliente

  • Instale el agente cliente con la cuenta de usuario con menos privilegios que tenga acceso al servicio de red.
  • Instale el agente cliente en un servidor diferente del lugar en el que está instalado SQL Server.
  • No registre ninguna base de datos local con más de un agente.
    • Evite esto aunque vaya a sincronizar tablas diferentes para distintos grupos de sincronización.
    • Registrar una base de datos local con varios agentes cliente puede causar problemas al eliminar uno de los grupos de sincronización.

Cuentas de base de datos con los mínimos privilegios requeridos

  • Para la configuración de la sincronización:

    • Permisos de SQL Server: CREAR/MODIFICAR TABLA, MODIFICAR BASE DE DATOS, CREAR PROCEDIMIENTO, SELECCIONAR/MODIFICAR ESQUEMA, CREAR TIPO. Estos permisos se incluyen (junto con otros permisos) en el rol de base de datos ddl_admin integrado.
    • En el nivel del grupo de recursos, es necesario pertenecer al rol Colaborador de base de datos SQL. Para más información, consulte Asignación de roles de Azure mediante Azure Portal. La pertenencia a roles más amplios como Colaborador o Propietario también funciona, si el rol ya está asignado.
    • Los permisos en el nivel de suscripción no deberían ser necesarios, pero podrían proporcionar una manera simplificada (aunque no menos necesaria) de proporcionar los permisos necesarios para varias implementaciones de Azure Data Sync en una suscripción. Una API original en desuso requería estos permisos de RBAC de Azure, pero ya no debería estar en uso.
      • "Microsoft.Sql/locations/syncMemberOperationResults/read"
      • "Microsoft.Sql/locations/syncAgentOperationResults/read"
      • "Microsoft.Sql/locations/syncGroupOperationResults/read"
  • Para la sincronización en curso.

    • Permisos de SQL Server: permisos SELECCIONAR, INSERTAR, ACTUALIZAR y ELIMINAR en tablas de usuario que estén seleccionadas para la sincronización. Permiso EJECUTAR en los tipos de tabla definidos por el usuario.
    • Permisos de SQL Server: permiso SELECCIONAR, INSERTAR, ACTUALIZAR y ELIMINAR en metadatos de sincronización y tablas de seguimiento creadas por el sistema. Permiso EJECUTAR en procedimientos almacenados creados por el servicio.
      • El esquema DataSync se usa para objetos creados por el sistema en las bases de datos de centro y miembro.
      • Los esquemas dss y TaskHosting se usan para objetos creados por el sistema en las bases de datos de metadatos de sincronización.
  • Para el desaprovisionamiento.

    • Permisos de SQL Server: MODIFICAR en todas las tablas que forman parte de la sincronización; SELECCIONAR y ELIMINAR en las tablas de metadatos de sincronización; CONTROLAR en las tablas de seguimiento de la sincronización, los procedimientos almacenados y los tipos definidos por el usuario.
    • Para la limpieza, quite los objetos creados por el sistema en los esquemas DataSync, dss y TaskHosting.

Azure SQL Database solo admite un único conjunto de credenciales. Para realizar estas tareas dentro de esta restricción, tenga en cuenta las siguientes opciones:

  • Cambie las credenciales para las distintas fases (por ejemplo, utilice credencial1 para la configuración y credencial2 para la sincronización en curso).
  • Cambie el permiso de las credenciales (es decir, cambie el permiso una vez configurada la sincronización).

Auditoría

Se recomienda habilitar la auditoría en el nivel de las bases de datos en los grupos de sincronización. Aprenda a habilitar la auditoría en la base de datos de Azure SQL o a habilitar la auditoría en la base de datos de SQL Server.

Configurar

Consideraciones y restricciones de las bases de datos

Tamaño de base de datos

Al crear una nueva base de datos, establezca el tamaño máximo de forma que siempre sea mayor que la base de datos que implemente. Si no lo hace así, se producirá un error de sincronización. Aunque SQL Data Sync no permite el crecimiento automático, puede ejecutar el comando ALTER DATABASE para aumentar el tamaño de la base de datos una vez creada. Asegúrese de que no se sale de los límites de tamaño de la base de datos.

Importante

SQL Data Sync almacena metadatos adicionales con cada base de datos. No olvide tener en cuenta estos metadatos al calcular el espacio necesario. La cantidad de sobrecarga adicional guarda relación con la cantidad de tráfico y con el ancho de las tablas (por ejemplo, las tablas estrechas necesitan más sobrecarga).

Consideraciones y restricciones de las tablas

Selección de tablas

No deben incluir en un grupo de sincronización todas las tablas que se encuentran en una base de datos. Las tablas que se incluyen en un grupo de sincronización afectan a la eficiencia y los costos. Incluya tablas y también las tablas que de ellas dependan en un grupo de sincronización solo si así lo requieren las necesidades empresariales.

Claves principales

Cada tabla de un grupo de sincronización debe tener una clave principal. SQL Data Sync no puede sincronizar una tabla que no tiene una clave principal.

Antes de usar SQL Data Sync en producción, compruebe el rendimiento de la sincronización inicial y en curso.

Las tablas vacías proporcionan el mejor rendimiento.

Las tablas vacías ofrecen el mejor rendimiento en el momento de la inicialización. Si la tabla de destino está vacía, las sincronización de datos utiliza la inserción masiva para cargar los datos. En caso contrario, la sincronización de datos realiza una comparación fila a fila y la inserción para comprobar si hay conflictos. Aunque, si el rendimiento no es un problema, puede configurar la sincronización entre tablas que ya contengan datos.

Aprovisionamiento de bases de datos de destino

SQL Data Sync permite aprovisionar automáticamente la base de datos básica.

En esta sección, se describen los límites del aprovisionamiento de SQL Data Sync.

Limitaciones del aprovisionamiento automático

SQL Data Sync tiene las siguientes limitaciones de aprovisionamiento automático:

  • Seleccione solo las columnas creadas en la tabla de destino. Todas las columnas que no forman parte del grupo de sincronización no se aprovisionan en las tablas de destino.
  • Los índices se crean únicamente para las columnas seleccionadas. Si el índice de la tabla de origen tiene columnas que no forman parte del grupo de sincronización, estos índices no se aprovisionan en las tablas de destino.
  • Los índices de las columnas de tipo XML no se aprovisionan.
  • Data Sync solo admite las dos propiedades de índice siguientes: Unique, Clustered/Non-Clustered. No se admiten otras propiedades de índice como IGNORE_DUP_KEY, WHERE filter_predicate, etc., y el índice de destino se aprovisiona sin estas propiedades incluso si el índice de origen las tiene establecidas.
  • Las restricciones CHECK no se aprovisionan.
  • Los desencadenadores existentes en las tablas de origen no se aprovisionan.
  • No se crean vistas ni procedimientos almacenados en la base de datos de destino.
  • Las acciones ON UPDATE CASCADE Y ON DELETE CASCADE en las restricciones clave externas no se vuelven a crear en las tablas de destino.
  • Si tiene columnas decimales o numéricas con una precisión mayor a 28, SQL Data Sync puede encontrar un problema de desbordamiento de conversión durante la sincronización. Se recomienda limitar la precisión de las columnas decimales o numéricas a 28 o menos.

Recomendaciones

  • Use la funcionalidad de aprovisionamiento automático de SQL Data Sync solo cuando vaya a probar el servicio.
  • Para entornos de producción, aprovisione el esquema de base de datos.

Ubicación de la base de datos central

Escenario de empresa a la nube

Para minimizar la latencia, mantenga la base de datos central cerca de la mayor concentración del tráfico de la base de datos del grupo de sincronización.

Escenario de nube a nube

  • Cuando todas las bases de datos de un grupo de sincronización están en un centro de datos, el concentrador debe estar en el mismo centro de datos. Esta configuración reduce la latencia y el costo de la transferencia de datos entre centros de datos.
  • Cuando las bases de datos de un grupo de sincronización están en varios centros de datos, el concentrador debe estar en el mismo centro de datos que la mayoría de las bases de datos y del tráfico de la base de datos.

Escenarios combinados

Aplique las instrucciones anteriores a configuraciones de grupos de sincronización complejas, como aquellas en las que existe una combinación de escenarios de la empresa a la nube y de la nube a la nube.

Sync

Evitar una sincronización inicial lenta y costosa

En esta sección se describe la sincronización inicial de un grupo de sincronización. Obtenga información sobre cómo ayudar a evitar que una sincronización inicial tarde más tiempo y sea más costosa de lo necesario.

Funcionamiento de la sincronización inicial

Al crear un grupo de sincronización, comience con los datos en una sola base de datos. Si tiene datos en varias bases de datos, SQL Data Sync trata cada fila como un conflicto que hay que resolver. La resolución de conflictos hace que la sincronización inicial sea lenta. Si tiene datos en varias bases de datos, la sincronización inicial puede tardar entre varios días y varios meses, según el tamaño de la base de datos.

Si las bases de datos están en distintos centros de datos, cada fila debe desplazarse entre ellos. Esto aumenta el costo de una sincronización inicial.

Recomendación

Si es posible, comience con datos en una sola base de datos del grupo de sincronización.

Diseño para evitar bucles de sincronización

Un bucle de sincronización se produce cuando hay referencias circulares dentro de un grupo de sincronización. En ese caso, cada cambio realizado en una base de datos resulta interminable y se replica de forma circular a través de las bases de datos del grupo de sincronización.

Asegúrese de evitar los bucles de sincronización, ya que causan una degradación del rendimiento y podrían aumentar significativamente los costos.

Cambios que no se propagan

Razones por las que los cambios no se propagan

Puede que los cambios no se propaguen por alguno de los siguientes motivos:

  • Incompatibilidad de esquemas o tipos de datos.
  • Insertar valores NULL en columnas que no aceptan valores NULL.
  • Infringir restricciones de claves principales.

¿Qué ocurre cuando los cambios no se propagan?

  • Se muestra un estado de advertencia en el grupo de sincronización.
  • Los detalles se encuentran en el visor de registro de la interfaz de usuario del portal.
  • Si el problema no se resuelve en 45 días, la base de datos se convierte en obsoleta.

Nota

Estos cambios no se propagan nunca. La única manera de recuperarse en este caso es volver a crear el grupo de sincronización.

Recomendación

Supervise el estado del grupo de sincronización y la base de datos con regularidad desde la interfaz del portal y de registro.

Mantenimiento

Evitar bases de datos y grupos de sincronización obsoletos

Un grupo de sincronización o una base de datos de un grupo de sincronización pueden llegar a estar obsoletos. Cuando el estado de un grupo de sincronización es obsoleto, deja de funcionar. Cuando el estado de la base de datos es obsoleto, se pueden perder datos. Es mejor evitar esta situación en lugar de intentar recuperarse de este error.

Evitar bases de datos obsoletas

El estado de la base de datos se establece en obsoleto cuando ha estado sin conexión durante cuarenta y cinco días o más. Para evitar el estado obsoleto en una base de datos, asegúrese de que ninguna de las bases de datos esté sin conexión durante cuarenta y cinco días o más.

Evitar grupos de sincronización obsoletos

El estado de un grupo de sincronización se establece en obsoleto cuando cualquier cambio en el grupo de sincronización no puede propagarse al resto del grupo de sincronización durante cuarenta y cinco días o más. Para evitar el estado obsoleto de un grupo de sincronización, compruebe periódicamente el registro de historial del grupo de sincronización. Asegúrese de que todos los conflictos se resuelvan y los cambios se propaguen correctamente en las bases de datos del grupo de sincronización.

Un grupo de sincronización puede producir un error al aplicar un cambio por alguno de estos motivos:

  • Incompatibilidad de esquemas entre tablas.
  • Incompatibilidad de datos entre tablas.
  • Insertar una fila con un valor NULL en una columna que no admite valores NULL.
  • Actualizar una fila con un valor que infringe una restricción de clave externa.

Para impedir grupos de sincronización obsoletos, haga lo siguiente:

  • Actualice el esquema para permitir los valores incluidos en las filas con errores.
  • Actualice los valores de la clave externa para incluir los valores incluidos en las filas con errores.
  • Actualice los valores de datos en la fila con errores para que sean compatibles con el esquema o con las claves externas de la base de datos de destino.

Evitar problemas de desaprovisionamiento

En determinadas circunstancias, anular el registro de una base de datos con un agente cliente puede provocar errores de sincronización.

Escenario

  1. El grupo de sincronización A se ha creado con una instancia de SQL Database y una base de datos de SQL Server asociada al agente local 1.
  2. La misma base de datos local está registrada con el agente local 2 (este agente no está asociado a ningún grupo de sincronización).
  3. Al anular el registro de la base de datos local del agente local 2, se eliminan las tablas de seguimiento y de metadatos del grupo de sincronización A en la base de datos local.
  4. En las operaciones del grupo de sincronización A, se producirá el error: "La operación actual no se pudo completar porque la base de datos no está aprovisionada para la sincronización o no tiene permisos para las tablas de configuración de sincronización".

Solución

Para evitar esta situación, no registre una base de datos con más de un agente.

Para recuperarse de esta situación:

  1. Quite la base de datos de todos los grupos de sincronización a los que pertenezca.
  2. Vuelva a agregar la base de datos a cada uno de los grupos de sincronización de los que la ha quitado.
  3. Implemente cada grupo de sincronización afectado (esta acción aprovisiona la base de datos).

Modificación de un grupo de sincronización

No intente quitar una base de datos de un grupo de sincronización para después editar el grupo de sincronización sin implementar primero uno de los cambios.

En su lugar, primero quite una base de datos de un grupo de sincronización. A continuación, implemente el cambio y espere a que el desaprovisionamiento finalice. Una vez finalizado el desaprovisionamiento, puede editar el grupo de sincronización e implementar los cambios.

Si intenta quitar una base de datos para después modificar un grupo de sincronización sin implementar primero uno de los cambios, se produce un error en una de las dos operaciones. La interfaz del portal puede quedar en un estado incoherente. En este caso, actualice la página para restaurar el estado correcto.

Evitar el tiempo de espera de actualización del esquema

Si tiene un esquema complejo para la sincronización, es posible que experimente un "tiempo de espera de la operación" durante una actualización del esquema si la base de datos de metadatos de sincronización tiene una SKU inferior (ejemplo: básica).

Solución

Para mitigar este problema, considere la posibilidad de escalar verticalmente los recursos de la base de datos de metadatos de sincronización.

Pasos siguientes

Para más información acerca de SQL Data Sync, consulte:

Para obtener más información sobre SQL Database, vea: