Solución de problemas de bases de datos reflejadas de Fabric desde el servidor flexible de Azure Database for PostgreSQL

En este artículo se describen los pasos de solución de problemas para la creación de reflejo del servidor flexible de Azure Database for PostgreSQL.

Solución de problemas de mensajes de error o advertencia durante la selección de tablas para replicación

Al crear una nueva base de datos reflejada, en la página Elegir datos puede recibir algunos comentarios visuales sobre tablas específicas de la base de datos de origen. En la tabla siguiente se proporciona una lista de posibles problemas, incluido el mensaje mostrado y la descripción relacionada sobre cómo resolver el problema.

Código de estado Tipo de estado Message Description
SCHEMA_DOES_NOT_EXIST ERROR El esquema {} no existe El esquema dado no existe. Podría haberse quitado mientras que Fabric extraía información de tabla pertinente. vuelva a intentarlo.
TABLE_DOES_NOT_EXIST ERROR En el esquema {}, la tabla {} no existe. La tabla dada no existe. Podría haberse quitado mientras Fabric extraía la información pertinente de la tabla. vuelva a intentarlo.
FORBIDDEN_CHARS_IN_COLUMN_NAME ERROR La tabla {}.{} contiene caracteres prohibidos en el nombre de las columnas {} La columna indicada tiene caracteres no admitidos en el nombre. 1
UNSUPPORTED_DATA_TYPE ERROR Tabla {}.{} tiene un tipo de datos no admitido en la columna {} Una (o varias) de las columnas de la tabla tiene actualmente tipos de datos no admitidos. 3
FORBIDDEN_CHARS_IN_TABLE_NAME ERROR Tabla {}.{} contiene caracteres prohibidos en el nombre El nombre de la tabla tiene caracteres no admitidos. 1
NOT_REGULAR_TABLE ERROR Tabla {}.{} no es una tabla normal El tipo de tabla no es compatible con el reflejo. 2
HAS_PRIMARY_KEY OK Tabla {}.{} tiene una clave principal La tabla es una tabla estándar y tiene una clave principal válida que se utiliza para el reflejo.
HAS_UNIQUE_INDEX OK Tabla {}.{} tiene un índice único adecuado La tabla no tiene una clave principal, pero tiene un índice único que no puede ser nulo y que se usará para la replicación. Los índices únicos que aceptan valores NULL producirán un error durante la fase de replicación y no se admiten.
NO_INDEX_FULL_IDENTITY ADVERTENCIA La tabla {}.{} no tiene un índice único adecuado. Uso de la identidad completa La tabla no tiene una clave principal o un índice único, por lo que REPLICA IDENTITY FULL es necesario para admitir la creación de reflejo, lo que puede provocar problemas de rendimiento y uso de WAL adicional.

1 No se admiten identificadores de objeto con un carácter de espacio (' ').

2 Este tipo de tabla no se admite para la creación de reflejo. Actualmente, no se admiten vistas, vistas materializadas, tablas externas ni tablas particionadas. Los hipertables de TimescaleDB tampoco son compatibles con el reflejo de Fabric.

3 Para obtener una lista de tipos de datos no admitidos, vea Limitaciones. Solo se admiten columnas con los siguientes tipos:

  • bigint
  • bigserial
  • boolean
  • bytea
  • character
  • character varying
  • date
  • double precision
  • integer
  • numeric
  • real
  • serial
  • oid
  • money
  • smallint
  • smallserial
  • text
  • time without time zone
  • time with time zone (* no como clave principal)
  • timestamp without time zone
  • timestamp with time zone
  • uuid
  • xml
  • json
  • jsonb
  • inet
  • cidr
  • macaddr
  • macaddr8
  • tsvector
  • tsquery
  • int4range
  • int8range
  • numrange
  • tsrange
  • tstzrange
  • daterange
  • circle
  • line
  • lseg
  • box
  • path
  • point
  • polygon
  • interval

En Postgres, dos valores de "hora con zona horaria" que corresponden exactamente al mismo momento, pero en zonas horarias diferentes, se consideran diferentes. Por ejemplo: 06:24:00.59+05 y 05:24:00.59+04 corresponden a la misma época, pero Postgres las trata de forma diferente.

Las columnas numéricas no restringidas predeterminadas en esquemas de base de datos de origen (sin precisión y escala definidas) se convierten en Decimal128(38, 0) antes de replicarse en tablas oneLake, en alineación con la convención estándar de SQL que la escala no especificada significa precisión de enteros.

