100 DBMS_METADATA_DIFF

DBMS_METADATA_DIFFパッケージには、SXML形式の2つのメタデータ・ドキュメントを比較するためのインタフェースが含まれています。

この章のトピックは、次のとおりです:

参照:

DBMS_METADATA_DIFFパッケージの詳細および使用例は、『Oracle Databaseユーティリティ』を参照してください。

100.1 DBMS_METADATA_DIFFの概要

DBMS_METADATA_DIFFパッケージに含まれているインタフェースを使用して、SXML形式の2つのメタデータ・ドキュメントを比較できます。

比較の結果はSXML差分ドキュメントに出力されます。このドキュメントは、DBMS_METADATA送信インタフェースおよびCONVERT APIを使用して他の形式に変換できます。

100.2 DBMS_METADATA_DIFFのセキュリティ・モデル

DBMS_METADATA_DIFFパッケージのブラウズ・インタフェースは、DBMS_METADATAパッケージを実際に使用して比較対象のメタデータをフェッチします。そのため、DBMS_METADATAで使用するセキュリティ・モデルは、DBMS_METADATA_DIFFにも適用されます。(ただし、DBMS_METADATA_DIFFはすべてのオブジェクト・タイプをサポートするわけではないことに注意してください。)

参照:

DBMS_METADATAのセキュリティ・モデルについては、 DBMS_METADATA を参照してください。

100.3 DBMS_METADATA_DIFF - オブジェクトをフェッチおよび比較するためのAPIの参照

次のファンクションを使用すると、2つのオブジェクトのメタデータを1回のコールで比較できます。

構文

DBMS_METADATA_DIFF.COMPARE_SXML(
object_type   IN VARCHAR2,
name1         IN VARCHAR2,
name2         IN VARCHAR2,
schema1       IN VARCHAR2 DEFAULT NULL,
schema2       IN VARCHAR2 DEFAULT NULL,
network_link1 IN VARCHAR2 DEFAULT NULL,
network_link2 IN VARCHAR2 DEFAULT NULL)
RETURN CLOB;

DBMS_METADATA_DIFF.COMPARE_ALTER(
object_type   IN VARCHAR2,
name1         IN VARCHAR2,
name2         IN VARCHAR2,
schema1       IN VARCHAR2 DEFAULT NULL,
schema2       IN VARCHAR2 DEFAULT NULL,
network_link1 IN VARCHAR2 DEFAULT NULL,
network_link2 IN VARCHAR2 DEFAULT NULL)
RETURN CLOB;

DBMS_METADATA_DIFF.COMPARE_ALTER_XML(
object_type   IN VARCHAR2,
name1         IN VARCHAR2,
name2         IN VARCHAR2,
schema1       IN VARCHAR2 DEFAULT NULL,
schema2       IN VARCHAR2 DEFAULT NULL,
network_link1 IN VARCHAR2 DEFAULT NULL,
network_link2 IN VARCHAR2 DEFAULT NULL)
RETURN CLOB;

パラメータ

表100-1 COMPARE_xxxファンクションのパラメータ

パラメータ 説明

object_type

比較するオブジェクトのタイプ。有効なタイプ名は、CLUSTERCONTEXTDB_LINKFGA_POLICYINDEXMATERIALIZED_VIEWMATERIALIZED_VIEW_LOGQUEUEQUEUE_TABLERLS_CONTEXTRLS_GROUPRLS_POLICYROLESEQUENCESYNONYMTABLETABLESPACETRIGGERTYPETYPE_SPECTYPE_BODYUSERおよびVIEWです。

name1

比較する最初のオブジェクトの名前。

name2

比較する2番目のオブジェクトの名前。

schema1

比較する最初のオブジェクトのスキーマ。デフォルトは現行ユーザーです。

schema2

比較する2番目のオブジェクトのスキーマ。デフォルトはschema1の値です。

network_link1

最初のオブジェクトが存在するデータベースへのデータベース・リンクの名前。NULL(デフォルト)の場合、オブジェクトはコール元を実行しているデータベースに存在するとみなされます。

network_link2

2番目のオブジェクトが存在するデータベースへのデータベース・リンクの名前。デフォルトはnetwork_link1の値です。

戻り値

DBMS_METADATA_DIFF.COMPARE_xxxは2つのオブジェクト間の差分を戻します。

例外

  • INVALID_ARGVAL

    入力パラメータにNULLまたは無効な値が指定されています。該当のパラメータはエラー・メッセージのテキストで示されます。

  • OBJECT_NOT_FOUND

    指定したオブジェクトがデータベースにありません。

使用上の注意

これらのファンクションは、2つのオブジェクトそれぞれのメタデータをフェッチし、比較するためのDBMS_METADATADBMS_METADATA_DIFFのファンクションおよびプロシージャ両方へのコールをカプセル化しています。

使用するファンクションは、必要な比較形式によって異なります。

  • COMPARE_SXMLは、SXML差分ドキュメントを戻します。

  • COMPARE_ALTERは、最初のオブジェクトを2番目のオブジェクトのようにするための一連のALTER文を戻します。

  • COMPARE_ALTER_XMLは、ALTER_XMLドキュメントを戻します。

