使用在 OCI 计算中运行的 Oracle Database Gateway 加载数据

使用 OracleDB for AzureAzure 应用程序可以从 OCI 数据库加载和查询数据。此体系结构介绍了 Oracle Exadata Database Service on Dedicated Infrastructure 如何利用 OracleDB for Azure 提供的基础结构,使用通过在 OCI 计算实例中运行的 Oracle Database Gateway for SQL Server 软件的数据库链接从 Azure SQL Server 加载和查询数据。

体系结构

此体系结构使用在 OCI 计算实例中运行的 Oracle Database Gateway for SQL Server 将数据从 Azure SQL Server 加载到 Oracle Exadata Database Service on Dedicated InfrastructureOracle Database Gateway for SQL Server 使用 Azure 专用端点通过快速低延迟网络链接连接到 Azure SQL Server

下图说明了此体系结构。



exadata-db-azure-odsa-gateway.zip

请注意以下有关此体系结构的信息:

  • 必须在 Oracle Exadata Database Service on Dedicated Infrastructure 客户端子网中创建新的安全规则,以允许流量流入端口 1521。
  • Oracle Database Gateway 软件可以在 OCI 计算虚拟机或裸金属上运行。必须根据 Oracle Database Gateway for SQL Server 服务器要求和大小调整准则,将 OCPU、内存和磁盘大小分配给 OCI 计算实例。有关详细信息,请参阅下面的 Oracle Database Gateway for SQL Server 的系统要求。
  • OCI 中需要 Azure SQL Server 端点的主机名到 IP 地址解析。在 Oracle Database Gateway 服务器上编辑 /etc/hosts 文件,或在配置了 Oracle Exadata Database Service on Dedicated Infrastructure 的 OCI 虚拟云网络 (VCN) 上配置专用 DNS 区域。
  • Oracle Exadata Database Service on Dedicated Infrastructure 数据库中,默认情况下参数 global_names 设置为 TRUE。因此,创建指向 Azure SQL Server 的数据库链接时必须使用全限定数据库名称

开始之前

开始之前,请检查此设置中使用的主要软件组件的版本,下载所需的软件包,并查看产品文档以供日后参考。

查看软件要求

这些说明在以下软件和硬件版本上进行了测试。

  • Oracle Exadata Database Service on Dedicated Infrastructure X8M-2
  • Oracle Database 19.16
  • Azure SQL Server

下载以下软件包:

关于必需的服务和角色

此解决方案需要以下服务:

  • Oracle Exadata Database Service on Dedicated Infrastructure ,OracleDB for Azure
  • Oracle Cloud Infrastructure
  • Oracle Cloud Infrastructure Compute

这些是每个服务所需的角色。

服务名:职责 要求 ...
Oracle Exadata Database Service on Dedicated Infrastructure :sys con 配置数据库链接。
Oracle Cloud Infrastructure :VCN Admin 添加安全规则并修改 DNS。
Oracle Cloud Infrastructure Compute :admin 创建计算实例以安装 Oracle Database Gateway
Oracle Cloud Infrastructure Compute :opc/root 创建用户以安装和配置 Oracle Database Gateway 软件。修改本地防火墙以允许连接到端口 1521。

要获取所需的云服务,请参阅 了解如何获取 Oracle 解决方案的 Oracle Cloud 服务

在 OCI 计算实例中运行的 Oracle Database Gateway 的注意事项

在实施此解决方案之前,请先查看这些注意事项。在 OCI 计算实例中运行 Oracle Database Gateway for SQL Server 非常适合熟悉 OCI 服务的客户。

在 OCI 计算中运行的 Oracle Database Gateway 的优势

  • Oracle 开发并支持 Oracle Database Gateway for SQL Server
  • 不需要在 Oracle Exadata Database Service on Dedicated Infrastructure 上安装额外的第三方软件,从而使环境易于更新和维护。
  • Oracle Database Gateway for SQL Server 在与 Oracle Exadata Database Service on Dedicated Infrastructure 不同的计算实例上运行,这使得两个环境易于更新和维护。此外,该解决方案可能更经济实惠,因为 Oracle Database Gateway 软件在成本较低的 OCI 计算 OCPU 上运行,而不是在更专业、价格更高的 Oracle Exadata Database Service on Dedicated Infrastructure OCPU 上运行。
  • Oracle Database Gateway 服务器与 Microsoft Azure SQL Server 之间的通信已加密(默认情况下由 Microsoft Azure SQL Server 强制执行)。
  • Oracle 数据库与 Microsoft Azure SQL Server 数据库之间的数据类型转换和映射由 Oracle Database Gateway 软件自动管理。

