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 ggadmin/PASSWORD
CREATE TABLE EMPLOYEES (X NUMBER);
CREATE TABLE EAST.FINANCE(X NUMBER) AS SELECT * FROM EMPLOYEES;
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 ggadmin/PASSWORD
ALTER SESSION SET CURRENT_SCHEMA=SRC;
CREATE TABLE EMPLOYEES (X NUMBER);
CREATE TABLE HR.FINANCE(X NUMBER) AS SELECT * FROM EMPLOYEES;
In both of those DDL statements, the unqualified table
EMPLOYEES
is resolved as HR.EMPLOYEES
based on
the current schema HR
that is in effect during the DDL
execution.
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