建立從 Autonomous Database 到專用端點上 Oracle Database 的資料庫連結

您可以建立從 Autonomous Database 到位於專用端點之目標 Oracle Database 的資料庫連結。

附註:

僅商業區域和美國政府區域支援從 Autonomous Database 到專用端點上的目標 Oracle 資料庫的資料庫連結。

所有商業區域預設都會啟用此功能。

美國政府區域預設會對新佈建的資料庫啟用此功能。

對於專用端點上的現有美國政府資料庫,如果您想要建立從 Autonomous Database 到美國政府區域目標的資料庫連結,可以在 Oracle Cloud 支援提出服務要求,並要求在政府區域資料庫連結功能中啟用專用端點。

美國政府區域包括:

視目標 Oracle 資料庫的類型與組態而定:

Autonomous Database 到專用端點上 Oracle 資料庫的資料庫連結先決條件

列出從 Autonomous Database 建立資料庫連結到位於專用端點之目標 Oracle 資料庫的先決條件。

在專用端點上建立目標 Oracle 資料庫的資料庫連結:

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

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

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

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

    • 目標資料庫是使用 FastConnect 或 VPN 連線至來源資料庫 Oracle Cloud Infrastructure VCN 的內部部署資料庫。

  • 有兩個選項可用來指定目標資料庫,請使用 hostname 參數或 rac_hostnames 參數:

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

    • 當目標為 Oracle RAC 資料庫時,請使用 rac_hostnames 參數指定一或多個含有 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的主機名稱。這可讓您利用 Oracle RAC 的高可用性功能。不支援使用 IP 位址、SCAN IP 或 rac_hostnames 值中的 SCAN 主機名稱。

      當您在 rac_hostnames 參數中指定主機名稱清單時,CREATE_DATABASE_LINK 會使用所有指定的主機名稱作為連線字串中的位址。如果目標 Oracle RAC 資料庫上沒有其中一個指定的主機,Autonomous Database 會自動嘗試使用清單中的另一個主機名稱連線。
  • 必須為專用端點定義下列傳入和傳出規則:

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

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

在不使用公事包的專用端點上建立資料庫連結至 Oracle 資料庫

使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 建立資料庫連結,從 Autonomous Database 到位於專用端點上的目標 Oracle 資料庫,並且無須使用公事包 (TCP) 進行連線。

附註:

此選項適用於位於專用端點且未設定 SSL/TCPS 的目標 Oracle 資料庫。

視需要執行必要步驟。請參閱資料庫連結 (從 Autonomous Database 到專用端點上的 Oracle 資料庫) 的先決條件以瞭解詳細資訊。

使用不含公事包的安全 TCP 連線,建立專用端點上目標資料庫的資料庫連結:

  1. Autonomous Database 上建立可存取目標資料庫的證明資料。您以 DBMS_CLOUD.CREATE_CREDENTIAL 指定的 usernamepassword 是資料庫連結內所使用之目標資料庫的證明資料 (透過 VCN 存取目標資料庫的位置)。

    舉例而言:

    BEGIN
         DBMS_CLOUD.CREATE_CREDENTIAL(
             credential_name => 'PRIVATE_ENDPOINT_CRED',
             username => 'NICK',
             password => 'password'
             );
    END;
    /

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

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

  2. 使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 建立目標資料庫的資料庫連結。

    舉例而言:

    BEGIN
         DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
             db_link_name => 'PRIVATE_ENDPOINT_LINK', 
             hostname => 'exampleHostname',
             port => '1522',
             service_name => 'exampleServiceName',
             ssl_server_cert_dn => NULL,
             credential_name => 'PRIVATE_ENDPOINT_CRED',
             directory_name => NULL,
             private_target => TRUE);
    END;
    /

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

    當目標為 Oracle RAC 資料庫時,請使用 rac_hostnames 參數指定一或多個含有 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的主機名稱。這可讓您利用 Oracle RAC 的高可用性功能。不支援使用 IP 位址、SCAN IP 或 rac_hostnames 值中的 SCAN 主機名稱。

    例如,使用目標 Oracle RAC 資料庫時,請使用 rac_hostnames 參數:

    BEGIN
         DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
             db_link_name => 'PRIVATE_ENDPOINT_LINK', 
             rac_hostnames => '["sales1-svr1.example.adb.us-ashburn-1.oraclecloud.com", 
                                "sales1-svr2.example.adb.us-ashburn-1.oraclecloud.com", 
                                "sales1-svr3.example.adb.us-ashburn-1.oraclecloud.com"]', 
             port => '1522',
             service_name => 'exampleServiceName',
             ssl_server_cert_dn => NULL,
             credential_name => 'PRIVATE_ENDPOINT_CRED',
             directory_name => NULL,
             private_target => TRUE);
    END;
    /

    DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 不支援 hostnamerac_hostnames 參數中的 localhost 值。

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

    如範例所示,若要使用不含公事包的安全 TCP 連線,建立含有 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的資料庫連結到專用端點上的目標資料庫,則需要下列所有項目:

    • directory_name 參數必須是 NULL

    • ssl_server_cert_dn 參數必須是 NULL

    • private_target 參數必須是 TRUE

  3. 使用您建立的資料庫連結來存取目標資料庫中的資料。

    舉例而言:

    SELECT * FROM employees@PRIVATE_ENDPOINT_LINK;
                  

