在專用端點上使用與非 Oracle 資料庫之客戶管理的異質連線建立資料庫連結

您可以建立從專用 Exadata 基礎架構上的 Autonomous Database 到 Oracle Database Gateway 的資料庫連結,以存取位於專用端點上的非 Oracle 資料庫。

Oracle Database Gateway 是專為存取特定非 Oracle 系統所設計的閘道。使用 Oracle Database Gateway,無需知道資料位置或儲存方式,即可存取分散式資料庫系統中的任何位置資料。使用 Autonomous Database 上的資料庫連結搭配 Oracle Database Gateway 支援異質環境,並不需要自訂應用程式,即可從非 Oracle 系統存取資料。

附註:

只有 19c 和 23.6 和更新版本的 19.25 和更新版本才支援在專用端點上建立具有客戶管理異質連線的資料庫連結,以及 23ai 的非 Oracle 資料庫。

必備條件

若要在公用端點上使用來自 Autonomous Database 執行處理的資料庫連結,請執行下列作業:
  1. 設定讓 Oracle Database Gateway 存取非 Oracle 資料庫。請參閱 Oracle Database 19c Database Heterogeneous Connectivity User's Guide 中的 Oracle Database GatewaysOracle Database 23ai Database Heterogeneous Connectivity User's Guide ,瞭解詳細資訊。

    視您要連線的資料庫而定,您可以參閱相應的 Installation and Configuration Guide 和 Gateway User's Guide。

    例如,若為 Oracle Database Gateway for SQL Server,請參閱:

  2. 設定 Oracle Net Listener 處理 Oracle Database Gateway 上的內送要求。

  3. 在 Oracle Database Gateway 上建立自行簽署的公事包。

此外:
  • 目標資料庫必須能夠從來源資料庫的 Oracle Cloud Infrastructure VCN 存取。例如,您可以在下列情況時連線至目標資料庫:

    • 目標資料庫位於專用端點。

    • 來源資料庫和目標資料庫都位於相同的 Oracle Cloud Infrastructure VCN 中。

    • 來源資料庫和目標資料庫位於不同的 Oracle Cloud Infrastructure VCN 中,而且是配對的。

    • 針對專用端點上的目標,DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 支援使用 hostname 參數指定單一主機名稱。在專用端點上,不支援使用 IP 位址、SCAN IP 或 SCAN 主機名稱 (當目標位於公用端點時,CREATE_DATABASE_LINK 支援使用 IP 位址、SCAN IP 或 SCAN 主機名稱)。

  • 必須為專用端點定義下列傳入和傳出規則:

    • 在來源資料庫的子網路安全清單或網路安全群組中定義傳出規則,以允許目標資料庫的 IP 位址和連接埠號碼透過 TCP 的流量。

    • 在目標資料庫的子網路安全清單或網路安全群組中定義傳入規則,以允許從來源資料庫 IP 位址到目的地連接埠的 TCP 流量。

專用端點上非 Oracle 資料庫的客戶管理異質連線 (不含公事包)

您可以建立從 Autonomous Database 到 Oracle Database Gateway 的資料庫連結,以存取使用公事包 (TCPS) 或不使用公事包 (TLS) 之專用端點上的非 Oracle 資料庫。本節描述建立不含公事包的資料庫連結。

若要使用資料庫連結和 TLS 連線,從專用端點上的 Autonomous Database 執行處理建立資料庫連結到目標閘道,請執行下列作業:
  1. Autonomous Database 上,建立存取目標資料庫的證明資料。您以 DBMS_CLOUD.CREATE_CREDENTIAL 指定的使用者名稱與密碼,是資料庫連結內所使用之目標資料庫的證明資料 (透過 Oracle Database Gateway 存取目標資料庫的位置)。
    舉例而言:
    BEGIN
        DBMS_CLOUD.CREATE_CREDENTIAL(
            credential_name => 'DB_LINK_CRED',
            username => 'NICK',
            password => 'password'
        );
    END;/

    必須提供 credential_name 參數。

    username 參數中的字元必須全部為大寫字母。

    此作業會以加密格式將證明資料儲存在資料庫中。您可以使用任何證明資料名稱。

  2. 使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 建立目標閘道的資料庫連結。
    舉例而言:
    BEGIN
        DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
            db_link_name =>       'SALESLINK',
            hostname =>           'example.com',
            port =>               '1522',
            service_name =>       'example_service_name',
            ssl_server_cert_dn => 'ssl_server_cert_dn',
            credential_name =>    'DB_LINK_CRED',
            directory_name =>      NULL,
            gateway_link =>        TRUE,
            private_target =>      TRUE,
            gateway_params =>      NULL
        );
    END;/

    如果連線建立為以 TCP 為基礎的資料庫連結 (沒有公事包),則 ssl_server_cert_dn 參數是選擇性的。

    directory_nameNULL 時,會將連線建立為以 TCP 為基礎的資料庫連結 (不含公事包)。

    當目標非 Oracle Database 位於專用端點 (亦即,資料庫連結會存取需要在 VCN DNS 伺服器中解析的主機名稱) 時,private_target 參數必須設為 TRUE。當 private_targetTRUE 時,hostname 參數必須是單一主機名稱 (在專用端點上,不支援使用 IP 位址、SCAN IP 或 SCAN 主機名稱)。

    gateway_linkTRUEgateway_paramsNULL 時,這會指定資料庫連結是客戶管理的 Oracle 閘道。

    ADMIN 以外的使用者需要執行 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的權限。

    請參閱 CREATE_DATABASE_LINK 程序以瞭解詳細資訊。

  3. 使用您建立的資料庫連結存取目標閘道上的資料。
    舉例而言:
    SELECT * FROM employees@SALESLINK;
