DBMS_CATALOGを使用したカタログの管理

DBMS_CATALOGパッケージは、Oracle Autonomous AI Databaseのデータベース・カタログを管理するためのプロシージャ、ファンクションおよびタイプの包括的なセットを提供します。

カタログとは

カタログは、名前付きスキーマのコレクションとして定義され、それぞれに表やビューなどの名前付きオブジェクトのコレクションが含まれます。すべてのOracleデータベースには、単一のローカル・カタログ(データ・ディクショナリ)があります。このカタログは常に存在し、削除できません。ただし、データベースの外部で定義されるカタログの例は他にもあります。
  • データベース・リンクを介して使用可能なオブジェクトのセット
  • DBMS_SHAREを介して使用可能な共有オブジェクトのセット(デルタ共有など)。
  • Iceberg RESTカタログによって管理される一連のIceberg表。
  • Amazon Glue、Databricks Unity Catalog、Snowflakes Polarisなどのサード・パーティ製品によって定義される一連のオブジェクト。
  • Oracle OCIデータ・カタログ・サービスによって定義される一連のオブジェクト。
  • カタログは、特定のビジネス目的のためにグループ化された一連のオブジェクトである"ドメイン"または"データ製品"と考えることもできます。

オペレーティング・システムでは、ファイル・システムをマウントすることで外部データ・ファイルにアクセスできます。同様に、Autonomous AI Databaseでは、DBMS_CATALOGパッケージを使用してカタログをマウントすることで外部データにアクセスできます。

次の例は、外部Iceberg RESTカタログをマウントする方法を示しています。これを使用するには、3つの情報が必要になります。

  • Iceberg RESTカタログ・エンドポイント。
  • このエンドポイントをコールするために使用される資格証明(Bearerトークンなど)。
  • Icebergデータ・ファイルが格納されているバケットへのアクセスに使用される資格証明(ユーザー名/パスワードなど)。
BEGIN
  -- Create a credential capable of accessing an external Iceberg REST catalog
  dbms_cloud.create_credential('ICEBERG_CATALOG_CRED', ...);

  -- Create a credential capable of accessing the bucket where the 
  -- Iceberg data files are stored.
  dbms_cloud.create_credential('ICEBERG_STORAGE_CRED', ...); 

  -- Mount the iceberg catalog
  dbms_catalog.mount_iceberg(
    catalog_name             => 'ICEBERG_CAT',
    endpoint                 => 'https://...',
    catalog_credential       => 'ICEBERG_CATALOG_CRED',
    data_storage_credential  => 'ICEBERG_STORAGE_CRED',
    catalog_type             => 'ICEBERG_UNITY');
END;
/

-- List tables in the iceberg catalog
SELECT owner, table_name 
FROM all_tables@iceberg_cat;

-- Read data from an iceberg table
SELECT *
FROM a_schema.a_table@iceberg_cat;

DBMS_CATALOGは、カタログに関連する操作を定義および処理するために使用されます。

Oracle Autonomousデータベース内のカタログを管理するためのプロシージャ、ファンクションおよびタイプの包括的なセットを提供します。カタログのマウントおよびアンマウント、カタログ・プロパティの管理、資格証明の処理、表、スキーマ、オブジェクトなどのカタログ・エンティティの使用などの操作をサポートします。このパッケージは、外部データ・ソースを統合し、メタデータをセキュアかつ効率的に管理するために不可欠です。

セキュリティ・モデル

DBMS_CATALOGパッケージは、AUTHID CURRENT_USERモデルで動作します。つまり、現在のユーザーの権限で実行されます。カタログのマウント、プロパティの更新、資格証明の管理などの操作を実行するには、適切な権限が必要です。

ノート:

Autonomous AI Databaseに外部インターネット・リソースへの接続を要求するカタログはほとんどありません。したがって、関連する外部アドレスを、関連付けられたデータベース・ユーザーのアクセス制御リストに追加する必要があります。たとえば、AzureでDatabricks Unity Icebergカタログにアクセスできるようにする場合は、2つのアドレスをホワイトリストに登録する必要があります。1つはIceberg REST APIへのアクセスのためのアドレス、もう1つはユーザーが基礎となるデータへのアクセスを必要とする場合のアドレスです。
BEGIN
  dbms_network_acl_admin.append_host_ace(
    host => '*.azuredatabricks.net',
    lower_port => 443,
    upper_port => 443,
    ace => xs$ace_type(
      privilege_list => xs$name_list('http', 'http_proxy'),
      principal_name => 'DBUSER',
      principal_type => xs_acl.ptype_db));

  dbms_network_acl_admin.append_host_ace(
    host => '*.blob.core.windows.net',
    ace => xs$ace_type(
      privilege_list => xs$name_list('http', 'http_proxy'),
      principal_name =>  'DBUSER',
      principal_type => xs_acl.ptype_db));