附註:

對於您在步驟 1 中建立的證明資料,Oracle Database 證明資料,如果目標使用者的密碼變更,您可以更新包含目標使用者證明資料的證明資料,如下所示:
BEGIN
     DBMS_CLOUD.UPDATE_CREDENTIAL (
         credential_name => 'DB_LINK_CRED',
         attribute => 'PASSWORD',
         value => 'password');
END;
/

其中,password 是新密碼。

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

請參閱 CREATE_DATABASE_LINK 程序以瞭解其他資訊。

使用公事包 (mTLS) 建立從 Autonomous Database 到專用端點上 Oracle 資料庫的資料庫連結

您可以建立從 Autonomous Database 到位於專用端點之目標 Oracle 資料庫的資料庫連結。

附註:

此選項適用於已設定 SSL/TCPS 且位於專用端點上的目標 Oracle 資料庫。

如果目標 Oracle 資料庫未設定 SSL/TCPS,則有兩個選項:

視需要執行必要步驟。請參閱資料庫連結 (從 Autonomous Database 到專用端點上的 Oracle 資料庫) 的先決條件以瞭解詳細資訊。

若要使用 TCP/IP 與 SSL (TCPS) 認證,在專用端點上建立目標 Oracle 資料庫的資料庫連結:

  1. 將包含目標資料庫憑證的目標資料庫公事包 cwallet.sso 複製到物件存放區。

    附註:

    公事包檔案以及資料庫使用者 ID 和密碼,可讓您存取目標 Oracle 資料庫中的資料。將公事包檔案儲存在安全位置。只與授權的使用者共用公事包檔案。
  2. 建立證明資料以存取儲存 cwallet.sso 的物件存放區。請參閱 CREATE_CREDENTIAL 程序,瞭解不同物件儲存服務的使用者名稱和密碼參數相關資訊。
  3. Autonomous Database 上建立公事包檔案 cwallet.sso 的目錄。

    舉例而言:

    CREATE DIRECTORY wallet_dir AS 'directory_path_of_your_choice';
                  

    請參閱在 Autonomous Database 中建立目錄,瞭解建立目錄的相關資訊。

  4. 使用 DBMS_CLOUD.GET_OBJECT ,將目標資料庫公事包上傳至您在上一個步驟 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 => 'WALLET_DIR'); 
    END;
    /

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

    附註:

    您在此步驟中使用的 credential_name 是「物件存放區」的證明資料。在下一個步驟中,您會建立證明資料以存取目標資料庫。
  5. Autonomous Database 上建立可存取目標資料庫的證明資料。您以 DBMS_CLOUD.CREATE_CREDENTIAL 指定的 usernamepassword 是資料庫連結內所使用之目標資料庫的證明資料 (透過 VCN 存取目標資料庫的位置)。

    附註:

    必須提供 credential_name 參數。

    舉例而言:

    BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
          credential_name => 'DB_LINK_CRED',
          username => 'NICK',
          password => 'password');
    END;
    /

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

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

  6. 使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 建立目標資料庫的資料庫連結。

    舉例而言:

    BEGIN
        DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
            db_link_name => 'PEDBLINK1', 
            hostname => 'example1.adb.ap-osaka-1.oraclecloud.com',
            port => '1522',
            service_name => 'example_high.adb.oraclecloud.com',
            ssl_server_cert_dn => 'ssl_server_cert_dn',
            credential_name => 'DB_LINK_CRED',
            directory_name => 'WALLET_DIR',
            private_target => TRUE);
    END;
    /

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

    當目標為 Oracle RAC 資料庫時,請使用 rac_hostnames 參數指定一或多個含有 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的主機名稱。這可讓您利用 Oracle RAC 的高可用性功能。不支援使用 IP 位址、SCAN IP 或 rac_hostnames 值中的 SCAN 主機名稱。

    例如,使用目標 Oracle RAC 資料庫時,請使用 rac_hostnames 參數:

    BEGIN
        DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
            db_link_name => 'PEDBLINK1', 
            rac_hostnames => '["sales1-svr1.example.adb.us-ashburn-1.oraclecloud.com",
                               "sales1-svr2.example.adb.us-ashburn-1.oraclecloud.com",
                               "sales1-svr3.example.adb.us-ashburn-1.oraclecloud.com"]',
            port => '1522',
            service_name => 'example_high.adb.oraclecloud.com',
            ssl_server_cert_dn => 'ssl_server_cert_dn',
            credential_name => 'DB_LINK_CRED',
            directory_name => 'WALLET_DIR',
            private_target => TRUE);
    END;
    /

    DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 不支援 hostnamerac_hostnames 參數中的 localhost 值。

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

  7. 使用您建立的資料庫連結來存取目標資料庫中的資料。

    舉例而言:

    SELECT * FROM employees@PEDBLINK1;
                  

