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
親トピック: Oracle: DDLレプリケーション