在 OCI 计算中运行的 Oracle Database Gateway 的缺点

  • 可能需要额外的 Oracle Database Gateway 软件许可证。
  • 配置 Oracle Database Gateway 服务器时,Oracle Exadata Database Service on Dedicated InfrastructureOracle Database Gateway 服务器之间的通信默认情况下不会加密。Additional configuration in Oracle Database Gateway Server sqlnet.ora is required to enforce encryption from Oracle Exadata Database Service on Dedicated Infrastructure to Oracle Database Gateway Server.

配置在 OCI 计算中运行的 Oracle Database Gateway

  1. 登录 Azure 控制台以获取 Azure SQL Server 数据库的信息,Oracle Exadata Database Service on Dedicated Infrastructure 数据库将从该数据库加载和查询数据。要告知 Oracle Database Gateway 服务器如何连接到 Azure SQL Server 数据库,需要此信息。
    获取以下详细信息:
    • 数据库名称Azure SQL Server 数据库的名称。
    • 全限定服务器名称:运行 Azure SQL Server 数据库的 SQL 服务器的全限定主机名,通常采用 servername.database.windows.net 格式。
    • Azure SQL Server 专用端点:连接到 Azure SQL Server 的 Azure vnet 中的 Azure SQL Server 专用端点的名称和 IP 地址。如果尚不存在专用端点,请为 Azure SQL Server 创建一个端点,并记下名称和 IP 地址。
    • Azure SQL Server 用户名:允许连接到 Azure SQL Server 数据库和方案的现有 Azure SQL Server 用户的名称,通常为 sqladmin
    • Azure SQL Server 用户密码Azure SQL Server 用户连接到 Azure SQL Server 数据库和方案的密码。
  2. 登录到 OCI 控制台并在运行 Oracle Linux 7。9 的 OracleDB for Azure Oracle Exadata Database Service on Dedicated Infrastructure 客户端子网上创建 OCI 计算实例。此计算实例将运行 Oracle Database Gateway for SQL Server
    请注意分配给此计算实例的 hostnameIP address 。要告知 Oracle Exadata Database Service on Dedicated Infrastructure 如何连接到 Oracle Database Gateway 服务器,需要此信息。
  3. 从 OCI 菜单中,选择网络/DNS 管理,然后创建一个专用 DNS 区域。在新的专用 DNS 区域中,从步骤 1 中为“全限定服务器名称”添加一条记录,以解析为步骤 1 中的 Azure SQL Server 专用端点 IP 地址。
  4. 从 OCI 菜单中,创建 DNS 专用视图。将在步骤 3 中创建的专用 DNS 区域添加到此 DNS 专用视图,然后激活更改。
  5. 从 OCI 菜单中,选择网络/虚拟客户端网络 (VCN) 。选择在预配 Oracle Exadata Database Service on Dedicated InfrastructureOracleDB for Azure 时创建的 VCN(如果需要,请更改区间)。选择 DNS 解析程序链接,然后将以前创建的 DNS 专用视图添加到 DNS 解析程序。
    这样,就可以将 OCI 服务(计算和 Oracle Exadata Database Service on Dedicated Infrastructure )的名称和 IP 地址解析到 Azure SQL Server 专用端点。
  6. 登录到某个 Oracle Exadata Database Service on Dedicated Infrastructure VM 集群节点,并使用 nslookup 命令验证主机名到 IP 地址解析是否适用于 Azure SQL Server 主机名和专用端点 IP 地址。
    例如:
    [opc@exa_dbnodex ~]$ nslookup servername.database.windows.net
    Server: 169.254.169.254
    Address: 169.254.169.254#53
    Non-authoritative answer:
    Name: servername.database.windows.net
    Address: IP_address_of_Azure_SQL_Server_private_endpoint
     [opc@exa_dbnodex ~]$
    示例中的变量具有以下值:
    • servername 是步骤 1 中 Azure SQL Server 的全限定服务器名称的名称。
    • IP_address_of_Azure_SQL_Server_private_endpoint 是步骤 1 中 Azure SQL Server 专用端点的 IP 地址。
  7. 安装先前在新 OCI 计算实例上下载的 Oracle Database Gateway 软件。
  8. 为在 OCI 计算实例中运行的 Oracle Database Gateway 配置 Azure SQL Server,以使用 Azure 与 OCI 之间通过 OracleDB for Azure 配置的快速延迟网络链路,通过 Azure SQL Server 专用端点连接到 Azure SQL Server 数据库。
  9. Oracle Exadata Database Service on Dedicated Infrastructure VM 集群的所有节点上,配置 Oracle Exadata Database Service on Dedicated Infrastructure 数据库 tnsnames.ora 以解析为 Oracle Database Gateway for SQL Server
    例如:
    [opc@exa_dbnodex ~]$ sudo su - oracle
    Last login: Tue Sep 13 20:06:30 UTC 2022
    [oracle@ exa_dbnodex ~]$ . ./exadb_name.env
    [oracle@ exa_dbnodex ~]$ cd $ORACLE_HOME
    [oracle@ exa_dbnodex dbhome_1]$ cd network/admin
    [oracle@ exa_dbnodex admin]$ cd exadb_name/
    [oracle@ exa_dbnodex exadb_name]$ tail -10 tnsnames.ora
    Database_Name_From_Step_1 =
    (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=OCI_Compute_Instance_Hostname_From_Step_2)(PORT=1521))
    (CONNECT_DATA=(SID=Database_Name_From_Step_1,))
    (HS=OK)
    )
    示例中的变量具有以下值:
    • exadb_nameOracle Exadata Database Service on Dedicated Infrastructure 数据库的名称。
    • Database_Name_From_Step_1 是步骤 1 中的数据库名称。
    • OCI_Compute_Instance_Hostname_From_Step_2 是步骤 2 中 OCI 计算实例的主机名。
  10. 使用 tnsping 命令测试在 OCI 计算中运行的 Oracle Exadata Database Service on Dedicated InfrastructureOracle Database Gateway (此连接完全在 OCI VCN 中)之间的连接。
    例如:
    [oracle@exajc-dbnodex ~]$ tnsping Database_Name_From_Step_1
    TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 16-SEP-2022 21:28:34
    Used parameter files:
    /u02/app/oracle/product/19.0.0.0/dbhome_1/network/admin/exadb_name/s
    qlnet.ora
    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION= 
    (ADDRESS=(PROTOCOL=tcp)(HOST==OCI_Compute_Instance_Hostname_From_Step_2)(PORT=1521)) (CONNECT_DATA=(SID=Database_Name_From_Step_1)) 
    (HS=OK))
    OK (0 msec)
    [oracle@exadbnodex ~]$
    示例中的变量具有以下值:
    • Database_Name_From_Step_1 是步骤 1 中 Azure SQL Server 数据库的名称。
    • exadb_nameOracle Exadata Database Service on Dedicated Infrastructure 数据库的名称。
    • OCI_Compute_Instance_Hostname_From_Step_2 是步骤 2 中 OCI 计算实例的主机名。
  11. Oracle Exadata Database Service on Dedicated Infrastructure 可插入数据库 (pluggable database,PDB) (不在 CDB 中)中,创建指向 Azure SQL Server 数据库的数据库链接。默认情况下,Oracle Exadata Database Service on Dedicated Infrastructure 数据库中的参数 global_names 设置为 TRUE,因此必须使用全限定数据库名称来创建数据库链接。创建数据库链接后,可以使用此链接查询数据并将其从 Azure SQL Server 数据库加载到 Oracle Exadata Database Service on Dedicated Infrastructure 可插入数据库。
    [opc@exadbnodex ~]$ sudo su - oracle
    Last login: Tue Sep 13 20:06:30 UTC 2022
    [oracle@exadbnodex ~]$ . ./exadb_name.env
    [oracle@exadbnodex ~]$sqlplus / as sysdba
    SQL> show pdbs;
    CON_ID CON_NAME OPEN MODE RESTRICTED
    ---------- ------------------------------ ---------- ----------
     2 PDB$SEED READ ONLY NO
     3 PDBName READ WRITE NO
    SQL> alter session set container=PDBName;
    Session altered.
    SQL>create public database 
    link Fully_Qualified_Server_Name_From_Step_1 connect to 
    "Azure_SQL_Server_Username" identified by 
    "Azure_SQL_User_password" using 
    'Database_Name_From_Step_1';
    Database link created.
    请注意,用户名和密码用双引号 (" ") 引起来,而 Azure SQL Server 数据库名称用单引号(‘ ‘)引起来。
    示例中的变量具有以下值:
    • exadb_nameOracle Exadata Database Service on Dedicated Infrastructure 数据库的名称。
    • PDBName 是可插入数据库的名称。
    • Fully_Qualified_Server_Name_From_Step_1 是从步骤 1 开始运行 Azure SQL Server 数据库的 SQL 服务器的全限定主机名。
    • Azure_SQL_Server_Username 是步骤 1 中现有 Azure SQL Server 用户名的名称。
    • Azure_SQL_User_PasswordAzure SQL Server 用户从步骤 1 连接到数据库的密码。
    • Database_Name_From_Step_1 是步骤 1 中 Azure SQL Server 数据库的名称。
  12. 通过运行查询来测试新创建的数据库链接。例如:
    SQL> select count(*) from 
    some_table@DatabaseLink_Name_From_Previous_Step;
    示例中的变量具有以下值:
    • some_table 是要查询的数据库中的表的名称。
    • DatabaseLink_Name_From_Previous_Step 是步骤 11 中的数据库链接名称。