Operaciones del lenguaje de definición de datos (DDL) admitidas en la base de datos de origen

  • Rename columna: se agrega una columna con el nuevo nombre a la tabla reflejada en Fabric y contiene datos para las filas recién insertadas (para las filas existentes serán NULL). La columna antigua todavía se mantiene con valores para las filas existentes (para las filas nuevas son NULL).
  • Agregar columna: la columna agregada está visible en la tabla reflejada y contiene datos para las filas recién insertadas (para las filas existentes son NULL).
  • Quitar columna: la columna quitada permanece visible en la tabla reflejada y contiene datos para las filas existentes (para las nuevas filas son NULL).
  • Cambiar clave principal: la sesión de reflejo continúa con normalidad.

Actualmente no se admite ninguna otra operación DDL en tablas de origen y puede provocar errores de replicación.

Cambios en la capacidad o área de trabajo de Fabric

Causa Resultado Resolución recomendada
Capacidad de tejido en pausa o eliminada Se detiene el espejado 1. Reanudar o asignar capacidad desde Azure Portal
2. Vaya al elemento reflejado de la base de datos de Fabric. En la barra de herramientas, seleccione Detener replicación.
3. Inicie la replicación seleccionando La base de datos de espejo para el elemento de espejo en el portal de Fabric.
Capacidad de tejido reanudada La creación de reflejo no se reanudará 1. Vaya al elemento reflejado de la base de datos de Fabric. En la barra de herramientas, seleccione Detener replicación.
2. Inicie la replicación seleccionando base de datos espejo para el elemento espejo en el portal de Fabric.
Área de trabajo eliminada El reflejo se detiene automáticamente Si el reflejo sigue activo en el servidor flexible de bases de datos de Azure para PostgreSQL, conéctese como administrador del servidor y ejecute los siguientes comandos en el servidor PostgreSQL: select azure_cdc.list_tracked_publications();, luego use el nombre de publicación devuelto y ejecute select azure_cdc.stop_publication(<publication_name>);
Capacidad de prueba de Fabric expirada El reflejo se detiene automáticamente Ver Expiración de la capacidad de prueba de Fabric.
Capacidad de tejido superada La sincronización se detiene Espere hasta que el estado de sobrecarga supere o actualice la capacidad. Obtenga más información en Acciones que puede realizar para recuperarse de situaciones de sobrecarga. La creación de reflejo continúa una vez recuperada la capacidad.
Cualquier otro error de recurso La duplicación está deshabilitada Para asegurarse de que los recursos de cálculo no se vean afectados y para minimizar el impacto en el servidor flexible de Azure Database for PostgreSQL, el reflejo se deshabilita en caso de errores persistentes de recursos.
La opción "Los usuarios pueden acceder a los datos almacenados en OneLake con aplicaciones externas a Fabric" deshabilitadas "Replicador: las tablas no pueden alcanzar el estado de replicación" Habilite la opción Inquilino Los usuarios pueden acceder a los datos almacenados en OneLake con aplicaciones externas a Fabric.

Consultas SQL para solucionar problemas

Si tiene problemas de replicación, conéctese al servidor de Azure Database for PostgreSQL de origen y realice estas comprobaciones utilizando las vistas y funciones del sistema para validar la configuración.

  1. Ejecute la siguiente consulta para validar si se cumplen todos los requisitos previos antes de iniciar la creación de reflejo CDC. Esta función comprueba varios requisitos de configuración y del sistema para asegurarse de que el servidor está listo para las operaciones CDC.
-- Check if all prerequisites are met
SELECT * FROM azure_cdc.check_prerequisites();

-- Example output when all checks pass (on mock mode with identity configured):
 status |                                                               data
--------+----------------------------------------------------------------------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "details": {"current_value": "12", "required_value": "13"}, "status_code": "MAX_WORKER_PROCESSES_TOO_LOW"}]

-- Example output on standby replica:
 status |                                               data
--------+---------------------------------------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "status_code": "SERVER_IN_RECOVERY"}]

-- Example output when identity not configured:
 status |                                data
--------+---------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "status_code": "IDENTITY_NOT_CONFIGURED"}]

Devuelve:(status text, data jsonb)

  • status: estado OK general: si se superan todas las comprobaciones, ERROR si se produce un error en alguna comprobación
  • data: matriz JSONB que contiene entradas de estado detalladas con status, status_codey opcional. details

Códigos de estado:

Código de estado Level Description
IDENTIDAD_NO_CONFIGURADA ERROR Las credenciales del principal de servicio no están configuradas (azure.service_principal_id o azure.service_principal_tenant_id GUCs no establecidas)
CDC_ADMIN_ROLE_NOT_EXISTS ERROR El rol azure_cdc_admin no existe en la base de datos
USUARIO_NO_ES_ADMINISTRADOR_CDC ERROR El usuario actual no tiene el rol de azure_cdc_admin
SIN_PRIVILEGIO_DE_CREACIÓN_EN_BASE_DE_DATOS ERROR El usuario actual carece de privilegios CREATE en la base de datos
LÍMITE_DE_PUBLICACIÓN_ALCANZADO ERROR Se ha alcanzado el número máximo de publicaciones (1) para la base de datos
SERVIDOR_EN_RECUPERACIÓN ERROR El servidor es una réplica en espera en modo de recuperación (la replicación CDC no se admite en réplicas en espera)
MAX_WORKER_PROCESSES_TOO_LOW ERROR max_worker_processes está por debajo del umbral recomendado (13)
  1. Ejecute la consulta siguiente para validar si las tablas de la base de datos de origen son aptas para la replicación. Excluye los esquemas del sistema (pg_catalog, information_schema, pg_toast) y las tablas propiedad de la extensión.
SELECT * FROM azure_cdc.get_all_tables_mirror_status();
 table_schema | table_name | mirroring_status |                      mirroring_data
--------------+------------+------------------+------------------------------------------------------
 public       | customers  | OK               | [{"status": "OK", "status_code": "HAS_PRIMARY_KEY"}]
 public       | orders     | OK               | [{"status": "OK", "status_code": "HAS_UNIQUE_INDEX"}]
 public       | logs       | WARNING          | [{"status": "WARNING", "status_code": "NO_INDEX_FULL_IDENTITY"}]

Devuelve: Conjunto de (table_schema text, table_name text, mirroring_status text, mirroring_data jsonb)

  • table_schema: nombre de esquema de la tabla
  • table_name: nombre de la tabla
  • mirroring_status: estado general: OK, WARNINGo ERROR
  • mirroring_data: matriz JSONB que contiene entradas de estado detalladas con status, status_codey opcional. details

Códigos de estado:

Código de estado Level Description
EL_ESQUEMA_NO_EXISTE ERROR El esquema especificado no existe
TABLA_NO_EXISTE ERROR La tabla especificada no existe en el esquema
CARACTERES_PROHIBIDOS_EN_NOMBRE_DE_COLUMNA ERROR Los nombres de columna contienen caracteres prohibidos (por ejemplo, espacios)
CARACTERES_PROHIBIDOS_EN_NOMBRE_DE_TABLA ERROR El nombre de tabla contiene caracteres prohibidos
UNSUPPORTED_DATA_TYPE ADVERTENCIA La tabla tiene columnas con tipos de datos no admitidos
UNSUPPORTED_TYPE_IN_REPLICA_IDENTITY ERROR Tipo de datos no admitido en columnas de identidad de réplica (cuando no existe ningún índice único)
TABLA_NO_REGULAR ERROR La tabla no es una tabla regular o permanente (por ejemplo, vista, temporal, partición)
NO_ES_PROPIETARIO_DE_TABLA ERROR El usuario actual no es el propietario de la tabla
HAS_PRIMARY_KEY OK La tabla tiene una clave principal
HAS_UNIQUE_INDEX OK La tabla tiene un índice único adecuado
NO_INDEX_FULL_IDENTITY ADVERTENCIA No hay índice único adecuado; se usará la identidad de fila completa (puede afectar al rendimiento)
  1. Ejecute la consulta siguiente para devolver errores y problemas detectados durante las operaciones de replicación, incluidos los errores de todo el sistema, los errores específicos de la publicación y los errores por tabla.
-- Get only system-wide errors
SELECT * FROM azure_cdc.get_health_status('', '');

-- Get system-wide errors and publication-specific errors
SELECT * FROM azure_cdc.get_health_status('my_database', 'my_publication');

Parámetros:

  • db_name (texto): Nombre de la base de datos
  • pub_name (texto): Nombre de la publicación

Comportamiento:

  • Cuando se llama con cadenas vacías para ambos parámetros (azure_cdc.get_health_status('', '')): devuelve solo los errores de todo el sistema (tipo de error "S").
  • Cuando se llama con nombres de base de datos y publicaciones válidos: devuelve tanto los errores del sistema como los errores específicos de la publicación o tabla para la publicación especificada.

Devuelve: Conjunto de (error_time timestamptz, schema_name text, table_name text, error_type char(1), error_code text, params jsonb)

Tipos de error:

Tipo de error Description
S Error en todo el sistema
P Error específico de la publicación
T Error específico de la tabla

Códigos de error:

