DDL

Valido per

Estrai e Replicat

Nota: la replica DDL è supportata solo tra i database Oracle e Oracle e tra i database MySQL e MySQL.

Descrizione

Utilizzare il parametro DDL per effettuare le operazioni riportate di seguito.

Se utilizzato senza opzioni, il parametro DDL non esegue alcun filtro e provoca la propagazione di tutte le operazioni DDL come indicato di seguito.

Se utilizzato con le opzioni, il parametro DDL funge da agente di filtro per includere o escludere le operazioni DDL in base a:

In un file di parametri è possibile utilizzare un solo parametro DDL, ma è possibile combinare più opzioni di inclusione ed esclusione per filtrare DDL al livello richiesto.

Nota: non utilizzare il parametro DDL per una pompa dati Extract. Questi tipi di processo non consentono il mapping o la conversione di DDL e propagheranno automaticamente i record DDL in modalità pass-through. DDL eseguito su una tabella di origine (ad esempio ALTER TABLE TableA...) verrà applicato da Replicat con lo stesso nome di tabella (ALTER TABLE TableA). Impossibile eseguire il mapping come ALTER TABLE TableB.

Per ulteriori informazioni su come utilizzare il supporto DDL di Oracle GoldenGate, vedere Oracle: replica DDL e MySQL: replica DDL nella documentazione dei microservizi Oracle GoldenGate.

Sintassi

DDL [
{AUTOSCHEMA}
{INCLUDE | EXCLUDE}
  [, ALLOWEMPTYOBJECT]
  [, ALLOWEMPTYOWNER]
  [, MAPPED | UNMAPPED | OTHER | ALL]
  [, OPTYPE <type>]
  [, OBJTYPE '<type>']
  [, OBJNAME <name>]
  [, INSTR '<string>']
  [, INSTRWORDS '<word_list>']
  [, INSTRCOMMENTS '<comment_string>']
  [, INSTRCOMMENTSWORDS '<word_list>']
  [, SOURCECATALOG <catalog> | ALLCATALOGS]
  [, STAYMETADATA]
  [, EVENTACTIONS (<action>)]
]
[...]

AUTOSCHEMA

Valido per Replicat in MySQL per la replica dei dati Oracle, Oracle per MySQL e MySQL per MySQL.

L'opzione del parametro DDL AUTOSCHEMA viene utilizzata per abilitare la funzionalità di evoluzione automatica dello schema. Questa opzione è disabilitata per impostazione predefinita.

Sintassi

DDL AUTOSCHEMA

Solo le operazioni DDL MAPPED sono rilevanti per l'evoluzione automatica dello schema. Pertanto, i nomi degli oggetti specificati come parte della clausola OBJNAME nei criteri di inclusione/esclusione devono corrispondere ai nomi delle tabelle di destinazione (e non ai nomi delle tabelle di origine).

Quando si utilizza OBJNAME con MAPPED in un file dei parametri Replicat, il valore per OBJNAME deve fare riferimento al nome specificato con la clausola TARGET dell'istruzione MAP.

Per ulteriori informazioni, vedere Utilizzo dell'evoluzione automatica dello schema

INCLUDE | EXCLUDE

DDL Opzioni di filtro

Le opzioni di sintassi riportate di seguito consentono di filtrare e utilizzare il file DDL replicato da Oracle GoldenGate. Queste opzioni si applicano alle clausole INCLUDE e EXCLUDE del parametro DDL e ad altri parametri che supportano la replica DDL.

Utilizzare INCLUDE o EXCLUDE per identificare l'inizio di una clausola di inclusione o esclusione.

La clausola di inclusione o esclusione deve essere costituita dalla parola chiave INCLUDE o EXCLUDE seguita da qualsiasi combinazione valida delle altre opzioni di filtro del parametro DDL.

Se si utilizza EXCLUDE, è necessario creare una clausola INCLUDE corrispondente. Ad esempio, le seguenti espressioni non sono valide:

DDL EXCLUDE OBJNAME "hr".*

È tuttavia possibile utilizzare uno dei metodi riportati di seguito.

DDL INCLUDE ALL, EXCLUDE OBJNAME "hr"."*"
DDL INCLUDE OBJNAME fin.* EXCLUDE OBJNAME "fin.ss"

Un valore EXCLUDE ha la priorità su qualsiasi valore INCLUDEs contenente gli stessi criteri. È possibile utilizzare più clausole di inclusione ed esclusione.

