Identificazione corretta dei nomi oggetto non qualificati in DDL
Extract acquisisce lo schema corrente (chiamato anche schema di sessione) che è attivo quando viene eseguita un'operazione DDL. Il contenitore corrente viene acquisito anche se l'origine è un container database multi-tenant.
Il contenitore e lo schema vengono utilizzati per risolvere i nomi degli oggetti non qualificati nel DDL.
Si consideri l'esempio riportato di seguito.
CONNECT ggadmin/PASSWORD
CREATE TABLE EMPLOYEES (X NUMBER);
CREATE TABLE EAST.FINANCE(X NUMBER) AS SELECT * FROM EMPLOYEES;
In entrambe le istruzioni DDL, la tabella non qualificata TAB1 viene risolta come SCOTT.TAB1 in base allo schema corrente SCOTT in vigore durante l'esecuzione DDL.
Esiste un altro modo per impostare lo schema corrente, ovvero impostare current_schema per la sessione, come nell'esempio seguente:
CONNECT ggadmin/PASSWORD
ALTER SESSION SET CURRENT_SCHEMA=SRC;
CREATE TABLE EMPLOYEES (X NUMBER);
CREATE TABLE HR.FINANCE(X NUMBER) AS SELECT * FROM EMPLOYEES;
In entrambe le istruzioni DDL, la tabella non qualificata EMPLOYEES viene risolta come HR.EMPLOYEES in base allo schema corrente HR in vigore durante l'esecuzione DDL.
Extract acquisisce lo schema corrente attivo durante l'esecuzione di DDL e risolve gli eventuali nomi oggetto non qualificati utilizzando lo schema corrente. Di conseguenza, le istruzioni MAP specificate per Replicat funzionano correttamente per DDL con nomi oggetto non qualificati.
È inoltre possibile mappare uno schema di sessione di origine a uno schema di sessione di destinazione diverso, se necessario affinché la DDL riesca sulla destinazione. Questo mapping è globale e sostituisce tutti gli altri mapping che coinvolgono gli stessi nomi di schema. Per mappare gli schemi di sessione, utilizzare il parametro DDLOPTIONS con l'opzione MAPSESSIONSCHEMA.
Se il mapping dello schema di sessione predefinito o mappato non riesce, è possibile gestire l'errore con la seguente istruzione del parametro DDLERROR, dove l'errore 1435 indica che lo schema non esiste.
DDLERROR 1435 IGNORE INCLUDE OPTYPE ALTER OBJTYPE SESSION