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

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

カタログとは何ですか。

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

Data Studioツール・スイートのカタログ・ツールの詳細は、カタログ・ツールを参照してください。

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

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

  • Iceberg REST Catalogエンドポイント
  • このエンドポイントのコールに使用される資格証明(ベアラー・トークンなど)
  • 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カタログへのアクセスを有効にする場合、Iceberg REST APIにアクセスするためのアドレスと、基礎となるデータへのアクセスをユーザーが要求するアドレスという2つのアドレスをホワイトリストに登録する必要があります。
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 Data Catalogなどの外部データ・カタログを表します。これらのカタログは、データセットに関するメタデータの集中管理リポジトリとして機能します。例えば、AWS Glue Data Catalogは、S3やRedshiftなどのAWSサービス全体でデータソースのメタデータを自動的に検出および管理し、シームレスなデータ統合とクエリを可能にします。
  • CATALOG_TYPE_DB_LINK: データベース・リンクから作成されたカタログのカテゴリを表します。このタイプのカタログを使用すると、リモートまたは外部データベースに存在するメタデータおよびオブジェクトにアクセスして編成し、確立されたデータベースを介して接続できます。

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

  • CATALOG_TYPE_VIRTUAL: 物理データ・ソースに対する抽象化を提供する仮想カタログを表します。仮想カタログはデータ自体を格納しませんが、データ仮想化プラットフォームで作成された仮想ビューなど、異なるデータ・ソースを問い合せるための統合インタフェースを提供します。
  • CATALOG_TYPE_ICEBERG: Icebergカタログを表し、Apache 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

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

    有効値

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

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

    PROP_CACHE_DURATION CACHE_DURATION

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

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

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

    PROP_CACHE_ASYNC 'CACHE_ASYNC'

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

    有効値

    • はい:

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

    • いいえ:

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

    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');
      
    • 名前と値のペアを含むJSONオブジェクトとともに単純なプロパティ名'CUSTOM'を指定することで、顧客プロパティのグループを指定できます。
      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'を使用して、メタデータのサブコンポーネントを更新できます。パスは、いくつかの相対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: カタログ内のオブジェクト・メタデータのレコードおよび表です。