Non includere oggetti DDL installati da Oracle GoldenGate in un parametro DDL, in un parametro TABLE o in un parametro MAP, né in un parametro TABLEEXCLUDE o MAPEXCLUDE. Assicurarsi che le specifiche dei caratteri jolly in tali parametri non includano gli oggetti DDL installati da Oracle GoldenGate. Questi oggetti non devono far parte della configurazione di Oracle GoldenGate, ma il processo Extract deve essere consapevole delle operazioni su di essi ed è per questo che non è necessario escluderli esplicitamente dalla configurazione con un'istruzione dei parametri EXCLUDE, TABLEEXCLUDE o MAPEXCLUDE.

ALLOWEMPTYOBJECT

Utilizzare ALLOWEMPTYOBJECT per consentire a una specifica OBJNAME di elaborare DDL che non contiene un nome oggetto. Ad esempio:

DDL INCLUDE OBJNAME sch.* ALLOWEMPTYOBJECT

ALLOWEMPTYOWNER

Utilizzare ALLOWEMPTYOWNER per consentire a una specifica OBJNAME di elaborare DDL che non contiene un nome proprietario. Ad esempio:

DDL INCLUDE OBJNAME pdb.sch.* ALLOWEMPTYOWNER

EVENTACTIONS (action)

Fa sì che il processo Extract o Replicat esegua un'azione definita in base a un record DDL nel log o nel trail delle transazioni, noto come record evento. L'evento DDL viene attivato se il record DDL è idoneo per essere scritto nel trail da Extract o da un data pump oppure per essere eseguito da Replicat, come determinato dalle altre opzioni di filtro del parametro DDL. È possibile utilizzare questo sistema per personalizzare l'elaborazione in base agli eventi del database.

Per <action>, vedere EVENTACTIONS sotto i parametri MAP e TABLE.

Linee guida per l'utilizzo di EVENTACTIONS nei record DDL:

EVENTACTIONS non supporta i seguenti oggetti DDL poiché sono oggetti derivati:

MAPPED | UNMAPPED | OTHER | ALL

Utilizzare MAPPED, UNMAPPED, OTHER e ALL per applicare INCLUDE o EXCLUDE in base all'ambito dell'operazione DDL.

DDL EXCLUDE ALL è un'opzione di elaborazione speciale che gestisce i metadati degli oggetti aggiornati per Oracle GoldenGate, bloccando la replica delle operazioni DDL stesse. È possibile utilizzare DDL EXCLUDE ALL quando si utilizza un metodo diverso da Oracle GoldenGate per applicare DDL alla destinazione, ma si desidera che Oracle GoldenGate replichi le modifiche ai dati negli oggetti di destinazione. Fornisce i metadati correnti a Oracle GoldenGate man mano che gli oggetti cambiano, impedendo così l'arresto e l'avvio dei processi Oracle GoldenGate. Le seguenti condizioni speciali si applicano a DDL EXCLUDE ALL:

OBJNAME name

Utilizzare OBJNAME per applicare INCLUDE o EXCLUDE al nome completo di un oggetto. Per specificare correttamente i nomi degli oggetti in due e tre parti e i caratteri jolly, vedere Using Wildcards in Command Arguments.

Racchiudere i nomi degli oggetti con distinzione tra maiuscole e minuscole tra virgolette.

Esempio senza distinzione tra maiuscole e minuscole:

DDL INCLUDE OBJNAME accounts.*

Esempio con distinzione tra maiuscole e minuscole:

DDL INCLUDE OBJNAME accounts."cust"

Non utilizzare OBJNAME per l'oggetto Oracle USER, poiché OBJNAME prevede <owner.object> o <container.owner.object>, mentre USER dispone solo di uno schema.

Quando si utilizza OBJNAME con MAPPED in un file dei parametri Replicat, il valore per OBJNAME deve fare riferimento al nome specificato con la clausola TARGET dell'istruzione MAP. Ad esempio, data la seguente istruzione MAP, il valore corretto è OBJNAME fin2.*.

MAP fin.exp_*, TARGET fin2.*;

Nell'esempio seguente, un'istruzione CREATE TABLE viene eseguita come indicato di seguito in <source>.

CREATE TABLE fin.exp_phone;

La stessa istruzione viene eseguita come indicato di seguito sulla destinazione.

