Prepara tabelle per elaborazione

Per preparare le tabelle per l'uso in un ambiente Oracle GoldenGate per Db2 z/OS, è necessario eseguire i task riportati di seguito.


Disabilita trigger e vincoli in cascata

Disabilitare i trigger, applicare vincoli di eliminazione a catena e applicare vincoli di aggiornamento a catena alle tabelle di destinazione oppure modificarli per ignorare le modifiche apportate dall'utente del database Oracle GoldenGate. Oracle GoldenGate replica DML risultante da un trigger o da un vincolo a catena. Se lo stesso trigger o vincolo viene attivato nella tabella di destinazione, diventa ridondante a causa della versione replicata e il database restituisce un errore. Si consideri l'esempio seguente, dove le tabelle di origine sono emp_src e salary_src e le tabelle di destinazione sono emp_targ e salary_targ.

Garantisci univocità righe per tabelle

Oracle GoldenGate richiede un identificativo di riga univoco nelle tabelle di origine e di destinazione per individuare le righe di destinazione corrette per gli aggiornamenti e le eliminazioni replicati.

A meno che non esista una clausola KEYCOLS nell'istruzione TABLE o MAP, Oracle GoldenGate seleziona un identificativo di riga da utilizzare nell'ordine di priorità seguente:

  1. Chiave primaria

  2. Prima chiave univoca in modo alfanumerico che non contiene un indicatore orario o una colonna calcolata non materializzata.

  3. 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, esclusi quelli che Oracle GoldenGate non supporta in una chiave o quelli esclusi dalla configurazione di Oracle GoldenGate.

Nota: se sono presenti altre chiavi non utilizzabili in una tabella o nessuna chiave 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ù estesa e meno efficiente.

  1. Se una tabella non dispone di una chiave appropriata o se si preferisce che non vengano utilizzate 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 nei parametri Extract TABLE e Replicat MAP. La chiave specificata sostituirà qualsiasi chiave primaria o univoca esistente trovata da Oracle GoldenGate. Vedere TABLE | MAP in Reference for Oracle GoldenGate.

Utilizzo di KEYCOLS per specificare una chiave personalizzata

Se una tabella non dispone di uno dei tipi precedenti di identificativi di riga o se si preferisce non utilizzare tali identificativi, è possibile definire una chiave sostitutiva se la tabella contiene colonne che contengono sempre valori univoci. Per definire questa chiave sostitutiva, includere una clausola KEYCOLS nei parametri Extract TABLE e Replicat MAP. La chiave specificata sostituirà qualsiasi chiave primaria o univoca esistente trovata da Oracle GoldenGate. Per ulteriori informazioni, vedere Riferimento per Oracle GoldenGate.

Gestisci tabelle con colonne ROWID

Qualsiasi tentativo di inserimento in una tabella di destinazione che includa una colonna con un tipo di dati ROWID GENERATED ALWAYS (impostazione predefinita) non riuscirà con il seguente errore ODBC:

ODBC error: SQLSTATE 428C9 native database error -798. {DB2 FOR OS/390}{ODBC DRIVER}{DSN08015} DSNT408I SQLCODE = -798, ERROR: YOU CANNOT INSERT A VALUE INTO A COLUMN THAT IS DEFINED WITH THE OPTION GENERATED ALWAYS. COLUMN NAME ROWIDCOL.

È possibile eseguire una delle operazioni riportate di seguito per preparare le tabelle con colonne ROWID da elaborare in Oracle GoldenGate.

Per risolvere il problema ROWID GENERATE ALWAYS:

  1. Per la tabella di origine, creare un'istruzione Extract TABLE e utilizzare una clausola COLSEXCEPT in tale istruzione che esclude la colonna ROWID. Ad esempio:

    TABLE tab1, COLSEXCEPT (rowidcol);

    La clausola COLSEXCEPT esclude l'acquisizione e la replica della colonna ROWID nella tabella di destinazione.

  2. Per la tabella di destinazione, assicurarsi che Replicat non tenti di utilizzare la colonna ROWID come chiave. Questa operazione può essere eseguita nei seguenti modi:

    • Specificare una chiave primaria nella definizione della tabella di destinazione.

    • Se non è possibile creare una chiave, creare un parametro MAP Replicat per la tabella e utilizzare una clausola KEYCOLS in tale istruzione che contiene colonne univoche ad eccezione della colonna ROWID. Replicat utilizzerà tali colonne come chiave. Ad esempio:

      MAP tab1, TARGET tab1, KEYCOLS (num, ckey);

Gestione delle tabelle di query materializzate

Per mantenere la parità tra le tabelle delle query materializzate di origine e di destinazione (MQT), replicare le tabelle di base, ma non gli MQT. Il database di destinazione gestisce gli MQT in base alle modifiche applicate da Replicat alle tabelle di base.

Di seguito sono riportate le regole per la configurazione di queste tabelle.