注意:

在專用端點上使用客戶管理的異質連線,從 Autonomous Database 建立與 Microsoft SQL Server 的資料庫連結

簡介

在處理資料庫時,組織資料會儲存在多個資料庫中,而您處理資料庫時需要存取另一個資料庫上的物件。這是 Oracle Database Link 可以協助的地方,資料庫連結是某個資料庫中的綱要物件,可讓您存取另一個資料庫的物件。另一個資料庫並不需要是 Oracle Database 系統。不過,若要存取非 Oracle 系統,您必須使用「Oracle 異質服務」。

在本教學課程中,我們將探討如何從專用端點上的 Oracle Autonomous Database Serverless (ADB-S) 存取位於 Microsoft SQL Server 資料庫 (非 Oracle 資料庫) 的專用端點。若要從 ADB-S 存取非 Oracle 資料庫,我們需要建立從 Autonomous Database 到 Oracle Database Gateway 的資料庫連結。

有兩個選項可以建立從 Autonomous Database 到 Oracle Database Gateway 的資料庫連結,以存取專用端點上的非 Oracle 資料庫:

在不使用公事包 (TLS) 的專用端點上,使用客戶管理的異質連線來建立與 Microsoft SQL Server 資料庫的資料庫連結

使用公事包 (TCPS) 在專用端點上建立與 Microsoft SQL Server 資料庫之客戶管理異質連線的資料庫連結

目標

在專用端點上透過與 Microsoft SQL Server (非 Oracle Database) 的客戶管理異質連線,從 Autonomous Database 建立資料庫連結。

必要條件

為了保持簡單,我們已使用 Windows Server 2019 在相同的 OCI VM 執行處理上安裝 Oracle Database Gateway for SQL Server 和 Microsoft SQL Server 2019。

架構

以下是解決方案的高階架構範例

影像 1

adb-s-db-link-to-mssql.png 圖解描述

Task 1.1:設定 Oracle Database Gateway for SQL Server

開始之前,我們需要確定已正確設定 Oracle Database Gateway for SQL Server。安裝 Oracle Database Gateway for SQL Server 時,您會設定 ORACLE_HOME,並記下 ORACLE_HOME 位置。本教學課程的位置為 'C:\app\oracle\product\19.0.0\tghome_1'

您必須要有四個必須確保正確設定的重要檔案。

這是我們的本教學課程測試環境的檔案外觀。

ORACLE_HOME\dg4msql\admin\initdg4msql.ora

# This is a customized agent init file that contains the HS parameters  
# that are needed for the Database Gateway for Microsoft SQL Server    
#    
# HS init parameters
#
HS_FDS_CONNECT_INFO=mssqlvm1:1433//AdventureWorks
HS_FDS_TRACE_LEVEL=ODBC
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER

ORACLE_HOME\network\admin\listener.ora

# listener.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.  
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mssqlvm1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCPS)(HOST = mssqlvm1)(PORT = 2484))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (SID_NAME=dg4msql)
         (ORACLE_HOME=C:\app\oracle\product\19.0.0\tghome_1)
         (PROGRAM=dg4msql)
      )
  )

ORACLE_HOME\network\admin\sqlnet.ora

# sqlnet.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\sqlnet.ora    
# Generated by Oracle configuration tools.    
# This file is actually generated by netca. But if customers choose to    
# install "Software Only", this file wont exist and without the native    
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES= (NONE)

NAMES.DIRECTORY_PATH= (TNSNAMES)

ORACLE_HOME\network\admin\tnsnames.ora

dg4msql=    
(DESCRIPTION=    
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))    
(CONNECT_DATA=(SID=dg4msql))    
(HS=OK)    
)

