注:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于云环境的那些值。
Create database links from Autonomous Database with Customer-Managed Heterogeneous Connectivity to Microsoft SQL Server on a Private Endpoint
简介
在处理数据库时,在组织数据存储在多个数据库中,而在另一个数据库上访问对象时,需要大量时间。Oracle Database 链接可提供帮助,数据库链接是一个数据库中的方案对象,可用于访问其他数据库中的对象。另一个数据库不需要是 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 数据库:
• 在没有 wallet 的专用端点上创建与 Microsoft SQL Server 数据库的客户管理的异构连接的数据库链接 (TLS)
• 在具有 wallet 的专用端点 (TCPS) 上通过客户管理的异构连接创建与 Microsoft SQL Server 数据库的数据库链接
目标
通过客户管理的异构连接,在专用端点上创建从 Autonomous Database 到 Microsoft SQL Server(非 Oracle Database)的数据库链接。
先决条件
- 阅读文档在专用端点上使用客户管理的异构连接创建与非 Oracle 数据库的数据库链接
- 查看文档中提到的先决条件
- ADB-S - 专用端点上的自治事务处理 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,端口 - TCP (1521),TCPS (2484)
- 从此处下载 Oracle Database Gateways,然后安装和配置 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:创建不带 wallet 的数据库链接 (TLS)
任务 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 服务,在本教程中,它是使用服务控制台 (Services.msc
) 的“OracleOraGTW19Home1TNSListener ”。
可以使用 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.2:从没有 wallet 的 Autonomous Database 实例创建数据库链接
-
在可访问 MS SQL Server 数据库的 MS SQL Server 上创建登录。例如,我们在 MS SQL Server 上创建了一个可访问 MS SQL Server 数据库
AdventureWorks
的 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 查询专用端点上的 MS SQL Server 数据库,而无需使用 ADB-S 中的 wallet。
选项 2:创建带 wallet 的数据库链接 (TCPS)
任务 2.1:配置 Oracle Database Gateway for SQL Server
现在,在使用 wallet 创建与专用端点上的 Microsoft SQL Server 数据库具有客户管理的异构连接的数据库链接之前,我们需要创建一个 wallet。我们可以使用 orapki 创建自签名 wallet。
我们将在安装了 Oracle Database Gateway for SQL Server 的同一计算机上创建服务器和客户端 wallet。由于此计算机上安装了网关,因此 orapki
已位于此处 'C:\app\oracle\product\19.0.0\tghome_1\bin' 。
让我们为服务器和客户端 wallet 创建两个文件夹:
-
C:\app\oracle\product\19.0.0\tghome_1\walletserver
-
C:\app\oracle\product\19.0.0\tghome_1\walletclient
用于创建服务器 wallet 和添加服务器证书的命令:
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
用于创建客户端 wallet 和添加客户端证书的命令:
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
现在,我们需要从服务器 wallet 导出证书并将其导入到客户端 wallet,并且还需要从客户端 wallet 导出证书并将其导入服务器 wallet。
从钱包导出证书的命令:
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
将证书导入到 wallet 的命令:
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)
)
任务 2.2:使用 wallet 从 Autonomous Database 实例创建数据库链接
-
在可访问 MS SQL Server 数据库的 MS SQL Server 上创建登录。例如,我们在 MS SQL Server 上创建了一个可访问 MS SQL Server 数据库
AdventureWorks
的 SQL 登录ORACLE
。 -
将客户端 wallet (
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 上为 wallet 文件
cwallet.sso
创建一个目录。CREATE DIRECTORY dblink_wallet_dir AS 'wallet_dir';
-
我们将使用 DBMS_CLOUD.GET_OBJECT 将目标网关自签名 wallet 上载到我们在上一步中创建的目录
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;
后续步骤
In this tutorial, we learned how to configure Database Links from an Autonomous Database with Customer-Managed Heterogeneous Connectivity to Microsoft SQL Server (Non-Oracle Database) on a Private Endpoint.我们探索了这两个选项,即没有钱包 (TLS) 和钱包 (TCPS)。
类似步骤可用于其他非 Oracle 数据库,您需要确保正确配置了 Oracle Database Gateway 。
确认
- 作者 - Deviprasad Moolya(主要云架构师)
更多学习资源
探索 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 频道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
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.