Las bases de datos CDC de Oracle
Importante
La captura de datos modificados para Oracle de Attunity está en desuso. Para obtener información, consulte el anuncio.
Una instancia CDC de Oracle está asociada a una base de datos de SQL Server con el mismo nombre en la instancia de SQL Server de destino. Esta base de datos se denomina la base de datos CDC de Oracle (o la base de datos CDC).
La base de datos CDC se crea y configura mediante la Consola del diseñador CDC de Oracle y contiene los elementos siguientes:
Un esquema
cdc
que se crea habilitando la base de datos para CDC de SQL Server.Un conjunto de tablas cdc.xdbcdc_xxxx usadas por la instancia CDC de Oracle.
Un conjunto de tablas reflejadas vacías con las definiciones de las tablas capturadas en la base de datos de Oracle de origen.
Un conjunto de tablas de cambios y funciones de acceso a cambios generadas por el mecanismo CDC de SQL Server y que son idénticas a las usadas en CDC de SQL Server no de Oracle.
El esquema cdc
solo es accesible inicialmente para los miembros del rol fijo de base de datos dbowner . El acceso a las tablas y funciones de cambios está determinado por el mismo modelo de seguridad que CDC de SQL Server. Para obtener más información sobre el modelo de seguridad, vea Modelo de seguridad.
Crear la base de datos CDC
En la mayoría de los casos, la base de datos CDC se crea mediante la Consola del diseñador CDC, pero también se puede crear con un script de implementación CDC que se genera mediante la Consola del diseñador CDC. El administrador del sistema de SQL Server puede cambiar la configuración de la base de datos si es necesario (para elementos como almacenamiento, seguridad o disponibilidad).
Para obtener más información sobre cómo usar la Consola del diseñador CDC para crear tablas de base de datos y los scripts necesarios, vea Usar el Asistente para nueva instancia.
Roles de usuario de la base de datos CDC
Cuando una base de datos CDC se crea y se habilita para CDC, se crea en la base de datos CDC un usuario de base de datos denominado cdc_service y se asocia al inicio de sesión de SQL Server con el que se ha configurado el servicio CDC de Oracle. Este usuario se convierte en miembro de los roles de base de datos db_datareader, db_datawritery db_ddladmin . Si el inicio de sesión de SQL Server también está asociado al usuario dbo
, no se crea el usuario cdc_service .
Esta asignación de roles permite al servicio CDC de Oracle actualizar las tablas en el esquema cdc
con datos capturados y con información de control.
Cuando se crea una base de datos CDC y se configuran tablas CDC de Oracle de origen, el propietario de la base de datos CDC puede conceder el permiso SELECT para las tablas reflejadas y definir roles de acceso CDC de SQL Server para controlar quién tiene acceso a los datos modificados.
Tablas reflejadas
Para cada tabla capturada, <schema-name>.<table-name>, en la base de datos de origen de Oracle, se crea una tabla vacía similar en la base de datos CDC, con el mismo nombre de esquema y de tabla. Las tablas de origen de Oracle con el nombre de esquema cdc
(no distingue entre mayúsculas y minúsculas) no se pueden capturar porque el esquema cdc
de SQL Server está reservado para CDC de SQL Server.
Las tablas reflejadas están vacías; no se almacena ningún dato en ellas. Se usan para habilitar la infraestructura estándar CDC de SQL Server que usa la instancia CDC de Oracle. Para evitar que se inserten o actualicen datos en las tablas reflejadas, se deniegan todas las operaciones UPDATE, DELETE e INSERT para PUBLIC. Esto garantiza que no se puedan modificar.
Obtener acceso a datos modificados
Debido al modelo de seguridad de SQL Server empleado para obtener acceso a los datos modificados que está asociado a una instancia de captura, el usuario debe tener acceso select
para todas las columnas capturadas de la tabla reflejada asociada (los permisos de acceso a las tablas originales de Oracle no proporcionan acceso a las tablas de cambios en SQL Server). Para obtener información sobre el modelo de seguridad de SQL Server , vea Modelo de seguridad.
Además, si se especifica un rol de acceso cuando se crea la instancia de captura, el autor de las llamadas también debe ser miembro del rol de acceso especificado. Otras funciones generales de captura de datos modificados para obtener acceso a los metadatos son accesibles para todos los usuarios de la base de datos a través del rol PUBLIC, aunque el acceso a los metadatos devueltos se suele conseguir mediante un acceso exclusivo a las tablas de origen subyacentes y por pertenencia a cualquier rol de acceso definido.
Los datos modificados se pueden leer llamando a funciones especiales basadas en tablas generadas por el componente CDC de SQL Server cuando se crea una instancia de captura. Para obtener más información sobre esta función, vea Funciones de captura de datos modificados (Transact-SQL).
El acceso a datos CDC mediante el componente CDC Source de Integration Services está sujeto a las mismas reglas.
Las tablas de base de datos CDC
En esta sección se describen las tablas siguientes de la base de datos CDC.
Tablas de cambios (_CT)
Las tablas de cambios se crean a partir de las tablas reflejadas. Contienen datos modificados que se capturan de la base de datos de Oracle. La denominación de las tablas emplea la convención siguiente:
[cdc].[<capture-instance>_CT]
Cuando la captura está habilitada inicialmente para la tabla <schema-name>.<table-name>
, el nombre predeterminado de la instancia de captura es <schema-name>_<table-name>
. Por ejemplo, el nombre predeterminado de la instancia de captura para la tabla de Oracle HR.EMPLOYEES es HR_EMPLOYEES y la tabla de cambios asociada es [cdc]. [HR_EMPLOYEES_CT].
Las tablas de captura están escritas por la instancia CDC de Oracle. Se leen mediante funciones especiales con valores de tabla generadas por SQL Server cuando se crea la instancia de captura. Por ejemplo, fn_cdc_get_all_changes_HR_EMPLOYEES
. Para obtener más información sobre estas funciones CDC, vea Funciones de captura de datos modificados (Transact-SQL).
cdc.lsn_time_mapping
El componente CDC de SQL Server genera la tabla [cdc].[lsn_time_mapping] . Su uso en el caso de CDC de Oracle es diferente del uso normal.
Para CDC de Oracle, los valores LSN almacenados en esta tabla se basan en el valor del número de cambio del sistema (SCN) de Oracle asociado al cambio. Los 6 primeros bytes del valor LSN son el número SCN original de Oracle.
Además, cuando se usa CDC de Oracle, las columnas de tiempo (tran_begin_time
y tran_end_time
) almacenan la hora UTC del cambio en lugar de la hora local, como ocurre con CDC normal de SQL Server. Esto garantiza que los cambios del horario de verano no afecten a los datos almacenados en lsn_time_mapping.
cdc.xdbcdc_config
Esta tabla contiene los datos de configuración para la instancia CDC de Oracle. Se actualiza mediante la Consola del diseñador CDC. Esta tabla solo tiene una fila.
En la tabla siguiente se describen las columnas de la tabla cdc.xdbcdc_config .
Elemento | Descripción |
---|---|
version | Hace un seguimiento de la versión de la configuración de la instancia CDC. Se actualiza cada vez que se actualiza la tabla y cada vez que se agrega una nueva instancia de captura o cuando se quita una instancia de captura existente. |
connect_string | Cadena de conexión de Oracle. Un ejemplo básico es:<server>:<port>/<instance> (por ejemplo, erp.contoso.com:1521/orcl ).La cadena de conexión también puede especificar un descriptor de conexión de Oracle Net, por ejemplo (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=erp.contoso.com) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=orcl))) .Si se usa un servidor de directorio o tnsnames, la cadena de conexión puede ser el nombre de la conexión. Para obtener más información sobre las cadenas de conexión de Oracle, vea https://go.microsoft.com/fwlink/?LinkId=231153 para obtener información detallada sobre las cadenas de conexión a bases de datos de Oracle para el cliente Oracle Instant usado por el servicio CDC de Oracle. |
use_windows_authentication | Valor booleano que puede ser: 0: se proporcionan un nombre de usuario y una contraseña de Oracle para la autenticación (valor predeterminado). 1: se usa la autenticación de Windows para conectar con la base de datos de Oracle. Solo puede usar esta opción si la base de datos de Oracle está configurada para usar la autenticación de Windows. |
username | Nombre del usuario de la base de datos de Oracle de minería de registros. Solo es necesario si use_windows_authentication = 0. |
password | Contraseña del usuario de la base de datos de Oracle de minería de registros. Solo es necesario si use_windows_authentication = 0. |
transaction_staging_timeout | Tiempo, en segundos, que una transacción de Oracle no confirmada se conserva en memoria antes de escribirse en la tabla cdc.xdbcdc_staged_transactions . El valor predeterminado es 120 segundos. |
memory_limit | Límite de la cantidad de memoria, en MB, que se puede usar para almacenar los datos en memoria caché. Un valor menor hace que se escriban más transacciones en la tabla cdc.xdbcdc_staged_transactions . El valor predeterminado es 50 MB. |
opciones | Lista de opciones con el formato nombre[=valor][; ]: se usa para especificar opciones secundarias (por ejemplo, seguimiento y optimización). Vea la tabla siguiente para obtener una descripción de las opciones disponibles. |
En la tabla siguiente se describen las opciones disponibles.
Nombre | Valor predeterminado | Min | Max | estática | Descripción |
---|---|---|---|---|---|
seguimiento | False | - | - | False | Los valores disponibles son: True False en apagado |
cdc_update_state_interval | 10 | 1 | 120 | False | Tamaño (en kilobytes) de los fragmentos de memoria asignados para una transacción (una transacción puede asignar más de un fragmento). Vea la columna memory_limit en la tabla cdc.xdbcdc_config . |
target_max_batched_transactions | 100 | 1 | 1000 | True | Número máximo de transacciones de Oracle que se pueden procesar como una transacción en la actualización de tablas de cambios de SQL Server. |
target_idle_lsn_update_interval | 10 | 0 | 1 | False | Intervalo (en segundos) de actualización de la tabla lsn_time_mapping cuando las tablas capturadas no tienen ninguna actividad. |
trace_retention_period | 24 | 1 | 24*31 | False | Tiempo (en horas) que se van a conservar los mensajes en la tabla de seguimiento. |
sql_reconnect_interval | 2 | 2 | 3600 | False | Período de tiempo (en segundos) que se va a esperar antes de volver a conectar con SQL Server. Este intervalo se usa además del tiempo de espera de conexión del cliente de SQL Server. |
sql_reconnect_limit | -1 | -1 | -1 | False | Número máximo de reconexiones de SQL Server . El valor predeterminado -1 significa que el proceso intenta volver a conectarse hasta que se detiene. |
cdc_restart_limit | 6 | -1 | 3600 | False | En la mayoría de los casos, el servicio CDC reinicia automáticamente una instancia CDC finalizada de forma anómala. Esta propiedad define después de cuántos errores por hora el servicio deja de reiniciar la instancia. El valor -1 significa que la instancia se debe reiniciar siempre. El servicio vuelve para reiniciar la instancia después de cualquier actualización de la tabla de configuración. |
cdc_memory_report | 0 | 0 | 1000 | False | Si el valor del parámetro se ha cambiado, la instancia CDC imprime su informe de memoria en la tabla de seguimiento. |
target_command_timeout | 600 | 1 | 3600 | False | Tiempo de espera de comandos que funciona con SQL Server. |
source_character_set | - | - | - | True | Se puede establecer en una codificación específica de Oracle que se usará en lugar de la página de códigos de la base de datos de Oracle. Puede ser útil cuando la codificación real que los datos de caracteres están usando es diferente de la expresada por la página de códigos de la base de datos de Oracle. |
source_error_retry_interval | 30 | 1 | 3600 | False | Se usa antes de reintentar tras varios errores como un error de conexión o cuando hay una falta temporal de sincronización entre tablas del sistema. |
source_prefetch_size | 100 | 1 | 10000 | True | Tamaño del lote de captura previa. |
source_max_tables_in_query | 100 | 1 | 10000 | True | Número máximo de tablas en la cláusula WHERE antes de cambiar a leer el registro de Oracle sin filtrado de tabla. |
source_read_retry_interval | 2 | 1 | 3600 | False | Período de tiempo que el origen espera antes de intentar leer de nuevo los registros de transacciones de Oracle en EOF. |
source_reconnect_interval | 30 | 1 | 3600 | False | Período de tiempo (en segundos) que hay que esperar antes de intentar volver a conectar con la base de datos de origen. |
source_reconnect_limit | -1 | -1 | False | Número máximo de reconexiones de la base de datos de origen. El valor predeterminado -1 significa que el proceso intenta volver a conectarse hasta que se detiene. | |
source_command_timeout | 30 | 1 | 3600 | False | Tiempo de espera de conexión cuando se usa Oracle. |
source_connection_timeout | 30 | 1 | 3600 | False | Tiempo de espera de conexión que funciona con SQL Server. |
trace_data_errors | True | - | - | False | booleano. True indica que se van a registrar los errores de truncamiento y de conversión de los datos. |
CDC_stop_on_breaking_schema_changes | False | - | - | False | booleano. True indica que se va a detener cuando se detecta un cambio de esquema. False indica que se van a quitar la tabla reflejada y la instancia de la captura. |
source_oracle_home | - | - | False | Se puede establecer en una ruta de acceso o un nombre específico de Oracle Home que la instancia CDC usará para conectar con Oracle. |
cdc.xdbcdc_state
Esta tabla contiene información sobre el estado guardado de la instancia CDC de Oracle. El estado de captura se emplea en escenarios de recuperación y de conmutación por error, y para el seguimiento de estado.
En la tabla siguiente se describen las columnas de la tabla cdc.xdbcdc_state .
Elemento | Descripción |
---|---|
status | Código de estado actual para la instancia CDC de Oracle actual. El estado describe el estado actual de CDC. |
sub_status | Estado de segundo nivel que proporciona información adicional sobre el estado actual. |
active | Valor booleano que puede ser: 0: el proceso de la instancia CDC de Oracle no está activo. 1: el proceso de la instancia CDC de Oracle está activo. |
error | Valor booleano que puede ser: 0: el proceso de la instancia CDC de Oracle no está en un estado de error. 1: la instancia CDC de Oracle está en un estado de error. |
status_message | Cadena que proporciona una descripción del error o el estado. |
timestamp | Marca de tiempo con la hora (UTC) en que el estado de captura se actualizó por última vez. |
active_capture_node | Nombre del host (el host puede ser un nodo de un clúster) que está ejecutando actualmente el servicio y la instancia CDC de Oracle (que está procesando los registros de transacciones de Oracle). |
last_transaction_timestamp | Marca de tiempo con la hora (UTC) en que se escribió la última transacción en las tablas de cambios. |
last_change_timestamp | Marca de tiempo con la hora (UTC) en que se leyó el registro de cambios más reciente del registro de transacciones de Oracle de origen. Esta marca de tiempo ayuda a identificar la latencia actual del proceso CDC. |
transaction_log_head_cn | Número de cambio (CN) más reciente leído del registro de transacciones de Oracle. |
transaction_log_tail_cn | Número de cambio (CN) en el registro de transacciones de Oracle donde se sitúa la instancia CDC de Oracle en caso de que se produzca un reinicio o una recuperación. |
current_cn | Número de cambio (CN) más reciente que se sabe que está en la base de datos de origen. |
software_version | Versión interna del servicio CDC de Oracle. |
completed_transactions | Número de transacciones procesadas desde que CDC se restableció por última vez. |
written_changes | Número de registros de cambios escritos en las tablas de cambios de SQL Server . |
read_changes | Número de registros de cambios leídos del registro de transacciones de Oracle de origen. |
staged_transactions | Número de transacciones activas actualmente almacenadas provisionalmente en la tabla cdc.xdbcdc_staged_transactions . |
cdc.xdbcdc_trace
Esta tabla contiene información acerca del funcionamiento de la instancia CDC. La información almacenada en esta tabla incluye registros de errores, cambios importantes de estado y registros de seguimiento. La información de error también se escribe en el registro de eventos de Windows para asegurarse de que la información esté disponible si la tabla cdc.xcbcdc_trace no está disponible.
En la tabla siguiente se describen las columnas de la tabla cdc.xdbcdc_trace.
Elemento | Descripción |
---|---|
timestamp | Marca de tiempo UTC exacta en que se escribió el registro de seguimiento. |
type | Contiene uno de los valores siguientes. ERROR INFO TRACE |
Nodo | Nombre del nodo en el que se escribió el registro. |
status | Código de estado usado por la tabla de estado. |
sub_status | Código de subestado usado por la tabla de estado. |
status_message | Mensaje de estado usado por la tabla de estado. |
datos | Datos adicionales para aquellos casos en los que el registro de error o seguimiento contiene una carga (por ejemplo, una entrada de registro dañada). |
cdc.xdbcdc_staged_transactions
Esta tabla almacena los registros de cambios para transacciones grandes o de ejecución prolongada hasta que se captura el evento de confirmación o reversión de la transacción. El servicio CDC de Oracle ordena los registros de cambios capturados por hora de confirmación de la transacción y después por orden cronológico de cada transacción. Las entradas del registro para la misma transacción se almacenan en memoria hasta que la transacción finaliza y se escriben en la tabla de cambios de destino o se descartan (en caso de una reversión). Puesto que hay disponible una cantidad de memoria limitada, las transacciones grandes se escriben en la tabla cdc.xdbcdc_staged_transactions hasta que se completan. Las transacciones también se escriben en la tabla de ensayo cuando se ejecutan durante mucho tiempo. Por tanto, cuando se reinicia la instancia CDC de Oracle, no es necesario volver a leer los antiguos cambios de los registros de transacciones de Oracle.
En la tabla siguiente se describen las columnas de la tabla cdc.xdbcdc_staged_transactions .
Elemento | Descripción |
---|---|
transaction_id | Identificador único de la transacción que se está almacenando provisionalmente. |
seq_num | Número de fila de la tabla xcbcdc_staged_transactions para la transacción actual (empezando en 0). |
data_start_cn | Número de cambio (CN) del primer cambio en los datos de esta fila. |
data_end_cn | Número de cambio (CN) del último cambio en los datos de esta fila. |
datos | Cambios almacenados provisionalmente para la transacción en forma de blob. |
Consulte también
Diseñador de captura de datos modificados para Oracle de Attunity