Código de error Tipo Description
CDC_ERR_SYS_MÁX_NÚMERO_DE_TRABAJADORES_ALCANZADO S Número máximo de trabajadores alcanzados
CDC_ERR_SYS_NUMERO_MAXIMO_DE_PUBLICACIONES_ALCANZADO S Número máximo de publicaciones para la base de datos alcanzada
CDC_ERR_SYS_ONELAKE_PERMISO_DENEGADO S Permiso denegado para la acción OneLake
CDC_ERR_SYS_ONELAKE_ARTIFACT_DOES_NOT_EXIST (El artefacto de OneLake no existe) S No se encontró el artefacto OneLake
CDC_ERR_SYS_ONELAKE_COMM_FAILED S Error de comunicación de OneLake
CDC_ERR_SYS_ONELAKE_BAD_REQUEST S Solicitud incorrecta a OneLake
CDC_ERR_PUB_SNAPSHOT_TIMEOUT P Instantánea no está lista después del tiempo de espera
CDC_ERR_PUB_SNAPSHOT_WORKER_TIMEOUT P Tiempo de espera de trabajo de instantáneas para una tabla específica
El permiso fue denegado (CDC_ERR_PUB_ONELAKE_PERMISSION_DENIED) P Permiso denegado para la acción OneLake
CDC_ERR_PUB_ONELAKE_ARTIFACT_DOES_NOT_EXIST P No se ha encontrado el artefacto OneLake
CDC_ERR_PUB_ONELAKE_COMM_FAILED P Error de comunicación de OneLake
ERROR_CDC_PUB_NÚMERO_MÁXIMO_DE_TRABAJADORES_ALCANZADO P Número máximo de trabajadores alcanzado para la publicación
CDC_ERR_PUB_ONELAKE_BAD_REQUEST P Solicitud incorrecta a OneLake
CDC_ERR_PUB_DEMASIADOS_ERRORES P Demasiados errores durante el procesamiento de la publicación
CDC_ERR_TABLE_TRUNCATE_NO_ADMITIDO T La operación de truncado no es compatible (puede causar inconsistencia de datos)
  1. Ejecute la siguiente consulta para comprobar si la publicación se ha creado correctamente y la replicación cambia correctamente el flujo:

    select * from azure_cdc.tracked_publications;
    

    Compruebe si la publicación está activa y se ha generado la instantánea. También puede comprobar si se han generado lotes de cambios posteriores consultando:

    select * from azure_cdc.tracked_batches;
    
  2. Si la azure_cdc.tracked_publications vista no muestra ningún progreso en el procesamiento de cambios incrementales, ejecute la siguiente consulta SQL para comprobar si hay algún problema notificado:

    SELECT * FROM pg_stat_activity WHERE state = 'idle in transaction';
    
  3. Si no se notifica ningún problema, ejecute el comando siguiente para revisar la configuración actual de la base de datos PostgreSQL replicada. Confirme que se ha habilitado correctamente.

    SELECT * FROM pg_replication_slots;
    

    Las columnas de clave que se van a buscar aquí son slot_name y active. Cualquier valor distinto de t (true) indica un posible problema.

  4. Póngase en contacto con soporte técnico si se requiere una solución de problemas.

Identidad administrada

La identidad administrada asignada por el sistema (SAMI) del servidor flexible de Azure Database for PostgreSQL debe estar habilitada y debe ser la identidad principal. Para más información, consulte Identidad administrada asignada por el sistema para el servidor flexible de PostgreSQL.

Después de la habilitación, si el estado de la configuración de SAMI se deshabilita y luego se vuelve a habilitar, falla la replicación del servidor flexible de Azure Database for PostgreSQL en Fabric OneLake.

Compruebe que SAMI está habilitado con la consulta siguiente: show azure.service_principal_id;

Permisos SAMI

No quite los permisos de colaborador de la Identidad Administrada Asignada por el Sistema (SAMI) del servidor flexible de Azure Database for PostgreSQL en el elemento de la base de datos espejo de Fabric.

Si quita accidentalmente los permisos SAMI, Mirroring Azure Database for PostgreSQL Flexible Server no funciona según lo previsto. No se puede reflejar ningún dato nuevo desde la base de datos de origen.

Si quita los permisos SAMI de Azure Database for PostgreSQL en un servidor flexible, o si no están configurados correctamente, siga estos pasos.

  1. Agregue el SAMI de Servidor Flexible como usuario seleccionando la opción de ... elipses en el elemento de base de datos reflejado.
  2. Seleccione la opción Administrar permisos .
  3. Escriba el nombre del servidor flexible de Azure Database for PostgreSQL. Proporcione permisos de lectura y escritura .