附註:

對於您在步驟 5 中建立的證明資料,Oracle Database 證明資料,如果目標使用者的密碼變更,您可以更新包含目標使用者證明資料的證明資料,如下所示:
BEGIN
    DBMS_CLOUD.UPDATE_CREDENTIAL (
        credential_name => 'DB_LINK_CRED',
        attribute => 'PASSWORD',
        value => 'password');
END;
/

其中,password 是新密碼。

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

請參閱 CREATE_DATABASE_LINK 程序以瞭解其他資訊。

具有目標 Oracle Database 的資料庫連結注意事項

提供用於建立目標 Oracle 資料庫之資料庫連結的注意事項 (當目標不是 Autonomous Database 時)

資料庫連結至其他 Oracle 資料庫的注意事項:

  • 每個目錄只有一個有效的公事包檔案,才能與資料庫連結搭配使用。您一次只能將一個 cwallet.sso 上傳至您為公事包檔案選擇的目錄 (例如 DBLINK_WALLET_DIR)。這表示在 DBLINK_WALLET_DIR 中使用 cwallet.sso,您只能建立資料庫連結到該目錄中公事包有效的資料庫。若要使用多個含有資料庫連結的 cwallet.sso 檔案,您必須建立其他目錄,並將每個 cwallet.sso 放在不同的目錄中。使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 建立資料庫連結時,請指定包含公事包的目錄以及 directory_name 參數。

    請參閱在 Autonomous Database 中建立目錄,瞭解建立目錄的相關資訊。

  • 其他 Oracle Database 之資料庫連結的支援目標 Oracle 資料庫版本為:19c、12.2.0 和 12.1.0。

  • Autonomous Database 會將 SEC_CASE_SENSITIVE_LOGON 參數設為 true,且無法變更此值。如果您的目標資料庫不是 Autonomous Database ,則必須在目標資料庫上將 SEC_CASE_SENSITIVE_LOGON 參數設為 true。如果目標資料庫上的 SEC_CASE_SENSITIVE_LOGON 設為 false,則會產生錯誤 ORA-28040: No matching authentication protocol

  • 若要列出資料庫連結,請使用 ALL_DB_LINKS 視觀表。請參閱 Oracle Database 19c Database Reference 中的 ALL_DB_LINKSOracle Database 23ai Database Reference ,瞭解詳細資訊。

  • 公事包檔案以及資料庫使用者 ID 和密碼,可讓您存取目標 Oracle 資料庫中的資料。將公事包檔案儲存在安全位置。只與授權的使用者共用公事包檔案。

  • Autonomous Database 執行處理位於專用端點時,有兩個選項可用來指定目標資料庫:請使用 hostname 參數或 rac_hostnames 參數:

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

    • 當目標為 Oracle RAC 資料庫時,請使用 rac_hostnames 參數指定一或多個含有 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的主機名稱。這可讓您利用 Oracle RAC 的高可用性功能。不支援使用 IP 位址、SCAN IP 或 rac_hostnames 值中的 SCAN 主機名稱。

      當您在 rac_hostnames 參數中指定主機名稱清單時,CREATE_DATABASE_LINK 會使用所有指定的主機名稱作為連線字串中的位址。如果目標 Oracle RAC 資料庫上沒有其中一個指定的主機,Autonomous Database 會自動嘗試使用清單中的另一個主機名稱連線。
    • DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 不支援 hostnamerac_hostnames 參數中的 localhost 值。