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.
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:
bigintbigserialbooleanbyteacharactercharacter varyingdatedouble precisionintegernumericrealserialoidmoneysmallintsmallserialtexttime without time zone-
time with time zone(* no como clave principal) timestamp without time zonetimestamp with time zoneuuidxmljsonjsonbinetcidrmacaddrmacaddr8tsvectortsqueryint4rangeint8rangenumrangetsrangetstzrangedaterangecirclelinelsegboxpathpointpolygoninterval
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.
- 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: estadoOKgeneral: si se superan todas las comprobaciones,ERRORsi se produce un error en alguna comprobación -
data: matriz JSONB que contiene entradas de estado detalladas constatus,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) |
- 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,WARNINGoERROR -
mirroring_data: matriz JSONB que contiene entradas de estado detalladas constatus,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) |
- 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) |
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;Si la
azure_cdc.tracked_publicationsvista 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';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_nameyactive. Cualquier valor distinto det(true) indica un posible problema.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.
- Agregue el SAMI de Servidor Flexible como usuario seleccionando la opción de
...elipses en el elemento de base de datos reflejado. - Seleccione la opción Administrar permisos .
- Escriba el nombre del servidor flexible de Azure Database for PostgreSQL. Proporcione permisos de lectura y escritura .