注:

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)的数据库链接。

先决条件

为了保持简单,我们已在 Windows Server 2019 的同一 OCI VM 实例上安装了 Oracle Database Gateway for SQL Server 和 Microsoft SQL Server 2019。

体系结构

下面是解决方案的高级架构示例

图像 1

插图 adb-s-db-link-to-mssql.png 的说明

任务 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 服务,在本教程中,它是使用服务控制台 (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. 在可访问 MS SQL Server 数据库的 MS SQL Server 上创建登录。例如,我们在 MS SQL Server 上创建了一个可访问 MS SQL Server 数据库 AdventureWorks 的 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 查询专用端点上的 MS SQL Server 数据库,而无需使用 ADB-S 中的 wallet。

任务 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 创建两个文件夹:

用于创建服务器 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

# 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 上创建了一个可访问 MS SQL Server 数据库 AdventureWorks 的 SQL 登录 ORACLE

  2. 将客户端 wallet (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 上为 wallet 文件 cwallet.sso 创建一个目录。

    CREATE DIRECTORY dblink_wallet_dir AS 'wallet_dir';
    
  5. 我们将使用 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 格式

  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;
    

后续步骤

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

确认

更多学习资源

探索 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 频道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心