Database Oracle CDC

Un'istanza di Oracle CDC è associata a un database di SQL Server con lo stesso nome nell'istanza di SQL Server di destinazione. Questo database è denominato database Oracle CDC o CDC.

Il database CDC viene creato e configurato utilizzando la Oracle CDC Designer Console e contiene gli elementi seguenti:

  • Uno schema cdc creato abilitando il database per SQL Server CDC.

  • Un set di tabelle cdc.xdbcdc_xxxx utilizzate dall'istanza di Oracle CDC.

  • Un set di tabelle mirror vuote con le definizioni delle tabelle acquisite nel database Oracle di origine.

  • Un set di tabelle delle modifiche e funzioni di accesso alle modifiche generate dal meccanismo di SQL Server CDC e identiche a quelle utilizzate nel normale SQL Server CDC non Oracle.

Lo schema cdc è inizialmente accessibile solo ai membri del ruolo predefinito del database dbowne . L'accesso alle tabelle delle modifiche e alle funzioni di modifica è determinato dallo stesso modello di sicurezza di SQL Server CDC. Per altre informazioni sul modello di sicurezza, vedere Modello di sicurezza.

Creazione del database CDC

Nella maggior parte dei casi, il database CDC viene creato utilizzando la console di progettazione di CDC, ma può anche essere creato con uno script di distribuzione CDC generato utilizzando CDC Designer Console. L'amministratore di sistema di SQL Server può modificare le impostazioni del database se necessario, per elementi quali l'archiviazione, la sicurezza o la disponibilità.

Per altre informazioni sull'utilizzo di CDC Designer Console per creare le tabelle di database e gli script necessari, vedere Utilizzare la New Instance Wizard.

Ruoli utente del database CDC

Quando un database CDC viene creato e abilitato per CDC, un utente del database denominato cdc_service viene creato nel database CDC e associato all'account di accesso di SQL Server con cui è stato configurato il servizio Oracle CDC. Questo utente viene impostato come membro dei ruoli del database db_datareader, db_datawritere db_ddladmin . Se l'account di accesso di SQL Server è anche associato all'utente dbo, l'utente cdc_service non viene creato.

Questa assegnazione di ruolo consente al servizio Oracle CDC di aggiornare le tabelle in base allo schema cdc con i dati acquisiti e le informazioni di controllo.

Quando viene creato un database CDC e vengono impostate le tabelle Oracle dell'origine CDC, il proprietario del database CDC può concedere l'autorizzazione SELECT delle tabelle mirror e definire ruoli di controllo di SQL Server CDC per controllare chi accede ai dati delle modifiche.

Tabelle mirror

Per ogni tabella acquisita, <nome-schema>.<nome-tabella>, nel database di origine Oracle, viene creata una tabella vuota analoga nel database CDC, con lo stesso nome di schema e di tabella. Non è possibile acquisire tabelle di origine Oracle con il nome di schema cdc (senza distinzione tra maiuscole e minuscole) perché lo schema cdc in SQL Server è riservato a SQL Server CDC.

Le tabelle mirror sono vuote; in esse non vengono archiviati dati. Vengono utilizzate per abilitare l'infrastruttura di SQL Server CDC standard utilizzata dall'istanza di Oracle CDC. Per evitare l'inserimento o l'aggiornamento di dati nelle tabelle mirror, tutte le operazioni UPDATE, DELETE e INSERT sono negate per PUBLIC. Ciò impedisce la modifica delle tabelle.

Accesso ai dati delle modifiche

Dato il modello di sicurezza SQL Server usato per ottenere accesso ai dati delle modifiche associati a un'istanza di acquisizione, è necessario concedere all'utente l'accesso select a tutte le colonne acquisite della tabella mirror associata (le autorizzazioni di accesso alle tabelle Oracle originali non forniscono accesso alle tabelle delle modifiche in SQL Server). Per informazioni sul modello di sicurezza di SQL Server, vedere Modello di sicurezza.

Se, inoltre, al momento della creazione dell'istanza di acquisizione viene specificato un ruolo di controllo, il chiamante deve essere anche un membro del ruolo di controllo specificato. Le altre funzioni generali di Change Data Capture per l'accesso ai metadati sono accessibili a tutti gli utenti del database tramite il ruolo PUBLIC, sebbene l'accesso ai metadati restituiti sia in genere controllato utilizzando l'accesso SELECT alle tabelle di origine sottostanti e tramite l'appartenenza a qualsiasi ruolo di controllo definito.

È possibile leggere i dati delle modifiche chiamando funzioni speciali basate su tabelle generate dal componente SQL Server CDC alla creazione di un'istanza di acquisizione. Per altre informazioni su questa funzione, vedere Funzioni Change Data Capture (Transact-SQL).

