使用在 Azure VM 中运行的 Oracle Database Gateway Server 加载数据

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

体系结构

此体系结构使用在 Azure 虚拟机中运行的 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-azure-vm.zip

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

  • Oracle Database Gateway for SQL Server 软件可以在 Azure 虚拟机上运行。必须根据 Oracle Database Gateway for SQL Server 要求和大小调整准则,将 CPU、内存和磁盘大小分配给 Azure 虚拟机。有关详细信息,请参阅下面的“Oracle Database Gateway for SQL Server 的系统要求”。
  • Oracle Exadata Database Service on Dedicated Infrastructure 需要解析运行 Oracle Database Gateway 的 Azure 虚拟机的主机名和 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

下载以下软件包:

关于必需的服务和角色

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

  • OracleDB for Azure ,Oracle Exadata Database Service on Dedicated Infrastructure
  • Oracle Cloud Infrastructure
  • Azure 虚拟机

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

服务名:职责 要求 ...
Oracle Exadata Database Service on Dedicated Infrastructure :sys con 配置数据库链接。
Oracle Cloud Infrastructure :VCN Admin 添加安全规则,修改 DNS 以解析为 Azure 端点和 Azure VM。
Azure 虚拟机:root 创建 oracle 用户以安装和配置 Oracle Database Gateway 软件。修改本地防火墙以允许连接到端口 1521。

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

Azure 虚拟机中运行的 Oracle Database Gateway 的注意事项

在 Azure 虚拟机中运行 Oracle Database Gateway for SQL Server 非常适合熟悉 Azure 服务但不熟悉 OCI 服务的客户。

在 Azure VM 中运行的 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 软件在成本较低的 Azure OCPU 上运行,而不是在更专业、价格更高的 Oracle Exadata Database Service on Dedicated Infrastructure OCPU 上运行。
  • Oracle Database Gateway 服务器与 Azure SQL Server 之间的通信已加密(由 Azure SQL Server 默认配置强制执行)。
  • Oracle Database 和 Azure SQL Server 数据库之间的数据类型转换和映射由 Oracle Database Gateway 软件自动管理。
  • Azure SQL Server 的主机名解析由 Azure 在 Azure 虚拟机级别自动管理。

Azure 虚拟机中运行的 Oracle Database Gateway 的缺点

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

