注意:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 它會使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值替代為您雲端環境特定的值。
在專用端點上使用客戶管理的異質連線,從 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 建立資料庫連結。
必要條件
- 閱讀使用客戶管理的異質連線建立資料庫連結,以連線至專用端點上的非 Oracle 資料庫
- 檢閱文件中的先決條件
- ADB-S - 專用端點上的 Autonomous Transaction Processing 19c
- 非 Oracle Database - Microsoft SQL Server 2019 Express Edition,資料庫名稱 - AdventureWorks,在 Windows VM 上的專用端點上執行的連接埠 TCP (1433)
- Windows VM 作業系統 - Windows Server 2019
- Oracle Database Gateway - Oracle Database Gateway for SQL Server, Port - TCP (1521) , TCPS (2484)
- 從此處下載 Oracle Database Gateway,然後安裝並設定 Oracle Database Gateway for SQL Server 。
為了保持簡單,我們已使用 Windows Server 2019 在相同的 OCI VM 執行處理上安裝 Oracle Database Gateway for SQL Server 和 Microsoft SQL Server 2019。
架構
以下是解決方案的高階架構範例
adb-s-db-link-to-mssql.png 圖解描述
選項 1:建立不含公事包 (TLS) 的資料庫連結
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
- ORACLE_HOME\network\admin\listener.ora
- ORACLE_HOME\network\admin\sqlnet.ora
- ORACLE_HOME\network\admin\tnsnames.ora
這是我們的本教學課程測試環境的檔案外觀。
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
Task 1.2:從沒有公事包的 Autonomous Database 執行處理建立資料庫連結
-
在可存取 MS SQL Server 資料庫的 MS SQL Server 上建立登入。例如,我們在可存取 MS SQL Server 資料庫
AdventureWorks
的 MS SQL Server 上建立 SQL 登入ORACLE
。 -
連線至 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; /
-
現在,使用 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 。 -
使用 Oracle DB 連結查詢 MS SQL Server 資料庫。
SELECT * FROM HumanResources.Employee@MSSQLLINK;
您可以使用 Oracle DB Link (不含 ADB-S 的公事包) 查詢專用端點上的 MS SQL Server 資料庫。
選項 2:建立含有公事包 (TCPS) 的資料庫連結
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' 。
讓我們為伺服器和從屬端公事包建立兩個資料夾:
-
C:\app\oracle\product\19.0.0\tghome_1\walletserver
-
C:\app\oracle\product\19.0.0\tghome_1\walletclient
建立伺服器公事包並新增伺服器憑證的指令:
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
-
ORACLE_HOME\network\admin\listener.ora
-
ORACLE_HOME\network\admin\sqlnet.ora
-
ORACLE_HOME\network\admin\tnsnames.ora
這是我們的本教學課程測試環境的檔案外觀。
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)
)
Task 2.2:從含有公事包的 Autonomous Database 執行處理建立資料庫連結
-
在可存取 MS SQL Server 資料庫的 MS SQL Server 上建立登入。例如,我們在可存取 MS SQL Server 資料庫
AdventureWorks
的 MS SQL Server 上建立 SQL 登入ORACLE
。 -
將從屬端公事包 (
cwallet.sso
) 從C:\app\oracle\product\19.0.0\tghome_1\walletclient
複製到 OCI 物件存放區。 -
連線至 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; /
-
-
現在我們將在 Autonomous Database 上為公事包檔案
cwallet.sso
建立目錄。CREATE DIRECTORY dblink_wallet_dir AS 'wallet_dir';
-
我們將使用 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 格式 -
建立存取 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; /
-
現在,使用 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; /
-
現在,讓我們使用 Oracle DB 連結來查詢 MS SQL Server 資料庫。
SELECT * FROM HumanResources.Employee@MSSQLLINKWW;
接下來的步驟
在本教學課程中,我們學習如何透過客戶管理的異質連線,從 Autonomous Database 設定資料庫連結,到專用端點上的 Microsoft SQL Server (非 Oracle Database)。我們探索了兩種選擇,例如沒有錢包 (TLS) 和錢包 (TCPS)。
類似的步驟也可用於其他非 Oracle 資料庫,您必須確定已正確設定 Oracle Database Gateway 。
確認
- 作者 - Deviprasad Moolya (主要雲端架構師)
其他學習資源
探索 docs.oracle.com/learn 的其他實驗室,或者存取更多 Oracle Learning YouTube 頻道上的免費學習內容。此外,請瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning 檔案總管。
如需產品文件,請造訪 Oracle Help Center 。
Create database links from Autonomous Database with Customer-Managed Heterogeneous Connectivity to Microsoft SQL Server on a Private Endpoint
F84999-01
August 2023
Copyright © 2023, Oracle and/or its affiliates.