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 Studioツール・スイートのカタログ・ツールの詳細は、カタログ・ツールを参照してください。

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

次の例は、外部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カタログへのアクセスを有効にする場合は、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 Data Catalogなどの外部データ・カタログを表します。これらのカタログは、データセットに関するメタデータの集中管理リポジトリとして機能します。たとえば、AWS Glue Data Catalogは、S3やRedshiftなどのAWSサービス全体でデータソースのメタデータを自動的に検出および管理し、シームレスなデータ統合とクエリを可能にします。
  • CATALOG_TYPE_DB_LINK: データベース・リンクから作成されたカタログのカテゴリを表します。このタイプのカタログでは、リモート・データベースまたは外部データベースに存在するメタデータおよびオブジェクトにアクセスして編成し、確立されたデータベースを介して接続できます。

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

  • 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検索ダイアログに表示され、データベース・リンク構文(たとえば、all_users@catalogからユーザー名を選択)を使用してSQL問合せで使用できます。

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

    PROP_CACHE_ENABLED CACHE_ENABLED

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

    有効値

    • YESメタデータは初回アクセス時にキャッシュされ、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: カタログ内のオブジェクト・メタデータのレコードおよび表です。