CREATE TABLE fin2.exp_phone;

Se un proprietario di destinazione non è specificato nell'istruzione MAP, Replicat lo mappa all'utente del database specificato con il parametro USERIDALIAS.

Per DDL che crea oggetti derivati, ad esempio un trigger, il valore di OBJNAME deve essere il nome dell'oggetto di base e non il nome dell'oggetto derivato.

Ad esempio, per includere la seguente istruzione DDL, il valore corretto è hr.accounts e non hr.insert_trig.

CREATE TRIGGER hr.insert_trig ON hr.accounts;

Per le operazioni RENAME, il valore di OBJNAME deve essere il nuovo nome di tabella. Ad esempio, per includere la seguente istruzione DDL, il valore corretto è hr.acct.

ALTER TABLE hr.accounts RENAME TO acct;

OBJTYPE <type>

Utilizzare OBJTYPE per applicare INCLUDE o EXCLUDE a un tipo specifico di oggetto di database. Per <type>, utilizzare qualsiasi tipo di oggetto valido per il database, ad esempio TABLE, INDEX e TRIGGER. Per un log delle viste materializzate e delle viste materializzate Oracle, i tipi corretti sono rispettivamente snapshot e snapshot log. Racchiudere il nome del tipo di oggetto tra apici. Ad esempio:

DDL INCLUDE OBJTYPE 'INDEX'
DDL INCLUDE OBJTYPE 'SNAPSHOT'

Per l'oggetto Oracle di tipo USER, non utilizzare l'opzione OBJNAME, poiché OBJNAME prevede owner.object o <container.owner.object>, mentre USER dispone solo di uno schema.

OPTYPE <type>

Utilizzare OPTYPE per applicare INCLUDE o EXCLUDE a un tipo specifico di operazione DDL, ad esempio CREATE, ALTER e RENAME. Per <type>, utilizzare qualsiasi comando DDL valido per il database. Ad esempio, per includere le operazioni ALTER, la sintassi corretta è la seguente:

DDL INCLUDE OPTYPE ALTER

INSTR string

Utilizzare INSTR per applicare le istruzioni INCLUDE o EXCLUDE alle istruzioni DDL che contengono una stringa di caratteri specifica all'interno della sintassi del comando stessa, ma non all'interno dei commenti. Ad esempio, il comando seguente esclude DDL che crea un indice.

DDL INCLUDE ALL EXCLUDE INSTR 'CREATE INDEX'

Racchiudere la stringa tra apici. Per la ricerca di stringhe non viene fatta distinzione tra maiuscole e minuscole.

INSTR non supporta le virgolette singole (' ') all'interno della stringa e non supporta i valori NULL.

INSTRCOMMENTS comment_string

(Valido per Oracle) Usare INSTRCOMMENTS per applicare le istruzioni INCLUDE o EXCLUDE alle istruzioni DDL che contengono una stringa di caratteri specifica all'interno di un commento, ma non all'interno del comando DDL stesso. Utilizzando INSTRCOMMENTS, è possibile utilizzare i commenti come agente di filtro.

Ad esempio, quanto segue esclude le istruzioni DDL che includono la stringa 'solo origine' nei commenti.

DDL INCLUDE ALL EXCLUDE INSTRCOMMENTS 'SOURCE ONLY'

In questo esempio le istruzioni DDL, come le seguenti, non vengono replicate.

CREATE USER john IDENTIFIED BY john /<source only>/;

Racchiudere la stringa tra virgolette singole. Per la ricerca delle stringhe non viene applicata la distinzione tra maiuscole e minuscole. È possibile combinare INSTR e INSTRCOMMENTS per filtrare una stringa nella sintassi del comando e nei commenti della stessa istruzione DDL.

INSTRCOMMENTS non supporta le virgolette singole (' ') all'interno della stringa e non supporta i valori NULL.

INSTRWORDS word_list

Usare INSTRWORDS per applicare le istruzioni INCLUDE o EXCLUDE alle istruzioni DDL contenenti le parole specificate.

Per <word_list>, fornire le parole in qualsiasi ordine, tra virgolette singole. Per includere gli spazi, inserire lo spazio (e la parola, se applicabile) tra virgolette doppie. Le virgolette doppie possono anche essere utilizzate per racchiudere le frasi.

Tutte le parole specificate devono essere presenti nel file DDL affinché INSTRWORDS abbia effetto.

