Come garantire l'univocità delle righe nella tabella di origine e di destinazione

A meno che non venga utilizzata una clausola KEYCOLS nell'istruzione TABLE o MAP, Oracle GoldenGate seleziona un identificativo di riga da utilizzare nel seguente ordine di priorità, a seconda del numero e del tipo di vincoli registrati (vedere Impostazioni e requisiti del log delle transazioni).

Nota: la clausola KEYCOLS non è supportata per le viste JSON Relation Duality (JSON DV) e le tabelle di raccolta JSON (JCT) perché dispongono di una singola chiave predefinita (_id).

  1. Chiave primaria se non contiene colonne VARCHAR2/NVARCHAR2 estese (32K). Chiave primaria senza colonne invisibili.

  2. Chiave univoca: Chiave univoca senza colonne invisibili.

    Nel caso di un Replicat non integrato, la selezione della chiave univoca è la seguente:

    • Prima chiave univoca alfanumericamente senza colonne virtuali, nessun UDT, nessuna colonna basata su funzioni, nessuna colonna annullabile e nessuna colonna VARCHAR2/NVARCHAR2 estesa (32K). Per supportare una chiave che contiene colonne che fanno parte di un indice invisibile, è necessario utilizzare il parametro ALLOWINVISIBLEINDEXKEYS nel file GLOBALS di Oracle GoldenGate.

    • Prima chiave univoca alfanumericamente senza colonne virtuali, nessun UDT, nessuna colonna VARCHAR2/NVARCHAR2 estesa (32K) o nessuna colonna basata su funzioni, ma può includere colonne annullabili. Per supportare una chiave che contiene colonne che fanno parte di un indice invisibile, è necessario utilizzare il parametro ALLOWINVISIBLEINDEXKEYS nel file GLOBALS di Oracle GoldenGate.

  3. Chiavi univoche non annullabili: almeno una colonna di una delle chiavi univoche non deve essere nullable. Questo perché NOALLOWNULLABLEKEYS è l'impostazione predefinita.

Nota: ALLOWNULLABLEKEYS non è valido per Replicat integrato.

  1. Se non esiste alcun tipo di chiave precedente (anche se nella tabella potrebbero essere definiti altri tipi di chiavi), Oracle GoldenGate costruisce una pseudo chiave di tutte le colonne che il database consente di essere utilizzato in una chiave univoca, ad esclusione di colonne virtuali, UDT, colonne basate su funzioni, colonne VARCHAR2/NVARCHAR2 estese (32K) e qualsiasi colonna esclusa in modo esplicito dalla configurazione di Oracle GoldenGate da un utente di Oracle GoldenGate.

    Se non diversamente escluso a causa delle restrizioni precedenti, le colonne invisibili sono consentite nella pseudo chiave.

Nota: se sono presenti altre chiavi non utilizzabili in una tabella o se non sono presenti chiavi nella tabella, Oracle GoldenGate registra un messaggio appropriato nel file di report. La creazione di una chiave da tutte le colonne impedisce le prestazioni di Oracle GoldenGate nel sistema di origine. Nella destinazione, questa chiave fa sì che Replicat utilizzi una clausola WHERE più grande e meno efficiente.

Se una tabella non dispone di una chiave appropriata o se si preferisce non utilizzare le chiavi esistenti, è possibile definire una chiave sostitutiva se la tabella contiene colonne che contengono sempre valori univoci. Per definire questa chiave sostitutiva, includere una clausola KEYCOLS nel parametro Extract TABLE e nel parametro Replicat MAP. La chiave specificata sostituirà qualsiasi chiave primaria o univoca esistente trovata da Oracle GoldenGate. Per ulteriori informazioni, vedere Riferimento su parametri e funzioni per Oracle GoldenGate.

Se i criteri riportati di seguito corrispondono a Oracle Replicat, è necessario utilizzare un indice univoco corrispondente alle colonne chiave della tabella di origine.