END;
/

DBMS_CATALOGのメソッドを実行するには、DWROLEが必要です。

次のコマンドを実行して、ユーザーにDWROLEを付与します:
GRANT DWROLE TO MY_USER;

カタログ・タイプと定数

この項では、パッケージに定義されているカタログ・タイプと主な定数の概要を示します。各種カタログ・ソースの編成に使用される様々なカタログ・カテゴリについて説明し、カタログ・プロパティおよび動作を構成して管理するための重要な定数の概要を示します。

カタログ・タイプ

パッケージでは、様々なカテゴリのカタログを分類して処理するために、複数のカタログ・タイプを指定しています。これらを次に示します。
  • CATALOG_TYPE_SHARE:

    共有ベースのカタログを表し、主にシステムまたはユーザー間でデータを共有するために設計されています。たとえば、Data Studioのデータ共有などのデータ共有サービスでは、共有ベースのカタログを使用してデータを安全に配布します。

  • CATALOG_TYPE_DATA_CATALOG: AWS GlueやOCIデータ・カタログなどの外部データ・カタログを表します。これらのカタログは、データセットに関するメタデータの集中管理リポジトリとして機能します。たとえば、AWS Glue Data Catalogは、S3やRedshiftなどのAWSサービス全体でデータ・ソースのメタデータを自動的に検出および管理し、シームレスなデータ統合および問合せを可能にします。
  • CATALOG_TYPE_DB_LINK: AWS GlueやOCIデータ・カタログなどの外部データ・カタログを表します。これらのカタログは、データセットに関するメタデータの集中管理リポジトリとして機能します。たとえば、AWS Glue Data Catalogは、S3やRedshiftなどのAWSサービス全体でデータ・ソースのメタデータを自動的に検出および管理し、シームレスなデータ統合および問合せを可能にします。

    詳細は、「データベース・リンクを使用したOracleおよびOracle Database以外のデータのロード」を参照してください。

  • CATALOG_TYPE_VIRTUAL: 物理データ・ソースを抽象化する仮想カタログを表します。仮想カタログは、データ自体を格納するのではなく、データ仮想化プラットフォームで作成された仮想ビューなど、異なるデータ・ソースを問い合せるための統合インタフェースを提供します。
  • CATALOG_TYPE_ICEBERG: Apache Iceberg形式で格納された表のメタデータを管理する、Icebergカタログを表します。Icebergは、大規模な分析データセット用に設計された表形式で、スキーマの進化やタイムトラベルなどの機能をサポートしています。

    詳細は、「カタログの管理」を参照してください。

定数