對於您在步驟 1 中建立的證明資料,Oracle Database Gateway 證明資料,如果目標使用者的密碼變更,您可以更新包含目標使用者證明資料的證明資料,如下所示:
BEGIN
    DBMS_CLOUD.UPDATE_CREDENTIAL (
        credential_name =>'DB_LINK_CRED',
        attribute =>'PASSWORD',
        value=>'password'
    );
END;
/

新密碼的位置。

此作業之後,使用此證明資料的現有資料庫連結會繼續運作,而不需要刪除並重新建立資料庫連結。

請參閱 UPDATE_CREDENTIAL 程序以瞭解詳細資訊。

專用端點上非 Oracle 資料庫的客戶管理異質連線 (含公事包)

您可以建立從 Autonomous Database 到 Oracle Database Gateway 的資料庫連結,以存取使用公事包 (TCPS) 或不使用公事包 (TLS) 之專用端點上的非 Oracle 資料庫。本節描述使用公事包建立資料庫連結。

若要從專用端點上的 Autonomous Database 執行處理建立資料庫連結到目標閘道,請連線公事包,請執行下列動作:
  1. 將包含 Oracle Database Gateway 憑證的目標閘道自行簽署公事包 (例如 cwallet.sso) 複製到物件存放區。
    公事包檔案以及資料庫使用者 ID 和密碼,可讓您透過目標閘道存取可用的資料。將公事包檔案儲存在安全位置。只與授權的使用者共用公事包檔案。
  2. Autonomous Database 上,建立證明資料以存取儲存 cwallet.sso 的物件存放區。
    請參閱 CREATE_CREDENTIAL 程序,瞭解不同物件儲存服務的使用者名稱和密碼參數相關資訊。
  3. Autonomous Database 上建立公事包檔案 cwallet.sso 的目錄。
    舉例而言:
    CREATE DIRECTORY dblink_wallet_dir AS 'directory_path_of_your_choice';
    如需有關建立目錄的資訊,請參閱在 Autonomous Database 中建立目錄
  4. 使用 DBMS_CLOUD.GET_OBJECT 將目標閘道自行簽署公事包上傳至您在上一個步驟 DBLINK_WALLET_DIR 中建立的目錄。
    舉例而言:
    BEGIN
        DBMS_CLOUD.GET_OBJECT(
            credential_name =>'DEF_CRED_NAME',
            object_uri =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/cwallet.sso',
            directory_name =>'DBLINK_WALLET_DIR'
        ); 
    END;
    /

    在此範例中,namespace-string 是 Oracle Cloud Infrastructure 物件儲存命名空間,而 bucketname 是儲存桶名稱。如需詳細資訊,請參閱瞭解 Object Storage 命名空間

    附註:

    您在此步驟中使用的 credential_name 是「物件存放區」的證明資料。在下一個步驟中,您會建立證明資料以存取目標閘道。
  5. Autonomous Database 上,建立存取目標資料庫的證明資料。您以 DBMS_CLOUD.CREATE_CREDENTIAL 指定的使用者名稱與密碼,是資料庫連結內所使用之目標資料庫的證明資料 (透過 Oracle Database Gateway 存取目標資料庫的位置)。
    舉例而言:
    BEGIN
        DBMS_CLOUD.CREATE_CREDENTIAL(
            credential_name =>'DB_LINK_CRED',
            username =>'NICK',
            password =>'password'
        );
    END;
    /

    必須提供 credential_name 參數。

    username 參數中的字元必須全部為大寫字母。

    此作業會以加密格式將證明資料儲存在資料庫中。您可以使用任何證明資料名稱。

  6. 使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 建立目標閘道的資料庫連結。
    舉例而言:
    BEGIN
        DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
            db_link_name =>'SALESLINK', 
            hostname =>'example.com', 
            port =>'1522',
            service_name =>'example_service_name',
            ssl_server_cert_dn =>'ssl_server_cert_dn',
            credential_name =>'DB_LINK_CRED',
            directory_name =>'DBLINK_WALLET_DIR',
            gateway_link =>TRUE,
            private_target =>TRUE,
            gateway_params =>NULL
        );
    END;
    /

    如果 directory_name 不是 NULL,則會建立以 TCPS 為基礎的資料庫連結。

    當目標非 Oracle Database 位於專用端點 (亦即,資料庫連結會存取需要在 VCN DNS 伺服器中解析的主機名稱) 時,private_target 參數必須設為 TRUE。當 private_targetTRUE 時,hostname 參數必須是單一主機名稱 (在專用端點上,不支援使用 IP 位址、SCAN IP 或 SCAN 主機名稱)。

    gateway_linkTRUEgateway_paramsNULL 時,這會指定資料庫連結是客戶管理的 Oracle 閘道。

    ADMIN 以外的使用者需要執行 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的權限。

    請參閱 CREATE_DATABASE_LINK 程序以瞭解詳細資訊。

  7. 使用您建立的資料庫連結存取目標閘道上的資料。
    舉例而言:
    SELECT * FROM employees@SALESLINK;
    
對於您在步驟 5 中建立的證明資料,Oracle Database Gateway 證明資料,如果目標使用者的密碼變更,您可以更新包含目標使用者證明資料的證明資料,如下所示:
BEGIN
    DBMS_CLOUD.UPDATE_CREDENTIAL (
        credential_name =>'DB_LINK_CRED',
        attribute =>'PASSWORD',
        value=>'password'
    );
END;
/

新密碼的位置。

此作業之後,使用此證明資料的現有資料庫連結會繼續運作,而不需要刪除並重新建立資料庫連結。

請參閱 UPDATE_CREDENTIAL 程序以瞭解詳細資訊。