請重新啟動 Oracle Database Gateway 服務,此教學課程為 'OracleOraGTW19Home1TNSListener ' (使用服務主控台 (Services.msc)。

您可以使用 lsnrctl status 指令來檢查監聽器狀態:

C:\Users\opc>lsnrctl status    
LSNRCTL for 64-bit Windows: Version 19.0.0.0.0 - Production on 19-JUL-2023 11:45:54    
Copyright (c) 1991, 2019, Oracle.  All rights reserved.    
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mssqlvm1)(PORT=1521)))    
STATUS of the LISTENER    
------------------------    
Alias  LISTENER    
Version  TNSLSNR for 64-bit Windows: Version 19.0.0.0.0 - Production    
Start Date  19-JUL-2023 09:14:23    
Uptime  0 days 2 hr. 31 min. 32 sec    
Trace Level  off    
Security  ON: Local OS Authentication    
SNMP  OFF    
Listener Parameter File  C:\app\oracle\product\19.0.0\tghome_1\network\admin\listener.ora    
Listener Log File  C:\app\oracle\diag\tnslsnr\MSSQLVM1\listener\alert\log.xml    
Listening Endpoints Summary...    
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=MSSQLVM1)(PORT=1521)))    
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=MSSQLVM1)(PORT=2484)))    
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))    
Services Summary...    
Service "dg4msql" has 1 instance(s).    
Instance "dg4msql", status UNKNOWN, has 1 handler(s) for this service...    
The command completed successfully
  1. 在可存取 MS SQL Server 資料庫的 MS SQL Server 上建立登入。例如,我們在可存取 MS SQL Server 資料庫 AdventureWorks 的 MS SQL Server 上建立 SQL 登入 ORACLE

  2. 連線至 Autonomous Database 並建立證明資料以存取 MS SQL Server 資料庫。您以 DBMS_CLOUD.CREATE_CREDENTIAL 指定的使用者名稱和密碼是資料庫連結內使用的 MS SQL Server 資料庫證明資料。本教學課程提供 SQL 登入 ORACLE 的證明資料。

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
      credential_name => 'DB_LINK_CRED',
      username => 'ORACLE',	--Ensure username is in UPPERCASE
      password => 'USER_PASSWORD'
      );
    END;
    /
    
  3. 現在,使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 在 Autonomous Database 上建立資料庫連結到 Oracle Database Gateway for SQL Server。

     BEGIN
          DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
               db_link_name =>       'MSSQLLINK',
               hostname =>           'gatewayhostname',
               port =>               '1521',
               service_name =>       'dg4msql',
               ssl_server_cert_dn =>  NULL,
               credential_name =>    'DB_LINK_CRED',
               directory_name =>      NULL,
               private_target =>      TRUE,
               gateway_link =>        TRUE,
               gateway_params =>      NULL);
     END;
     /
    
    

    注意:當目標非 Oracle Database 位於專用端點時,private_target 參數必須設為 TRUE

  4. 使用 Oracle DB 連結查詢 MS SQL Server 資料庫。

    SELECT * FROM HumanResources.Employee@MSSQLLINK;

您可以使用 Oracle DB Link (不含 ADB-S 的公事包) 查詢專用端點上的 MS SQL Server 資料庫。

Task 2.1:設定 Oracle Database Gateway for SQL Server

現在,在建立與專用端點上與 Microsoft SQL Server 資料庫之「客戶管理異質連線」的資料庫連結之前,我們需要建立一個公事包。您可以使用 orapki 建立自行簽署的公事包。

我們將在安裝 Oracle Database Gateway for SQL Server 的相同機器上建立伺服器和從屬端公事包。由於此機器上已安裝閘道,因此 orapki 已存在於此處 'C:\app\oracle\product\19.0.0\tghome_1\bin'

讓我們為伺服器和從屬端公事包建立兩個資料夾:

建立伺服器公事包並新增伺服器憑證的指令:

orapki wallet create -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -auto_login
orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -dn "CN=windows" -keysize 1024 -self_signed -validity 3650 -sign_alg sha256

建立用戶端公事包和新增用戶端憑證的指令:

orapki wallet create -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -auto_login
orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -dn "CN=mssqlvm1client" -keysize 1024 -self_signed -validity 3650 -sign_alg sha256

現在我們需要從伺服器公事包匯出憑證,然後將它匯入從屬端公事包,並且從從屬端公事包匯出憑證,然後將它匯入伺服器公事包。

從公事包匯出憑證的指令:

orapki wallet export -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -dn "CN=windows" -cert C:\app\oracle\product\19.0.0\tghome_1\walletserver\server.crt
orapki wallet export -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -dn "CN=mssqlvm1client" -cert C:\app\oracle\product\19.0.0\tghome_1\walletclient\client.crt

將憑證匯入公事包的指令:

orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -trusted_cert -cert C:\app\oracle\product\19.0.0\tghome_1\walletclient\client.crt
orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -trusted_cert -cert C:\app\oracle\product\19.0.0\tghome_1\walletserver\server.crt

現在請確認已正確更新下列四個檔案:

這是我們的本教學課程測試環境的檔案外觀。

ORACLE_HOME\dg4msql\admin\initdg4msql.ora

# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Microsoft SQL Server

#
# HS init parameters
#
HS_FDS_CONNECT_INFO=mssqlvm1:1433//AdventureWorks
HS_FDS_TRACE_LEVEL=ODBC
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER

ORACLE_HOME\network\admin\listener.ora

# listener.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.    

WALLET_LOCATION =
  (SOURCE =
    (METHOD = File)
    (METHOD_DATA =
      (DIRECTORY=C:\app\oracle\product\19.0.0\tghome_1\walletserver)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mssqlvm1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCPS)(HOST = mssqlvm1)(PORT = 2484))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (SID_NAME=dg4msql)
         (ORACLE_HOME=C:\app\oracle\product\19.0.0\tghome_1)
         (PROGRAM=dg4msql)
      )
  )

ORACLE_HOME\network\admin\sqlnet.ora