次の項では、カタログのプロパティおよび設定を定義する重要な定数について説明します。定数は次のとおりです:
  • TYPE_CATALOGおよびNS_CATALOG: カタログ・タイプおよびネームスペースをCATALOGとして定義します。
  • DEFAULT_CATALOG: LOCALに設定されたデフォルトのカタログ名。
  • PROP_IS_ENABLEDPROP_IS_SYNCHRONIZEDPROP_CACHE_ENABLEDPROP_CACHE_DURATIONなどのプロパティ定数と、カタログの動作およびメタデータ・キャッシュを管理するためのその他の定数。

    定数名 説明
    PROP_IS_ENABLED IS_ENABLED

    このプロパティは、カタログが問合せおよび検索に対して現在有効かどうかを決定します。

    有効な値:
    • YES: カタログはData Studio UI検索ダイアログに表示され、データベース・リンク構文を使用してSQL問合せで使用(all_users@catalogからユーザー名を選択するなど)できます。

    • NO: カタログはALL_MOUNTED_CATALOGSビューにリストされますが、Data Studio UI検索の対象とはならず、データベース・リンク構文で使用できません。

    PROP_CACHE_ENABLED CACHE_ENABLED

    このプロパティは、パフォーマンスを向上させるためにリモート・スキーマのメタデータをローカル・データベースにキャッシュするかどうかを決定します。

    有効な値

    • YES: メタデータは初回アクセス時にキャッシュされ、PROP_CACHE_DURATIONで指定された期間、キャッシュに残ります。
    • NO:

      メタデータはキャッシュされません。カタログ内のオブジェクトへのアクセスの試行はすべて、問合せ時にリモート・メタデータ・ソースに到達します。

    PROP_CACHE_DURATION CACHE_DURATION

    メタデータが古くなるまでキャッシュに保持される秒数。デフォルト値は3600秒(1時間)です。

    ユーザーは、DBMS_CATALOG.FLUSH_CATALOG_CACHEをコールして、いつでも手動でキャッシュをフラッシュできます。

    ユーザーは、DBMS_CATALOG.PREFILL_CATALOG_CACHEをコールして、いつでもキャッシュをリフレッシュできます。

    PROP_CACHE_ASYNC 'CACHE_ASYNC'

    このフィールドには、非同期ジョブを使用してキャッシュが移入されるかどうかが表示されます。

    有効な値

    • YES:

      メタデータは、ユーザーが初めてメタデータをリクエストしたときに作成されるDBMS_SCHEDULERジョブを使用してキャッシュされます。

    • NO:

      メタデータは、メタデータをリクエストするユーザーのデータベース・セッションでキャッシュされます。

    PROP_DEFAULT_SCHEMA DEFAULT_SCHEMA
    ユーザーが次の形式の問合せを実行した場合にデフォルトで選択されるリモート・スキーマの名前:
    select * from table@catalog
    デフォルトのスキーマは、ローカル・データベース内のユーザー自身のスキーマと同じ役割を果たします。
    PROP_DCAT_TYPE DATA_CATALOG_TYPE

    DBMS_CATALOG.MOUNT_DATA_CATALOGによってマウントされるカタログのタイプ

    有効な値

    • AWS_GLUE: カタログは、リモートのAWS Glueリポジトリ上に定義されます。
    • OCI_DCAT: カタログは、OCIデータ・カタログ・インスタンス上に定義されます。

    ノート:

    これは読取り専用のプロパティです。
    PROP_CUSTOM CUSTOM

    カスタム・プロパティは、ユーザーにより、カタログ、スキーマ、表、またはカタログ内のその他のオブジェクトに関連付けられた名前/値のペアです。

    カスタム・プロパティを指定するには、次の2つの方法があります:
    • コンポジット・プロパティ名'CUSTOM:MY_PROP'を任意の文字列値とともに指定することで、単一のカスタム・プロパティ"MY_PROP"を設定できます。
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'CUSTOM:MY_PROP',
         new_value        => 'Property Value');
      
    • 単純なプロパティ名'CUSTOM'を名前/値のペアを含むJSONオブジェクトとともに指定することで、顧客プロパティのグループを指定できます。
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'CUSTOM',
         new_value        => '{"Property1" : "Value 1",
                               "Property2" : "Value 2",
                               ...}');
      

      ノート:

      カスタム・プロパティ名は大/小文字が区別されるため、CUSTOM:MY_PROPCUSTOM:My_Propとは異なります。

      カスタム・プロパティを削除するには、値をNULLに設定します。

      カスタム・プロパティは、Data Studio UIで検索語として使用できます。たとえば、DBMS_CATALOG.GET_TABLESで条件パラメータを指定することで、プロパティMY_PROPを持つすべての表を検出できます。
      SELECT table_name
      FROM DBMS_CATALOG.GET_TABLES(
             catalog_name => 'some_catalog',
             conditions => '#MY_PROP');
      

      特定の値を検索することも可能です。

      SELECT table_name
      FROM DBMS_CATALOG.GET_TABLES(
             catalog_name => 'some_catalog',
             conditions => '#MY_PROP="Property Value"');
      
    PROP_METADATA METADATA

    カスタム・メタデータはカスタム・プロパティに似ていますが、自由形式のJSONを含めることができます。メタデータはオブジェクトとともに格納され、取得できますが、検索語として使用されません。

    カスタム・メタデータを指定するには、次の2つの方法があります:
    • プロパティ名'METADATA'を使用して、メタデータ全体をJSONとして設定できます。
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'METADATA',
         new_value        => '{"subObject":{"propName":"abc"}}');
      
    • メタデータのサブコンポーネントを更新するには、コンポジット・プロパティ名'METADATA:path'を使用します(pathは相対JSONパスです)。
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'METADATA:subObject.propName',
         new_value        => 'xyz');
      
    PROP_CONFIGURATION CONFIGURATION

    構成プロパティは、Icebergカタログの特定の構成プロパティを更新するために使用されます。これは、CUSTOMプロパティと同様の方法で機能します。

    BEGIN
      dbms_catalog.update_catalog_property(
        'iceberg_cat', 
        'CONFIGURATION:IS_CASE_SENSITIVE', 
        'YES');
    END;
    /
    

データ型

DBMS_CATALOGパッケージには、カタログ関連情報を管理するための様々なカスタム・データ型が導入されています。これらを次に示します。
  • credential_infoおよびcredential_info_map: これらは、資格証明情報を格納およびマップするための構造です。
  • catalog_tableおよびcatalog_tables: これらは、詳細な表メタデータ(所有者、名前、説明、ステータスなど)を格納するためのレコードおよび表です。
  • catalog_schemaおよびcatalog_schemas: これらは、スキーマ・メタデータのレコードおよび表です。
  • catalog_objectおよびcatalog_objects: これらは、カタログ内のオブジェクト・メタデータのレコードおよび表です。