100.4 DBMS_METADATA_DIFFサブプログラムの要約

DBMS_METADATA_DIFFサブプログラムは、様々なオブジェクト・タイプを対象とした比較機能を提供します。

これらのサブプログラムは、次の処理に使用されます。

  • 比較するオブジェクトのタイプの指定

  • 比較するSXMLドキュメントの指定

  • 比較したドキュメントの差分の表示

  • 比較後のクリーンアップ

表100-2に、DBMS_METADATA_DIFFサブプログラムの要約を示します。

表100-2 DBMS_METADATA_DIFFパッケージのサブプログラム

サブプログラム 説明

OPENCファンクション

比較するオブジェクトのタイプを指定します。

ADD_DOCUMENTプロシージャ

比較するSXMLドキュメントを指定します。

FETCH_CLOBファンクションおよびプロシージャ

ADD_DOCUMENTで指定されている2つのドキュメントの差分を示すCLOBを戻します。

CLOSEプロシージャ

OPENCにより戻されるハンドルを無効にして、関連する状態をクリーンアップします。

100.4.1 OPENCファンクション

このファンクションは、比較するオブジェクトのタイプを指定します。戻り値は、不透明なコンテキスト・ハンドルです。

構文

DBMS_METADATA_DIFF.OPENC (
object_type  IN VARCHAR2)
RETURN NUMBER;

パラメータ

表100-3 OPENCファンクションのパラメータ

パラメータ 説明

object_type

比較するオブジェクトのタイプ。有効なタイプ名は、CLUSTERCONTEXTDB_LINKFGA_POLICYINDEXMATERIALIZED_VIEWMATERIALIZED_VIEW_LOGQUEUEQUEUE_TABLERLS_CONTEXTRLS_GROUPRLS_POLICYROLESEQUENCESYNONYMTABLETABLESPACETRIGGERTYPETYPE_SPECTYPE_BODYUSERおよびVIEWです。

戻り値

このファンクションから戻される不透明なハンドルは、ADD_DOCUMENTFETCH_xxxおよびCLOSEへの入力として使用されます。

例外

  • INVALID_ARGVAL

    入力パラメータにNULLまたは無効な値が指定されています。該当のパラメータはエラー・メッセージのテキストで示されます。

100.4.2 ADD_DOCUMENTプロシージャ

このプロシージャは、比較するSXMLドキュメントを指定します。

構文

DBMS_METADATA_DIFF.ADD_DOCUMENT(
handle IN NUMBER, document IN sys.XMLType);

DBMS_METADATA_DIFF.ADD_DOCUMENT(
handle IN NUMBER, document IN CLOB);

パラメータ

表100-4 ADD_DOCUMENTプロシージャのパラメータ

パラメータ 説明

handle

OPENCから戻されたハンドル。

document

比較するドキュメント。ドキュメントはOPENCに指定されているタイプである必要があります。

使用上の注意

比較インタフェースで比較できるSXMLドキュメントは2つのみのため、プログラムではOPENCハンドルごとにADD_DOCUMENTを正確に2回コールする必要があります。比較結果では、最初のコールで指定されるドキュメントが文書1、2番目のコールで指定されるドキュメントが文書2です。

例外

  • INVALID_ARGVAL

    入力パラメータにNULLまたは無効な値が指定されています。該当のパラメータはエラー・メッセージのテキストで示されます。

100.4.3 FETCH_CLOBファンクションおよびプロシージャ

FETCH_CLOBファンクションおよびプロシージャは、ADD_DOCUMENTで指定されている2つのドキュメントの差分を示すCLOBを戻します。

構文

DBMS_METADATA_DIFF.FETCH_CLOB(
handle IN NUMBER)
RETURN CLOB;

DBMS_METADATA_DIFF.FETCH_CLOB(
handle IN  NUMBER, 
doc    IN  OUT NOCOPY CLOB);

DBMS_METADATA_DIFF.FETCH_CLOB(
handle IN  NUMBER, 
doc    IN  OUT NOCOPY CLOB 
diffs  OUT BOOLEAN);

パラメータ

表100-5 FETCH_CLOBサブプログラムのパラメータ

パラメータ 説明

handle

OPENCから戻されたハンドル。

doc

文書1と文書2の差分を含むCLOB。

diffs

ドキュメントが異なる場合はTRUE、同一の場合はFALSEです。

戻り値

文書1と文書2の差分。

例外

  • INVALID_ARGVAL

    入力パラメータにNULLまたは無効な値が指定されています。該当のパラメータはエラー・メッセージのテキストで示されます。

100.4.4 CLOSEプロシージャ

このプロシージャは、OPENCにより戻されるハンドルを無効にして、関連する状態をクリーンアップします。

構文

DBMS_METADATA_DIFF.CLOSE(
handle IN NUMBER);

パラメータ

表100-6 CLOSEファンクションのパラメータ

パラメータ 説明

handle

OPENCから戻されたハンドル。

例外

  • INVALID_ARGVAL

    入力パラメータにNULLまたは無効な値が指定されています。該当のパラメータはエラー・メッセージのテキストで示されます。