安装 Oracle Database Gateway 服务器

以下步骤介绍了如何在运行 Oracle Linux 7。9 的 OCI 计算实例上安装 Oracle Database Gateway 服务器软件。

  1. 使用 yum 安装 Oracle 先决条件软件包。
    [root@dbgw ~]# yum install oracle-database-preinstall-19c
  2. 创建 useroracledba 组。
    [root@dbgw ~]# useradd -u 1001 -g dba -d /home/oracle -m -s /bin/bash oracle
    [root@dbgw ~]# groupadd -g 1001 dba
  3. Oracle Database Gateway 19.3 创建安装目录。
    [root@dbgw ~]# mkdir /u01
    [root@dbgw ~]# chown oracle:dba /u01
  4. 修改本地防火墙以允许连接到端口 1521。
    [root@dbgw ~]# firewall-cmd --get-active-zones
    public
    interfaces: eth0
    [root@dbgw ~]# firewall-cmd --zone=public --add-port=1521/tcp –permanent
    [root@dbgw ~]# firewall-cmd --reload
    [root@dbgw ~]# firewall-cmd --zone=public --list-ports
    1521/tcp
    [root@dbgw ~]# systemctl stop firewalld
    [root@dbgw ~]# systemctl start firewalld
  5. 将之前下载的 Oracle Database Gateway 19.3 zip 文件复制到 linux VM 中的 /home/oracle 目录,然后解压缩 Oracle Database Gateway 19.3 zip 文件。
    [oracle@dbgw ~]$ unzip LINUX.X64_193000_gateways.zip
  6. 从包含的模板创建安装响应文件。
    [oracle@dbgw response]$ cd /home/oracle/gateways/response/
    [oracle@dbgw response]$ cp tg.rsp/home/oracle/tg-jc.rsp
  7. 使用以下选项修改响应文件。
    UNIX_GROUP_NAME=oracle
    INVENTORY_LOCATION=/u01/app/oraInventory
    ORACLE_HOME=/u01/app/oracle/product/gateway
    ORACLE_BASE=/u01/app/oracle
    oracle.install.tg.msqlConStr={Fully_Qualified_Server_Name_From_Step_1,1433,
    Database_Name_From_Step_1,Database_Name_From_Step_1}
    示例中的变量具有以下值:
    • Fully_Qualified_Server_Name_From_Step_1 是运行 Azure SQL Server 数据库的 SQL 服务器的全限定主机名,来自步骤 1
    • Database_Name_From_Step_1 是来自步骤 1Azure SQL Server 数据库的名称。
  8. 运行无提示安装以安装 Oracle Database Gateway 19.3。
    [oracle@dbgw gateways]$./runInstaller -silent -noconfig -
    responseFile /home/oracle/tg-jc.rsp
  9. 为用户 oracle 配置 Oracle 主目录和路径。
    [oracle@dbgw ~]$ tail -6 .bash_profile
    ORACLE_HOME=/u01/app/oracle/product/gateway
    export ORACLE_HOME
    PATH=$PATH:$ORACLE_HOME/bin
    export PATH
    [oracle@dbgw ~]$

