Correctly Identifying Unqualified Object Names in DDL
Extract captures the current schema (also called session schema) that is in effect when a DDL operation is executed. The current container is also captured if the source is a multitenant container database.
The container and schema are used to resolve unqualified object names in the DDL.
Consider the following example:
CONNECT SCOTT/TIGER CREATE TABLE TAB1 (X NUMBER); CREATE TABLE SRC1.TAB2(X NUMBER) AS SELECT * FROM TAB1;
In both of those DDL statements, the unqualified table TAB1
is resolved as SCOTT.TAB1
based on the current schema SCOTT
that is in effect during the DDL execution.
There is another way of setting the current schema, which is to set the current_schema
for the session, as in the following example:
CONNECT SCOTT/TIGER ALTER SESSION SET CURRENT_SCHEMA=SRC; CREATE TABLE TAB1 (X NUMBER); CREATE TABLE SRC1.TAB2(X NUMBER) AS SELECT * FROM TAB1;
In both of those DDL statements, the unqualified table TAB1
is resolved as SRC.TAB1
based on the current schema SRC
that is in effect during the DDL execution.
In both classic and integrated capture modes, Extract captures the current schema that is in effect during DDL execution, and it resolves the unqualified object names (if any) by using the current schema. As a result, MAP
statements specified for Replicat work correctly for DDL with unqualified object names.
You can also map a source session schema to a different target session schema, if
that is required for the DDL to succeed on the target. This mapping is global and
overrides any other mappings that involve the same schema names. To map session
schemas, use the DDLOPTIONS
parameter with the
MAPSESSIONSCHEMA
option.
If the default or mapped session schema mapping fails, you can handle the error with the following DDLERROR
parameter statement, where error 1435 means that the schema does not exist.
DDLERROR 1435 IGNORE INCLUDE OPTYPE ALTER OBJTYPE SESSION