Esempio:

DDL INCLUDE OPTYPE ALTER OBJTEYP 'TABLE' INSTRWORDS 'ALTER CONSTRAINT " xyz"'

Questo esempio corrisponde alle seguenti istruzioni DDL:

ALTER TABLE ADD CONSTRAINT xyz CHECK
ALTER TABLE DROP CONSTRAINT xyz

INSTRWORDS non supporta le virgolette singole (' ') all'interno della stringa e non supporta i valori NULL.

INSTRCOMMENTSWORDS word_list

(Valido per Oracle) Funziona come INSTRWORDS, ma si applica solo ai commenti all'interno di un'istruzione DDL, non alla sintassi DDL stessa. Utilizzando INSTRCOMMENTS, è possibile utilizzare i commenti come agente di filtro.

INSTRCOMMENTSWORDS non supporta le virgolette singole (' ') all'interno della stringa e non supporta i valori NULL.

È possibile combinare INSTRWORDS e INSTRCOMMENTSWORDS per filtrare una stringa nella sintassi del comando e nei commenti della stessa istruzione DDL.

SOURCECATALOG catalog | ALLCATALOGS

Utilizzare queste opzioni per specificare il modo in cui i nomi degli oggetti non qualificati in una clausola OBJNAME vengono risolti nel contenitore corretto. Utilizzare queste opzioni quando il database di origine è un container database Oracle.

SOURCECATALOG specifica un contenitore predefinito per tutti i nomi oggetto specificati nella stessa clausola INCLUDE o EXCLUDE. Per rendere effettivo, è necessario specificare SOURCECATALOG prima della specifica OBJNAME. Vedere "SOURCECATALOG" per ulteriori informazioni, tra cui l'utilizzo di istruzioni contenenti nomi in due parti, in cui i nomi degli oggetti in tre parti sono necessari per identificare completamente un oggetto.

ALLCATALOGS specifica che tutti i contenitori del database devono essere considerati durante la risoluzione dei nomi oggetto specificati nella stessa clausola INCLUDE o EXCLUDE. ALLCATALOGS può essere posizionato prima o dopo la specifica OBJNAME.

Di seguito è riportato l'ordine di precedenza fornito quando in un file di parametri sono presenti specifiche di catalogo diverse.

  1. ALLCATALOGS in una clausola INCLUDE o EXCLUDE sostituisce tutte le specifiche SOURCECATALOG nella clausola INCLUDE o EXCLUDE e nella radice del file dei parametri e sostituisce la specifica contenitore di un nome oggetto completamente qualificato nella clausola OBJNAME.

  2. Una specifica esplicita del catalogo nella clausola OBJNAME sostituisce tutte le istanze di SOURCECATALOG (ma non ALLCATALOGS).

  3. SOURCECATALOG in una clausola INCLUDE o EXCLUDE sostituisce il parametro SOURCECATALOG globale specificato nella radice dell'istruzione TABLE o MAP.

  4. Il parametro SOURCECATALOG globale diventa effettivo per qualsiasi nome oggetto non qualificato nelle clausole OBJNAME se la clausola INCLUDE o EXCLUDE non specifica SOURCECATALOG o ALLCATALOGS.

  5. In assenza di uno qualsiasi dei parametri precedenti, tutti i cataloghi vengono considerati.

STAYMETADATA

(Valido per Oracle). Impedisce l'acquisizione dei metadati da parte di Extract o l'applicazione di Replicat.

Quando Extract rileva per la prima volta DML in una tabella, recupera i metadati per tale tabella. Quando nella tabella viene rilevato DDL, i vecchi metadati vengono invalidati. Il successivo DML nella tabella viene confrontato con i nuovi metadati in modo che la struttura della tabella di destinazione sia sempre aggiornata con quella dell'origine.

Tuttavia, se si sa che una determinata operazione DDL non avrà effetto sui metadati della tabella, è possibile utilizzare STAYMETADATA in modo che i metadati correnti non vengano recuperati o replicati. Si tratta di un miglioramento delle prestazioni che beneficia di operazioni quali importazioni ed esportazioni, in cui vengono spesso eseguiti DDL come troncamenti e la disabilitazione dei vincoli. Queste operazioni non influiscono sulla struttura delle tabelle, in quanto si riferiscono all'integrità della replica dei dati successiva, pertanto possono essere ignorate in questi casi. Ad esempio, ALTER TABLE ADD FOREIGN KEY non influisce sui metadati delle tabelle.

