Compartir a través de


Tratamiento de errores

Una instancia CDC de Oracle extrae los cambios de una base de datos de origen de Oracle única (un clúster de Oracle RAC se considera una base de datos única) y escribe los cambios confirmados en las tablas de cambios de una base de datos CDC en la instancia de SQL Server de destino.

Una instancia CDC mantiene su estado en una tabla del sistema denominada cdc.xdbcdc_state. Esta tabla se puede consultar en cualquier momento para buscar el estado de la instancia CDC. Para obtener más información sobre la tabla cdc.xdbcdc_state, consulte cdc.xdbcdc_state.

En la tabla siguiente se describen los estados de la instancia CDC en la tabla xdbcdc_state.

Para cada estado, se muestran las dos indicaciones siguientes para las columnas correspondientes de la tabla cdc.xdbcdc_state:

  • La instancia no está activa (actualmente no hay ningún proceso de Windows que lo controle). Si el valor de la columna activa es 1, se está ejecutando un subproceso del servicio CDC de Oracle que controla esta instancia CDC de Oracle específica.

  • Si el valor de la columna de error es 0, la instancia CDC de Oracle no está en una condición de error. Si el valor de la columna de error es 1, hay un error que impide que la instancia CDC de Oracle procese los cambios.

    Si la columna de error tiene un valor de 1 y el valor de la columna activa también es 1, se produce un error recuperable para la instancia CDC de Oracle, que se puede resolver automáticamente. Si la columna de error tiene un valor de 1 y la columna activa tiene un valor de 0, en la mayoría de los casos se puede necesitar una solución alternativa manual para resolver el problema antes de que se pueda reanudar el procesamiento.

En la tabla siguiente se describen los distintos códigos de estado que la instancia CDC de Oracle puede notificar en su tabla de estado.

Estado Código de estado activo Código de estado de error Descripciones
ABORTADO 0 1 La instancia CDC de Oracle no se está ejecutando. El subestado ABORTED indica que la instancia CDC de Oracle estaba ACTIVA y, a continuación, se ha detenido inesperadamente.

La instancia principal del servicio CDC de Oracle establece el subestado ABORTED cuando detecta que la instancia CDC de Oracle no se está ejecutando mientras su estado es ACTIVO.
ERROR 0 1 La instancia CDC de Oracle no se está ejecutando. El estado ERROR indica que la instancia CDC era ACTIVA pero, a continuación, encontró un error que no se puede recuperar y se deshabilitó. El estado ERROR contiene los siguientes códigos de subestado:

MISCONFIGURED: se detectó un error de configuración irrecuperable.

PASSWORD-REQUIRED: No hay ninguna contraseña establecida para el Diseñador de captura de datos modificados para Oracle de Attunity o la contraseña configurada no es válida. Esto puede deberse a un cambio en la contraseña de clave asimétrica del servicio.
CORRIENTE 1 0 La instancia CDC se está ejecutando y está procesando registros de cambios. El estado RUNNING contiene los siguientes códigos de subestado:

IDLE: todos los registros de cambio se procesaron y almacenaron en las tablas de control de destino (_CT). No hay ninguna transacción activa con las tablas de control.

PROCESAMIENTO: hay registros de cambios que se están procesando que aún no se escriben en las tablas de control (_CT).
DETENIDO 0 0 La instancia CDC no se está ejecutando. El subestado STOP indica que la instancia CDC era ACTIVA y, a continuación, se detuvo correctamente.
SUSPENDIDO 1 1 La instancia CDC se está ejecutando, pero el procesamiento se suspende debido a un error recuperable. El estado SUSPENDED contiene los siguientes códigos de subestado:

DISCONNECTED: no se puede establecer la conexión con la base de datos de Oracle de origen. El procesamiento se reanudará una vez restaurada la conexión.

STORAGE: el almacenamiento está lleno. El procesamiento se reanudará cuando el almacenamiento esté disponible. En algunos casos, es posible que este estado no aparezca porque no se puede actualizar la tabla de estado.

LOGGER: el registrador está conectado a Oracle, pero no puede leer los registros de transacciones de Oracle debido a un problema temporal.
ERROR DE DATOS x x Este código de estado solo se usa para la tabla xdbcdc_trace . No aparece en la tabla xdbcdc_state . Los registros de seguimiento con este estado indican un problema con un registro de Oracle. El registro incorrecto se almacena en la columna de datos como BLOB. El estado DATAERROR contiene los siguientes códigos de subestado:

BADRECORD: No se pudo interpretar el registro adjunto.

CONVERT-ERROR: no se pudieron convertir los datos de algunas columnas en las columnas de destino de la tabla de captura. Este estado solo puede aparecer si la configuración especifica que los errores de conversión deben generar registros de seguimiento.

Dado que el estado del servicio CDC de Oracle se almacena en SQL Server, puede haber casos en los que el valor de estado de la base de datos podría no reflejar el estado real del servicio. El escenario más común es cuando el servicio pierde su conexión a SQL Server y no puede reanudarla (por cualquier motivo). En ese caso, el estado almacenado en cdc.xdbcdc_state se vuelve obsoleto. Si la última marca de tiempo de actualización (UTC) tiene más de un minuto de antigüedad, es probable que el estado esté obsoleto. En este caso, use el Visor de eventos de Windows para buscar información adicional sobre el estado del servicio.

Tratamiento de errores

En esta sección se describe cómo el servicio CDC de Oracle controla los errores.

Registro