配置在 Azure 虚拟机中运行的 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 Server 的全限定主机名,通常采用 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. 在为 OracleDB for Azure 配置的 vnet 上创建运行 Linux 7.9 的 Azure 虚拟机。此虚拟机将运行 Oracle Database Gateway for SQL Server 。请注意分配给此虚拟机的 hostnameIP 地址(在 Azure vnet 上),此信息需要告知 Oracle Exadata Database Service on Dedicated Infrastructure 数据库如何连接到 Oracle Database Gateway 服务器。主机名通常采用 servername.windows.net 格式。
  3. 从 OCI 主菜单中选择网络/DNS 管理以创建专用 DNS 区域。在新的专用 DNS 区域中,添加在上一步创建的 Azure VM 的记录主机名和 IP 地址。
  4. 从 OCI 主菜单中,选择网络/DNS 管理以创建 DNS 专用视图。将在上一步中创建的专用 DNS 区域添加到此新创建的 DNS 专用视图,并激活更改。
  5. 从 OCI 主菜单中,选择网络/虚拟客户端网络 (VCN) 。选择预配 Oracle Database Gateway Oracle Exadata Database Service on Dedicated Infrastructure 服务时创建的 VCN(如果需要,请更改区间)。单击 DNS 解析程序链接,然后将从上一步创建的 DNS 专用视图添加到 DNS 解析程序。这将允许将名称和 IP 地址从 Oracle Exadata Database Service on Dedicated Infrastructure 解析为运行 Oracle Database Gateway 的 Azure VM。
  6. 登录到 Oracle Exadata Database Service on Dedicated Infrastructure VM 集群节点之一,以使用 nslookup 验证将运行 Oracle Database Gateway 的 Azure VM 的主机名到 IP 地址解析是否有效。
    例如:
    [opc@exa_dbnodex ~]$ nslookup servername.windows.net
    Server: 169.254.169.254
    Address: 169.254.169.254#53
    Non-authoritative answer:
    Name: servername.windows.net
    Address: IP_address_of_Azure_VM_from_step_2
    [opc@exa_dbnodex ~]$
    示例中的变量具有以下值:
    • servername 是步骤 1 中 Azure SQL Server 专用端点的名称。
    • IP_address_of_Azure_VM_from_step_2 是步骤 2 中 Azure VM 的 IP 地址。
  7. 安装先前在新 Azure 虚拟机上下载的 Oracle Database Gateway 软件。
  8. 为 Azure SQL Server 配置 Oracle Database Gateway ,以使用 Azure SQL Server 专用端点连接到 Azure SQL Server 数据库。
    请注意,运行 Oracle Database GatewayAzure SQL Server 专用端点的 Azure 虚拟机位于同一 Azure vnet 中。
  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=Azure_VM_Hostname_From_Step_2)(PORT=15
    21))
    (CONNECT_DATA=(SID=Database_Name_From_Step_1))
    (HS=OK)
    )
    示例中的变量具有以下值:
    • exadb_nameOracle Exadata Database Service on Dedicated Infrastructure 数据库的名称。
    • Database_Name_From_Step_1 是步骤 1 中的数据库名称。
    • Azure_VM_Hostname_From_Step_2 是步骤 2 中 Azure VM 的主机名。
  10. 使用 tnsping 测试 Azure 虚拟机中运行的 Oracle Exadata Database Service on Dedicated Infrastructure 数据库和 Oracle Database Gateway for SQL Server 之间的连接(此连接使用 Azure 与 OCI 之间 OracleDB 为 Azure 建立的快速延迟网络链接)。
    [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=Azure_VM_Hostname_From_Step_2)(PORT=15
    21)) (CONNECT_DATA=(SID=Database_Name_From_Step_1)) (HS=OK))
    OK (0 msec)
    [oracle@exadbnodex ~]$
    示例中的变量具有以下值:
    • exadb_nameOracle Exadata Database Service on Dedicated Infrastructure 数据库的名称。
    • Database_Name_From_Step_1 是步骤 1 中的数据库名称。
    • Azure_VM_Hostname_From_Step_2 是步骤 2 中 Azure VM 的主机名。
  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 可插入数据库 (pluggable database,PDB)
    [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;
    示例中的变量具有以下值:
    • some_table 是要查询的数据库中的表的名称。
    • DatabaseLink_Name 是步骤 11 中的数据库链接名称。

安装 Oracle Database Gateway 服务器

以下步骤介绍了如何在运行 Oracle Linux 7。9 的 Azure 虚拟机上安装 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 Server 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 的 Azure 虚拟机上安装 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:1433//Database_Name_From_Step_1
    # alternate connect format is hostname/serverinstance/databasename
    HS_DB_NAME=Database_Name_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 是运行 Azure SQL Server 数据库的 SQL 服务器的全限定主机名,来自步骤 1
    • Database_Domain_Name 是数据库位于第 1 步(通常为 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
    Azure_SQL_Server_Database_Name =
    (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST= 
    Azure_VM_Hostname_From_Step_2)(PORT=1521))
    (CONNECT_DATA=(SID=Azure_SQL_Server_Database_Name))
    (HS=OK)
    )
    示例中的变量具有以下值:
    • Azure_SQL_Server_Database_Name步骤 1Azure SQL Server 数据库的名称。
    • Azure_VM_Hostname_From_Step_2步骤 2 中 Azure VM 的主机名。
  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=
    Azure_VM_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)
    )
    )
    示例中的变量具有以下值:
    • Azure_VM_Hostname_From_Step_2步骤 2 中 Azure VM 的主机名。
    • Database_Name_From_Step_1 是来自步骤 1Azure SQL Server 数据库的名称。
  4. 在 Azure VM 中运行的 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= 
    Azure_VM_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 数据库的名称。
    • Azure_VM_Hostname_From_Step_2步骤 2 中 Azure VM 的主机名。