L'accesso ai dati CDC tramite il componente Integration Services CDC di origine è soggetto alle stesse regole.

Tabelle del database CDC

In questa sezione vengono descritte le tabelle seguenti del database CDC.

Tabelle delle modifiche (_CT)

Le tabelle delle modifiche vengono create dalle tabelle mirror. Contengono i dati delle modifiche acquisiti dal database Oracle. Le tabelle sono denominate secondo la convenzione seguente:

[cdc].[<capture-instance>_CT]

Quando l'acquisizione è abilitata inizialmente per la tabella <schema-name>.<table-name>, il nome dell'istanza di acquisizione predefinito è <schema-name>_<table-name>. Ad esempio, il nome dell'istanza di acquisizione predefinito per la tabella Oracle HR.EMPLOYEES è HR_EMPLOYEES e la tabella delle modifiche associata è [cdc]. [HR_EMPLOYEES_CT].

Le scritture nelle tabelle di acquisizione sono eseguite dall'istanza di Oracle CDC. Tali tabelle vengono lette usando funzioni speciali con valori di tabella generate da SQL Server alla creazione dell'istanza di acquisizione. Ad esempio, fn_cdc_get_all_changes_HR_EMPLOYEES. Per altre informazioni su queste funzioni CDC, vedere Funzioni Change Data Capture (Transact-SQL).

cdc.lsn_time_mapping

La tabella [cdc].[lsn_time_mapping] viene generata dal componente SQL Server CDC. L'utilizzo di tale tabella con Oracle CDC è diverso dall'utilizzo normale.

Per Oracle CDC, i valori LSN archiviati in questa tabella sono basati sul valore System Change Number (SCN) Oracle associato alla modifica. I primi 6 byte del valore LSN sono il numero SCN Oracle originale.

Inoltre, quando si utilizza Oracle CDC, nelle colonne dell'ora (tran_begin_time e tran_end_time) viene archiviata l'ora UTC della modifica anziché l'ora locale come accade con il normale servizio SQL Server CDC. In questo modo, le modifiche dell'ora legale non influiscono sui dati archiviati in lsn_time_mapping.

cdc.xdbcdc_config

In questa tabella sono contenuti i dati di configurazione per l'istanza di Oracle CDC. La tabella viene aggiornata tramite CDC Designer Console. La tabella ha una sola riga.

Nella tabella seguente sono descritte le colonne della tabella cdc.xdbcdc_config .

Articolo Descrizione
versione Tiene traccia della versione della configurazione dell'istanza di CDC. Viene aggiornato ogni volta che si aggiorna la tabella e ogni volta che si aggiunge una nuova istanza di acquisizione o si rimuove un'istanza di acquisizione esistente.
connect_string Stringa di connessione Oracle. Esempio di base:

<server>:<port>/<instance> (ad esempio erp.contoso.com:1521/orcl).

Nella stringa di connessione è anche possibile specificare un descrittore della connessione di rete Oracle, ad esempio (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=erp.contoso.com) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=orcl))).

Se si utilizza un server di elenchi in linea o nomi TNS, la stringa di connessione può essere il nome della connessione.

Per altre informazioni sulle stringhe di connessione Oracle, vedere https://go.microsoft.com/fwlink/?LinkId=231153 per dettagli sulle stringhe di connessione al database Oracle per l'istanza di Oracle Instant Client usata dal servizio Oracle CDC.
use_windows_authentication Valore booleano che può essere:

0: vengono forniti nome utente e password Oracle per l'autenticazione (valore predefinito)

1: per connettersi al database Oracle viene utilizzata l'autenticazione di Windows. È possibile utilizzare questa opzione solo se il database Oracle è configurato per l'utilizzo dell'autenticazione di Windows.
username Nome dell'utente del database Oracle di log mining. È obbligatorio solo se use_windows_authentication = 0.
password Password dell'utente del database Oracle di log mining. È obbligatorio solo se use_windows_authentication = 0.
transaction_staging_timeout Tempo, in secondi, durante il quale una transazione Oracle viene mantenuta in memoria prima di essere scritta nella tabella cdc.xdbcdc_staged_transactions . Il valore predefinito è 120 secondi.
memory_limit Limite della quantità di memoria, in MB, che è possibile utilizzare per la memorizzazione nella cache di dati in memoria. Con un'impostazione inferiore vengono scritte più transazioni nella tabella cdc.xdbcdc_staged_transactions . Il valore predefinito è 50 MB.
Opzioni Un elenco di opzioni nel formato nome[=valore] [; ] - viene utilizzato per specificare opzioni secondarie, ad esempio traccia o ottimizzazione. Per una descrizione delle opzioni disponibili, vedere la tabella di seguito.