配置 Oracle Database Gateway for SQL Server

在运行 Linux 7.9 的 OCI 计算实例上安装 Oracle Database Gateway 后,必须将其配置为使用 Azure SQL Server 专用端点连接到 Azure SQL Server 数据库。

  1. Azure SQL Server 数据库信息添加到在 OCI 计算实例上运行的 Oracle Database Gateway for SQL Server 初始化文件。此信息告诉 Oracle Database Gateway 如何连接到 Azure SQL Server 数据库。
    例如:
    [oracle@dbgw ~]$ cd $ORACLE_HOME/dg4msql/admin
    [oracle@dbgw admin]$ cp initdg4msql.ora 
    initDatabase_Name_From_Step_1.ora
    [oracle@dbgw admin]$ cat initDatabase_Name_From_Step_1.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=Fully_Qualified_Server_Name_From_Step_1:1433//Database_Name_From_Step_1
    # alternate connect format is hostname/serverinstance/databasename
    HS_DB_NAME=Database_Hostname_From_Step_1
    HS_DB_DOMAIN=Database_Domain_Name #usually database.windows.net
    HS_FDS_TRACE_LEVEL=OFF
    HS_FDS_RECOVERY_ACCOUNT=RECOVER
    HS_FDS_RECOVERY_PWD=RECOVER
    HS_FDS_ENCRYPT_SESSION=SSL
    HS_FDS_VALIDATE_SERVER_CERT=0
    示例中的变量具有以下值:
    • Database_Name_From_Step_1 是来自步骤 1Azure SQL Server 数据库的名称。
    • Fully_Qualified_Server_Name_From_Step_1 是运行 Azure SQL Server 数据库的 SQL 服务器的全限定主机名,来自步骤 1
    • Database_Hostname_From_Step_1 是来自第 1 步的数据库的主机名。
    • Database_Domain_Name 是数据库所在的域的名称,通常为 database.windows.net
    请注意,要加密 Oracle Database Gateway 服务器与 Azure SQL Server 之间的连接,需要参数 HS_FDS_ENCRYPT_SESSIONHS_FDS_VALIDATE_SERVER_CERT
  2. Oracle Database Gateway 服务器上,修改 tnsnames.ora 以解析为此网关提供的网关服务,如下所示:
    [oracle@dbgw ~]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
    # This is a sample tnsnames.ora that contains the NET8 parameters that are
    # needed to connect to an HS Agent
    Database_Name_From_Step_1 =
    (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST= 
    OCI_Compute_Instance_Hostname_From_Step_2)(PORT=1521))
    (CONNECT_DATA=(SID=Database_Name_From_Step_1))
    (HS=OK)
    )
    示例中的变量具有以下值:
    • Database_Name_From_Step_1 是来自步骤 1Azure SQL Server 数据库的名称。
    • OCI_Compute_Instance_Hostname_From_Step_2第 2 步中 OCI 计算实例的主机名。
  3. Oracle Database Gateway 服务器上,修改 listener.ora 以包括 Oracle Database Gateway 信息。
    [oracle@dbgw-jc admin]$ cat ../../network/admin/listener.ora
    # This is a sample listener.ora that contains the NET8 parameters that are
    # needed to connect to an HS Agent
    LISTENER =
    (ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=tcp)(HOST=
    OCI_Compute_Instance_Hostname_From_Step_2)(PORT=1521))
    )
    SID_LIST_LISTENER=
    (SID_LIST=
    (SID_DESC=
     (SID_NAME=Database_Name_From_Step_1)
     (ORACLE_HOME=/u01/app/oracle/product/gateway)
     (PROGRAM=dg4msql)
    )
    )
    示例中的变量具有以下值:
    • OCI_Compute_Instance_Hostname_From_Step_2第 2 步中 OCI 计算实例的主机名。
    • Database_Name_From_Step_1步骤 1Azure SQL Server 数据库的名称。
  4. 在 OCI 计算实例中运行的 Oracle Database Gateway 服务器中启动监听程序并测试与网关的连接。
    例如:
    [oracle@dbgw admin]$lsnrctl start
    [oracle@dbgw admin]$ tnsping Database_Name_From_Step_1
    TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 16-SEP-2022 21:18:39
    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST= 
    OCI_Compute_Instance_Hostname_From_Step_2)(PORT=1521)) 
    (CONNECT_DATA=(SID=Database_Name_From_Step_1)) (HS=OK))
    OK (0 msec)
    [oracle@dbgw-jc admin]$
    示例中的变量具有以下值:
    • Database_Name_From_Step_1步骤 1Azure SQL Server 数据库的名称。
    • OCI_Compute_Instance_Hostname_From_Step_2第 2 步中 OCI 计算实例的主机名。