# sqlnet.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\sqlnet.ora
# Generated by Oracle configuration tools.    
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.

SSL_SERVER_DN_MATCH= (ON)

WALLET_LOCATION =
  (SOURCE =
    (METHOD = File)
    (METHOD_DATA =
      (DIRECTORY=C:\app\oracle\product\19.0.0\tghome_1\walletserver)
    )
  )

SQLNET.AUTHENTICATION_SERVICES= (NONE)

NAMES.DIRECTORY_PATH= (TNSNAMES)

ORACLE_HOME\network\admin\tnsnames.ora

dg4msql=
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
    (CONNECT_DATA=(SID=dg4msql))
    (ADDRESS=(PROTOCOL=tcps)(HOST=localhost)(PORT=2484))
    (CONNECT_DATA=(SID=dg4msql))
    (HS=OK)
  )
  1. 在可存取 MS SQL Server 資料庫的 MS SQL Server 上建立登入。例如,我們在可存取 MS SQL Server 資料庫 AdventureWorks 的 MS SQL Server 上建立 SQL 登入 ORACLE

  2. 將從屬端公事包 (cwallet.sso) 從 C:\app\oracle\product\19.0.0\tghome_1\walletclient 複製到 OCI 物件存放區。

  3. 連線至 Autonomous Database,並建立證明資料來存取您複製 cwallet.sso 檔案的物件存放區。

    • 如需不同物件儲存服務之使用者名稱和密碼參數的相關資訊,請參閱 CREATE_CREDENTIAL

    • 請參閱必要的金鑰和 OCID ,以取得必要的參數資訊。

      BEGIN
         DBMS_CLOUD.CREATE_CREDENTIAL (
             credential_name => 'OCI_KEY_CRED',
             user_ocid       => 'ocid1.user.oc1..aaaa.....7igkq',
             tenancy_ocid    => 'ocid1.tenancy.oc1..aaaa....xo3da',
             private_key     => 'MIIEvgIBA.........S0EOOYN4ijczB',
             fingerprint     => 'f2:db:f9:18:a4:..:..:..:f4:f6:6c:39:96:16:aa:27');
      END;
      /
      
  4. 現在我們將在 Autonomous Database 上為公事包檔案 cwallet.sso 建立目錄。

    CREATE DIRECTORY dblink_wallet_dir AS 'wallet_dir';
    
  5. 我們將使用 DBMS_CLOUD.GET_OBJECT 將目標閘道自行簽署公事包上傳至上一個步驟 DBLINK_WALLET_DIR 中建立的目錄。

    BEGIN
      DBMS_CLOUD.GET_OBJECT(
        credential_name => 'OCI_KEY_CRED',
        object_uri => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/<namespace>/b/<bucketname>/o/cwallet.sso',
        directory_name => 'dblink_wallet_dir');
    END;
    

    若要取得 object_uri,請參閱雲端物件儲存 URI 格式

  6. 建立存取 MS SQL Server 資料庫的證明資料。您以 DBMS_CLOUD.CREATE_CREDENTIAL 指定的使用者名稱和密碼是資料庫連結內使用的 MS SQL Server 資料庫證明資料。本教學課程提供 SQL 登入 'ORACLE' 的證明資料。

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'DB_LINK_CRED',
    username => 'ORACLE',	--Ensure username is in UPPERCASE
    password => 'USER_PASSWORD'
       );
     END;
     /
    
  7. 現在,使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 在 Autonomous Database 上建立資料庫連結到 Oracle Database Gateway for SQL Server。

    BEGIN
         DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
              db_link_name =>       'MSSQLLINKWW',
              hostname =>           'mssqlvm1',
              port =>               '2484',
              service_name =>       'dg4msql',
              ssl_server_cert_dn => 'CN=windows',
              credential_name =>    'DB_LINK_CRED',
              directory_name =>     'dblink_wallet_dir',
              gateway_link =>        TRUE,
              private_target =>      TRUE,
              gateway_params =>      NULL);
    END;
    /
    
  8. 現在,讓我們使用 Oracle DB 連結來查詢 MS SQL Server 資料庫。

    SELECT * FROM HumanResources.Employee@MSSQLLINKWW;
    

接下來的步驟

在本教學課程中,我們學習如何透過客戶管理的異質連線,從 Autonomous Database 設定資料庫連結,到專用端點上的 Microsoft SQL Server (非 Oracle Database)。我們探索了兩種選擇,例如沒有錢包 (TLS) 和錢包 (TCPS)。

類似的步驟也可用於其他非 Oracle 資料庫,您必須確定已正確設定 Oracle Database Gateway

確認

其他學習資源

探索 docs.oracle.com/learn 的其他實驗室,或者存取更多 Oracle Learning YouTube 頻道上的免費學習內容。此外,請瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning 檔案總管。

如需產品文件,請造訪 Oracle Help Center