Un esempio di come questo può essere applicato selettivamente è il seguente:

DDL INCLUDE ALL INCLUDE STAYMETADATA OBJNAME xyz

In questo esempio viene indicato che tutti i valori DDL devono essere inclusi per la replica, ma solo i valori DDL che operano sull'oggetto xyz saranno soggetti a STAYMETADATA.

Anche STAYMETADATA può essere utilizzato allo stesso modo in una clausola EXCLUDE.

STAYMETADATA deve essere utilizzato allo stesso modo nell'origine e nella destinazione per garantire l'integrità dei metadati.

Quando STAYMETADATA è in uso, viene aggiunto un messaggio al file di report. Il reporting DDL è controllato dal parametro DDLOPTIONS con l'opzione REPORT.

Questa stessa funzionalità può essere applicata a livello globale a tutti gli script DDL presenti nell'origine utilizzando gli script @ddl_staymetadata:

Questa opzione deve essere utilizzata con l'assistenza del personale del supporto tecnico di Oracle GoldenGate, poiché potrebbe non essere sempre evidente quale DDL influisca sui metadati degli oggetti. Se utilizzato in modo non corretto, può compromettere l'integrità dell'ambiente di replica.

Esempi

Di seguito sono riportati alcuni esempi di casi d'uso diversi.

Esempio 1: utilizzo di DDL AUTOSCHEMA

Il filtro (simile a quello mostrato nell'esempio 1) può essere abilitato anche in base ai tipi DDL, utilizzando la clausola DDL AUTOSCHEMA INCLUDE/EXCLUDE OPTYPE.

Ad esempio, per abilitare AUTOSCHEMA per lo schema hr ma escludere lo schema finance, utilizzare lo script seguente:

 DDL AUTOSCHEMA &
 INCLUDE OBJNAME hr.* &
 EXCLUDE OBJNAME finance.*

 MAP hr.*, TARGET hr.*;
 MAP finance.*, TARGET finance.*;

Esempio 2: combinazione delle opzioni dei parametri DDL

Di seguito è riportato un esempio di come combinare le opzioni del parametro DDL.

DDL  &
INCLUDE UNMAPPED &
    OPTYPE alter &
    OBJTYPE 'table' &
    OBJNAME users.tab* &
INCLUDE MAPPED OBJNAME * &
EXCLUDE MAPPED OBJNAME temporary.tab

I criteri di filtro combinati in questa istruzione specificano quanto segue:

Esempio 3: inclusione di un'azione evento

L'esempio seguente specifica un'azione evento di REPORT per tutti i record DDL.

DDL INCLUDE ALL EVENTACTIONS (REPORT)

Esempio 4: utilizzo di un'azione evento su un sottoinsieme di DDL

L'esempio seguente mostra come utilizzare EVENTACTIONS su un sottoinsieme di DDL. Tutte le azioni DDL devono essere replicate, ma solo le azioni DDL eseguite su oggetti denominati in modo esplicito possono attivare le azioni evento di REPORT e LOG.

DDL INCLUDE ALL &
    INCLUDE OBJNAME sales.t* EVENTACTIONS (REPORT) &
    INCLUDE OBJNAME fin.my_tab EVENTACTIONS (LOG INFO)

Esempio 5: modi diversi per specificare i nomi <catalog> per DDL emessi su oggetti in un container database Oracle <source>

L'esempio seguente illustra i diversi modi per specificare i nomi dei cataloghi per DDL emessi sugli oggetti in un container database Oracle di origine.

SOURCECATALOG pdb1
DDL INCLUDE OBJNAME sch1.obj1 INCLUDE SOURCECATALOG pdb2 OBJNAME sch2.obj2
DDL INCLUDE ALLCATALOGS OBJNAME sch.obj
DDL INCLUDE ALLCATALOGS OBJNAME pdb.sch.obj

Esempio 6: mostra l'uso combinato di ALLOWEMPTYOBJECT e ALLOWEMPTYOWNER

Di seguito viene illustrato l'uso combinato di ALLOWEMPTYOBJECT e ALLOWEMPTYOWNER.

DDL INCLUDE pdb.*.* ALLOWEMPTYOWNER ALLOWEMPTYOBJECT