DDL内の修飾されていないオブジェクト名の正しい識別

Extractでは、DDL操作の実行時に有効な現在のスキーマ(セッション・スキーマとも呼ばれる)をキャプチャします。ソースがマルチテナント・コンテナ・データベースの場合、現在のコンテナもキャプチャされます。

コンテナとスキーマは、DDL内の修飾されていないオブジェクト名の解決に使用されます。

次のケースについて検討します。

CONNECT ggadmin/PASSWORD
CREATE TABLE EMPLOYEES (X NUMBER);
CREATE TABLE EAST.FINANCE(X NUMBER) AS SELECT * FROM EMPLOYEES;

両方のDDL文の修飾されていない表TAB1は、DDLの実行時に有効な現在のスキーマSCOTTに基づいてSCOTT.TAB1と解決されます。

現在のスキーマを設定する方法には、次の例に示すようにセッションのcurrent_schemaを設定するという別の方法もあります。

CONNECT ggadmin/PASSWORD
ALTER SESSION SET CURRENT_SCHEMA=SRC;
CREATE TABLE EMPLOYEES (X NUMBER);
CREATE TABLE HR.FINANCE(X NUMBER) AS SELECT * FROM EMPLOYEES;

両方のDDL文の修飾されていない表EMPLOYEESは、DDLの実行時に有効な現在のスキーマHRに基づいてHR.EMPLOYEESと解決されます。

ExtractはDDLの実行時に有効な現在のスキーマをキャプチャし、現在のスキーマを使用して、修飾されていないオブジェクト名(ある場合)を解決します。その結果、Replicatに対して指定されるMAP文は、修飾されていないオブジェクト名を使用するDDLについて正しく機能します。

ターゲットでDDLが成功するために必要な場合、ソース・セッション・スキーマを別のターゲット・セッション・スキーマにマップすることもできます。このマッピングはグローバルで、同じスキーマ名を含む他のマッピングをオーバーライドします。セッション・スキーマをマップするには、MAPSESSIONSCHEMAオプションを指定してDDLOPTIONSパラメータを使用します。

デフォルトまたはマップされたセッション・スキーマのマッピングが失敗した場合、次のDDLERRORパラメータ文を使用してエラーを処理することができます。エラー1435は、スキーマが存在しないことを示します。

DDLERROR 1435 IGNORE INCLUDE OPTYPE ALTER OBJTYPE SESSION