使用 DBMS_CATALOG 管理型錄

DBMS_CATALOG 套件提供一組完整的程序、功能和類型,用於管理 Oracle Autonomous AI Database 的資料庫目錄。

什麼是型錄?

目錄定義為具名綱要的集合,每個綱要都包含具名物件的集合,例如 TABLES 或 VIEWS。每個 Oracle 資料庫都有一個本機目錄 – 資料說明。此目錄一律存在且無法移除。但還有其他在資料庫外部定義的目錄範例。
  • 可透過資料庫連結使用的物件集
  • 透過 DBMS_SHARE 提供的一組共用物件 (例如 Delta Sharing);
  • 由 Iceberg REST 目錄管理的一組 Iceberg 表格;
  • 由第三方產品定義的一組物件,例如 Amazon Glue、Databricks Unity Catalog 或 Snowflakes Polaris;
  • Oracle OCI 資料目錄服務所定義的一組物件。
  • 目錄也可視為「網域」或「資料產品」,這是一組針對特定業務目的群組在一起的物件。

如需有關 Data Studio 工具套件之目錄工具的詳細資訊,請參閱目錄工具

在作業系統中,您可以掛載檔案系統來存取外部資料檔。您可以使用 DBMS_CATALOG 套裝程式掛載目錄,以存取「自治式 AI 資料庫」中的外部資料。

下列範例顯示如何掛載外部 Iceberg REST 目錄。要使用它,您需要三個資訊。

  • 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 目錄的存取時,您可能需要將兩個地址加入白名單:一個是用於存取 Iceberg REST API,另一個是使用者需要存取基礎資料。
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;
/

您必須要有 DWROLE 才能執行 DBMS_CATALOG 方法。

執行下列命令,將 DWROLE 授予使用者:
GRANT DWROLE TO MY_USER;

型錄類型與常數

本節概述配套中定義的目錄類型與關鍵常數。它會說明用來組織各種型錄來源的不同型錄類目,並概述設定與管理型錄屬性與行為的基本常數。

型錄類型

套件會指定多個型錄類型,以分類與處理不同的型錄類目。分別是:
  • CATALOG_TYPE_SHARE:

    代表以共用為基礎的目錄,主要設計用於在系統或使用者之間共用資料。例如,資料共用服務 (例如 Data Studio 的資料共用) 會使用共用型目錄來安全地分送資料。

  • CATALOG_TYPE_DATA_CATALOG:代表外部資料目錄,例如 AWS Glue 或 OCI 資料目錄。這些目錄可作為資料集相關描述資料的集中式儲存區域。例如,AWS Glue Data Catalog 會自動跨 AWS 服務 (例如 S3 和 Redshift) 尋找及管理資料來源的中繼資料,從而實現無縫的資料整合與查詢。
  • CATALOG_TYPE_DB_LINK:代表從資料庫連結建立的目錄類別。此類型的目錄可讓您存取和組織位於遠端或外部資料庫中的描述資料和物件,並透過建立的資料庫加以連線。

    請參閱使用資料庫連結從 Oracle 和非 Oracle 資料庫載入資料以瞭解詳細資訊。

  • CATALOG_TYPE_VIRTUAL:代表提供實體資料來源抽象的虛擬目錄。虛擬目錄不會儲存資料本身,而是會呈現統一介面來查詢不同的資料來源,例如在資料虛擬化平台中建立的虛擬檢視。
  • CATALOG_TYPE_ICEBERG:代表 Iceberg 目錄,其管理以 Apache Iceberg 格式儲存之表格的中繼資料。Iceberg 是專為大型分析資料集設計的表格格式,支援架構演進和時間旅行等功能。

    請參閱管理目錄瞭解詳細資訊。

常數

下節標示定義目錄性質和設定的基本常數。常數包括:
  • TYPE_CATALOGNS_CATALOG:這會將目錄類型和命名空間定義為 CATALOG
  • DEFAULT_CATALOG:預設目錄名稱設為 LOCAL
  • 用於管理目錄行為和描述資料快取的特性常數 (例如 PROP_IS_ENABLEDPROP_IS_SYNCHRONIZEDPROP_CACHE_ENABLEDPROP_CACHE_DURATION 等)。

    常數名稱 數值 描述
    PROP_IS_ENABLED IS_ENABLED

    此特性決定目前是否啟用目錄以進行查詢和搜尋。

    有效值
    • :目錄會顯示在 Data Studio UI 搜尋對話方塊中,而且可以使用資料庫連結語法 (例如,從 all_users@catalog 選取使用者名稱) 在 SQL 查詢中使用。

    • :目錄會列在 ALL_MOUNTED_CATALOGS 檢視中,但不會包含在 Data Studio UI 搜尋中,且無法用於資料庫連結語法中。

    PROP_CACHE_ENABLED CACHE_ENABLED

    此特性決定是否應將遠端綱要的描述資料快取至本機資料庫,以提昇效能。

    有效值

    • :描述資料將第一次存取時快取,並保留在 PROP_CACHE_DURATION 所指定期間的快取中。
    • 將不會快取描述資料。在查詢時,所有存取目錄內物件的嘗試都會連線到遠端描述資料來源。

    PROP_CACHE_DURATION CACHE_DURATION

    描述資料在過時之前,應保留在快取中的秒數。預設值為 3600 秒 (一小時)。

    請注意,使用者可以隨時透過呼叫 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

    自訂特性是使用者與目錄、綱要、表格或其他目錄相關聯的名稱 / 值組。

    指定自訂特性的方法有兩種:
    • 您可以指定複合特性名稱 '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_PROP 會與 CUSTOM:My_Prop 不同。

      若要移除自訂特性,請將值設定為 NULL。

      自訂特性可作為 Data Studio UI 中的搜尋詞。例如,您可以在 DBMS_CATALOG.GET_TABLES 中指定 conditions 參數,即可找到具有 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。中繼資料會與物件一起儲存,且可以擷取,但不會用作搜尋詞彙。

    指定自訂描述資料的方法有兩種:
    • 您可以使用特性名稱 '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_infocredential_info_map:這些是儲存和對應證明資料資訊的結構。
  • catalog_tablecatalog_tables:這些是用於儲存詳細表格描述資料的記錄和表格 (例如,擁有者、名稱、描述、狀態)。
  • catalog_schemacatalog_schemas:這些是綱要描述資料的記錄和表格。
  • catalog_objectcatalog_objects:這些是目錄內物件描述資料的記錄和表格。