Nella tabella seguente vengono descritte le opzioni disponibili.

Nome Default Min Max Statico Descrizione
trace Falso - - Falso I valori disponibili sono:

Vero

False

on

spento
cdc_update_state_interval 10 1 120 Falso La dimensione in Kbyte dei blocchi di memoria allocati per una transazione; una transazione può allocare più di un blocco. Vedere la colonna memory_limit nella tabella cdc.xdbcdc_config .
target_max_batched_transactions 100 1 1000 Vero Numero massimo di transazioni Oracle che è possibile elaborare come una transazione nell'aggiornamento delle tabelle SQL Server CT.
target_idle_lsn_update_interval 10 0 1 Falso L'intervallo, in secondi, per l'aggiornamento della tabella lsn_time_mapping quando nelle tabelle acquisite non è presente alcuna attività.
trace_retention_period 24 1 24*31 Falso Periodo di tempo, in ore, durante cui i messaggi vengono mantenuti nella tabella di traccia.
sql_reconnect_interval 2 2 3600 Falso Periodo di tempo, in secondi, che deve trascorrere prima della riconnessione a SQL Server. Questo intervallo viene usato in aggiunta al timeout della connessione del client SQL Server.
sql_reconnect_limit -1 -1 -1 Falso Numero massimo di riconnessioni di SQL Server. Il valore predefinito -1 indica che vengono effettuati tentativi di riconnessione fino all'arresto del processo.
cdc_restart_limit 6 -1 3600 Falso Nella maggior parte dei casi, tramite il servizio CDC un'istanza di CDC terminata in modo anomalo viene riavviata automaticamente. Con questa proprietà si definisce il numero di errori all'ora dopo i quali viene arrestato il riavvio dell'istanza. Il valore -1 indica che l'istanza deve essere sempre riavviata.

Dopo qualsiasi aggiornamento della tabella di configurazione, ricomincia il riavvio dell'istanza.
cdc_memory_report 0 0 1000 Falso Se il valore del parametro è stato modificato, nella tabella di traccia viene stampato il report della memoria dell'istanza di CDC.
target_command_timeout 600 1 3600 Falso Timeout del comando utilizzato con SQL Server.
source_character_set - - - Vero Può essere impostato su una specifica codifica Oracle da usare in sostituzione della tabella codici del database Oracle. Può essere utile quando l'effettiva codifica dei dati character in uso è diversa da quella espressa dalla tabella codici del database Oracle.
source_error_retry_interval 30 1 3600 Falso Viene utilizzato prima di ripetere il tentativo in caso di diversi errori, ad esempio un errore di connessione o una temporanea mancanza di sincronizzazione tra le tabelle di sistema.
source_prefetch_size 100 1 10000 Vero Dimensioni del batch di prelettura.
source_max_tables_in_query 100 1 10000 Vero Numero massimo di tabelle nella clausola WHERE prima di passare alla lettura del log Oracle senza l'applicazione di filtri alle tabelle.
source_read_retry_interval 2 1 3600 Falso Periodo di tempo di attesa dell'origine prima di tentare di leggere nuovamente i log delle transazioni Oracle al raggiungimento di EOF.
source_reconnect_interval 30 1 3600 Falso Tempo, in secondi, di attesa prima di tentare la riconnessione al database di origine.
source_reconnect_limit -1 -1 Falso Numero massimo di riconnessioni al database di origine. Il valore predefinito -1 indica che vengono effettuati tentativi di riconnessione fino all'arresto del processo.
source_command_timeout 30 1 3600 Falso Timeout della connessione utilizzato con Oracle.
source_connection_timeout 30 1 3600 Falso Timeout della connessione utilizzato con SQL Server.
trace_data_errors Vero - - False Booleano. Se il valore èTrue vengono registrati gli errori di conversione dei dati e di troncamento.
CDC_stop_on_breaking_schema_changes Falso - - Falso Booleano. Se il valore èTrue il servizio si arresta quando viene individuata una modifica di rilievo dello schema.

Se èFalse la tabella mirror e l'istanza di acquisizione vengono eliminate.
source_oracle_home - - Falso Può essere impostato su un percorso Oracle Home o un nome Oracle Home specifico utilizzato dall'istanza di CDC per la connessione a Oracle.

cdc.xdbcdc_state

In questa tabella sono contenute informazioni sullo stato persistente dell'istanza di Oracle CDC. Lo stato di acquisizione viene utilizzato negli scenari di recupero e failover e per il monitoraggio dello stato.

Nella tabella seguente sono descritte le colonne della tabella cdc.xdbcdc_state .

Articolo Descrizione
stato Codice dello stato corrente per l'istanza di Oracle CDC corrente. Descrive lo stato corrente di CDC.
sub_status Stato di secondo livello che fornisce informazioni aggiuntive sullo stato corrente.
active Valore booleano che può essere:

0: il processo dell'istanza di Oracle CDC non è attivo.

1: il processo dell'istanza di Oracle CDC è attivo.
Errore Valore booleano che può essere:

0: il processo dell'istanza di Oracle CDC non è in stato di errore.

1: il processo dell'istanza di Oracle CDC è in stato di errore.
status_message Stringa che fornisce una descrizione dell'errore o dello stato.
timestamp Timestamp con l'ora (UTC) dell'ultimo aggiornamento dello stato di acquisizione.
active_capture_node Nome dell'host, che può essere un nodo su un cluster, in cui sono attualmente in esecuzione il servizio Oracle CDC e l'istanza di Oracle CDC, mediante cui vengono elaborati i log delle transazioni Oracle.
last_transaction_timestamp Timestamp con l'ora (UTC) della scrittura dell'ultima transazione nelle tabelle delle modifiche.
last_change_timestamp Timestamp con l'ora (UTC) della lettura del record delle modifiche più recente dal log delle transazioni Oracle di origine. Il timestamp consente di identificare la latenza corrente del processo CDC.
transaction_log_head_cn Numero della modifica (CN) più recente letto dal log delle transazioni Oracle.
transaction_log_tail_cn Numero della modifica (CN) nel log delle transazioni Oracle in corrispondenza del quale viene riposizionata l'istanza di Oracle CDC in caso di riavvio o recupero.
current_cn Numero della modifica (CN) più recente di cui è nota la presenza nel database di origine.
software_version Versione interna del servizio Oracle CDC.
completed_transactions Numero di transazioni elaborate dall'ultima reimpostazione di CDC.
written_changes Numero dei record delle modifiche scritti nelle tabelle delle modifiche di SQL Server.
read_changes Numero dei record delle modifiche letti dal log delle transazioni Oracle di origine.
staged_transactions Numero delle transazioni attualmente attive gestite temporaneamente nella tabella cdc.xdbcdc_staged_transactions .

cdc.xdbcdc_trace

La tabella contiene informazioni sull'operazione dell'istanza di CDC. Le informazioni archiviate in questa tabella includono record di errore, modifiche rilevanti allo stato e record di traccia. Le informazioni sull'errore vengono inoltre scritte nel registro eventi di Windows per garantirne la disponibilità se la tabella cdc.xcbcdc_trace non è disponibile.

Nella tabella seguente vengono descritte le colonne della tabella cdc.xdbcdc_trace.

Articolo Descrizione
timestamp Timestamp UTC esatto della scrittura del record di traccia.
type Contiene uno dei valori seguenti.

ERROR

INFO

TRACE
node Nome del nodo in cui è stato scritto il record.
stato Codice di stato utilizzato dalla tabella dello stato.
sub_status Codice di stato secondario utilizzato dalla tabella dello stato.
status_message Messaggio di stato utilizzato dalla tabella dello stato.
data Dati aggiuntivi per i casi in cui il record di errore o di traccia contiene un payload, ad esempio un record di log danneggiato.

cdc.xdbcdc_staged_transactions

In questa tabella vengono archiviati i record delle modifiche per le transazioni di grandi dimensioni o con esecuzione prolungata fino all'acquisizione del commit delle transazioni o dell'evento di rollback. I record del log acquisiti vengono ordinati dal servizio Oracle CDC in base all'ora dell'ultimo commit della transazione, quindi in base all'ordine cronologico per ciascuna transazione. I record del log per la stessa transazione vengono archiviati in memoria fino al termine della transazione, quindi vengono scritti nella tabella delle modifiche di destinazione o eliminati, in caso di rollback. Poiché la quantità di memoria disponibile è limitata, le transazioni di grandi dimensioni vengono scritte nella tabella cdc.xdbcdc_staged_transactions fino al completamento della transazione. Le transazioni vengono inoltre scritte nella tabella di staging in caso di esecuzione prolungata. Pertanto, al riavvio dell'istanza di Oracle CDC, non è necessario rileggere le modifiche precedenti dai log delle transazioni Oracle.

Nella tabella seguente sono descritte le colonne della tabella cdc.xdbcdc_staged_transactions .

Articolo Descrizione
transaction_id Identificatore univoco della transazione gestita temporaneamente.
seq_num Numero di riga xcbcdc_staged_transactions per la transazione corrente (inizia con 0).
data_start_cn Numero della prima modifica (CN) nei dati in questa riga.
data_end_cn Numero dell'ultima modifica (CN) nei dati in questa riga.
data Modifiche gestite temporaneamente per la transazione nel formato di BLOB.

Vedi anche

Progettazione Change Data Capture per Oracle di Attunity