El servicio CDC de Oracle crea información de error en uno de los siguientes lugares.

  • El registro de eventos de Windows, que se usa con errores de registro y para indicar eventos del ciclo de vida del servicio CDC de Oracle (inicio, detención, (re)conexión a la instancia de SQL Server de destino).

  • La tabla MSXDBCDC.dbo.xdbcdc_trace, que se usa para el registro general y el seguimiento por parte del proceso principal del servicio CDC de Oracle.

  • La <tabla cdc-database>.cdc.xdbcdc_trace, utilizada para el registro de eventos y rastreo en instancias CDC de Oracle. Esto significa que los errores relacionados con una instancia CDC de Oracle específica se registran en la tabla de seguimiento de esa instancia.

El servicio CDC de Oracle registra la información cuando el servicio:

  • Es iniciado o detenido por el administrador de control de servicios.

  • No se puede conectar a la instancia de SQL Server asociada y cuando se establece correctamente una conexión después de un error.

  • Se produce un error al iniciar las instancias del servicio CDC de Oracle.

  • Detecta que se ha abortado una instancia CDC de Oracle.

  • Encuentra un error inesperado.

La instancia CDC registra la información cuando la instancia:

  • Está habilitado o deshabilitado.

  • Encuentra un error.

  • Se recupera de un error que se puede recuperar.

La tabla de seguimiento también se usa para grabar información detallada de seguimiento para solucionar problemas.

Gestión de errores de conexión del origen Oracle

El servicio CDC de Oracle necesita una conexión persistente con la base de datos de Oracle de origen. Muchos errores de conexión que no están relacionados con la configuración del servicio (como los errores de red) se consideran transitorios. Por lo tanto, si el servicio CDC de Oracle no puede establecer la conexión con la base de datos de Oracle (ya sea al inicio o durante el trabajo después de una desconexión), el servicio cambia su estado a SUSPENDED/DISCONNECTED y entra en un bucle de reintento en el que se reintenta la conexión a intervalos regulares. Cuando se vuelve a establecer la conexión, el procesamiento continúa.

Otros tipos de errores de conexión no son transitorios (por ejemplo, credenciales incorrectas, privilegios insuficientes y dirección de base de datos incorrecta). Cuando se producen estos errores, el estado del servicio CDC de Oracle se establece en ERROR/MISCONFIGURED o en ERROR/PASSWORD-REQUIRED y el servicio está deshabilitado. Cuando el usuario corrige el error subyacente, la instancia CDC de Oracle debe volver a habilitarse manualmente para que se reanude el procesamiento.

Cuando no está claro si el error es transitorio, es mejor suponer que es transitorio.

Manejo de errores de conexión al SQL Server de destino

El servicio CDC de Oracle necesita una conexión persistente a la instancia de SQL Server de destino. Esta conexión se usa para:

  • Asegúrese de que no haya ningún otro servicio con el mismo nombre que funcione actualmente con esta instancia de SQL Server.

  • Compruebe qué instancia CDC de Oracle está habilitada o deshabilitada e inicie (o detenga) su subproceso.

Cuando el servicio establece una conexión con la instancia de SQL Server de destino y comprueba que es el único servicio CDC de Oracle con este nombre que funciona, puede comprobar qué instancias CDC de Oracle están habilitadas e iniciar sus procesos de control (después, el servicio detiene estos procesos cuando están deshabilitados). Las instancias CDC de Oracle usan sus conexiones de SQL Server para trabajar con la base de datos CDC de la instancia CDC de Oracle.

La forma en que se controlan los errores cuando se produce un error en la conexión con SQL Server de destino depende de si los errores son transitorios.

En el caso de errores no transitorios conocidos (como credenciales incorrectas, privilegios insuficientes, información de conexión incorrecta), el servicio registra un error en el registro de eventos de Windows y se detiene (no puede escribir en la tabla de seguimiento porque no se puede conectar a SQL Server). En este caso, el usuario debe resolver el error y reiniciar el servicio de Windows CDC de Oracle.

En el caso de los errores transitorios y los errores inesperados, la operación se reintenta varias veces y, si el error persiste durante un período de tiempo significativo, el servicio CDC detiene sus subprocesos de instancia CDC y vuelve a su intento de conexión inicial (por este momento, es posible que un servicio CDC de Oracle en otra máquina ya haya tomado el control del servicio CDC con nombre).

Gestión de errores de almacenamiento completo en SQL Server de destino

Cuando el servicio CDC de Oracle detecta que no puede insertar nuevos datos modificados en la base de datos CDC de SQL Server de destino, escribe una advertencia en el registro de eventos e intenta insertar un registro de seguimiento (aunque esto puede producir un error por el mismo motivo). A continuación, vuelve a intentar la operación en un intervalo específico hasta que se realiza correctamente.

Control de errores CDC de Oracle

La instancia CDC de Oracle lee el registro de transacciones de Oracle y lo procesa. Si el procesamiento de CDC encuentra un error, se notifica en la tabla cdc.xdbcdc_state y el usuario debe intervenir manualmente en función del error reportado.

Por ejemplo, la instancia CDC de Oracle puede no estar activa durante una duración prolongada y los archivos de registro de transacciones de Oracle necesarios ya no están disponibles. En este caso, el DBA de Oracle debe restaurar los registros necesarios para que la instancia CDC de Oracle reanude el procesamiento.

Control de errores inesperados de instancias CDC de Oracle

El servicio CDC de Oracle supervisa sus subprocesos de instancia CDC. Cuando se anula un subproceso de instancia CDC, el servicio CDC lo deshabilita en la tabla MSXDBCDC.dbo.xdbcdc_databases y actualiza su estado de CDC.XDBCDC_STATE a ANULADO. En este caso, el cuadro de diálogo informe de errores estándar de Windows se usa para notificar este error para su posterior análisis.

Véase también

Diseñador de captura de datos modificados para Oracle de Attunity
La instancia CDC de Oracle