Carga de datos mediante Oracle Database Gateway Server que se ejecuta en Azure VM

OracleDB para Azure permite a las aplicaciones de Azure cargar y consultar datos de bases de datos de OCI. Esta arquitectura describe cómo un Oracle Exadata Database Service on Dedicated Infrastructure puede aprovechar la infraestructura proporcionada por OracleDB para Azure para cargar datos desde un servidor SQL de Azure mediante un enlace de base de datos mediante el software de Oracle Database Gateway for SQL Server que se ejecuta en una máquina virtual de Azure.

Arquitectura

Esta arquitectura utiliza Oracle Database Gateway for SQL Server que se ejecuta en una máquina virtual de Azure para cargar datos de Azure SQL Server en Oracle Exadata Database Service on Dedicated Infrastructure. Oracle Database Gateway for SQL Server se conecta a Azure SQL Server mediante el enlace de red de latencia rápida y baja mediante un punto final privado de Azure.

En el siguiente diagrama se ilustra esta arquitectura.



exadata-db-azure-odsa-azure-vm.zip

Tenga en cuenta lo siguiente acerca de esta arquitectura:

  • El software de Oracle Database Gateway for SQL Server se puede ejecutar en una máquina virtual de Azure. El número de CPU, la memoria y el tamaño del disco se deben asignar a la máquina virtual de Azure según los requisitos y las directrices de tamaño de Oracle Database Gateway for SQL Server. Consulte los requisitos del sistema para Oracle Database Gateway for SQL Server a continuación para obtener más información.
  • Oracle Exadata Database Service on Dedicated Infrastructure necesita resolver el nombre de host y la dirección IP de la máquina virtual de Azure que ejecuta Oracle Database Gateway. Edite el archivo /etc/hosts en el servidor de Oracle Database Gateway o configure una zona de DNS privada en la red virtual en la nube (VCN) de OCI donde esté configurado Oracle Exadata Database Service on Dedicated Infrastructure.
  • En las bases de datos de Oracle Exadata Database Service on Dedicated Infrastructure, el parámetro global_names está definido en TRUE por defecto. Por lo tanto, se debe utilizar el nombre de base de datos totalmente cualificado al crear el enlace de base de datos a Azure SQL Server.

Antes de empezar

Antes de empezar, compruebe las versiones de los principales componentes de software utilizados en esta configuración, descargue el paquete de software necesario y revise la documentación del producto para obtener más información.

Revisar requisitos de software

Estas instrucciones se prueban en las siguientes versiones de software y hardware.

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

Descargue el siguiente paquete de software:

Acerca de los roles y servicios necesarios

Esta solución requiere los siguientes servicios:

  • OracleDB para Azure con Oracle Exadata Database Service on Dedicated Infrastructure
  • Oracle Cloud Infrastructure
  • Máquina virtual de Azure

Estos son los roles necesarios para cada servicio.

Nombre de servicio: rol Necesario para...
Oracle Exadata Database Service on Dedicated Infrastructure: sys con Configure el enlace de la base de datos.
Oracle Cloud Infrastructure: VCN Admin Agregue reglas de seguridad, modifique el DNS para resolverlo en el punto final de Azure y Azure VM.
Máquina virtual de Azure: root Cree el usuario oracle para instalar y configurar el software de Oracle Database Gateway. Modifique el firewall local para permitir conexiones al puerto 1521.

Consulte Descubra cómo obtener los servicios de Oracle Cloud para las soluciones de Oracle para obtener los servicios en la nube que necesita.

Consideraciones para la ejecución de Oracle Database Gateway en una máquina virtual de Azure

La ejecución de Oracle Database Gateway for SQL Server en una máquina virtual de Azure es ideal para aquellos clientes que estén familiarizados con los servicios de Azure, pero que no estén muy familiarizados con los servicios de OCI.

Ventajas de la ejecución de Oracle Database Gateway en una máquina virtual de Azure

  • Oracle Database Gateway for SQL Server está desarrollado y soportado por Oracle.
  • No es necesario instalar ningún software de terceros adicional en Oracle Exadata Database Service on Dedicated Infrastructure, lo que facilita la actualización y el mantenimiento del entorno.
  • Oracle Database Gateway for SQL Server se ejecuta en una instancia informática independiente de Oracle Exadata Database Service on Dedicated Infrastructure, lo que facilita la actualización y el mantenimiento de ambos entornos. Además, la solución puede ser más asequible, ya que el software de Oracle Database Gateway se ejecuta en OCPU de Azure menos caras en lugar de ejecutarse en las OCPU de Oracle Exadata Database Service on Dedicated Infrastructure más especializadas y de mayor precio.
  • La comunicación entre el servidor de Oracle Database Gateway y Azure SQL Server está cifrada (aplicada por la configuración por defecto de Azure SQL Server).
  • La conversión y asignación de tipos de datos entre Oracle Database y Azure SQL Server Database la gestiona automáticamente el software de Oracle Database Gateway.
  • Azure gestiona automáticamente la resolución de nombre de host para Azure SQL Server en el nivel de máquina virtual de Azure.

Desventajas de la ejecución de Oracle Database Gateway en una máquina virtual de Azure

  • Puede que se necesite una licencia adicional para el software de Oracle Database Gateway.
  • La comunicación entre Oracle Exadata Database Service on Dedicated Infrastructure y el servidor de Oracle Database Gateway no está cifrada por defecto al configurar el servidor de Oracle Database Gateway. Se necesita una configuración adicional en Oracle Database Gateway sqlnet.ora para aplicar el cifrado de Oracle Exadata Database Service on Dedicated Infrastructure al servidor de Oracle Database Gateway.

Configuración de Oracle Database Gateway en ejecución en Azure Virtual Machine

  1. Conéctese a la consola de Azure para obtener la información de la base de datos de Azure SQL Server desde la que la base de datos de Oracle Exadata Database Service on Dedicated Infrastructure cargará y consultará los datos. Esta información es necesaria para indicar al servidor de Oracle Database Gateway cómo conectarse a la base de datos de Azure SQL Server.
    Obtenga los siguientes detalles:
    • Nombre de base de datos: nombre de la base de datos de Azure SQL Server.
    • Nombre de servidor totalmente cualificado: nombre de host completo para SQL Server en el que se está ejecutando la base de datos de Azure SQL Server, normalmente con el formato servername.database.windows.net.
    • Punto final privado de Azure SQL Server: nombre y dirección IP del punto final privado de Azure SQL Server en la vnet de Azure que se conecta a Azure SQL Server. Si aún no existe ningún punto final privado, cree uno para Azure SQL Server y anote el nombre y la dirección IP.
    • Nombre de usuario de Azure SQL Server: nombre de un usuario existente de Azure SQL Server que puede conectarse a la base de datos o esquema de Azure SQL Server, normalmente sqladmin.
    • Contraseña de usuario de Azure SQL Server: contraseña para que el usuario de Azure SQL Server se conecte a la base de datos y el esquema de Azure SQL Server.
  2. Cree una máquina virtual de Azure que ejecute Linux 7.9 en la vnet configurada para OracleDB para Azure. Esta máquina virtual ejecutará Oracle Database Gateway for SQL Server. Tome nota del hostname y la dirección IP (en Azure vnet) asignadas a esta máquina virtual, esta información es necesaria para indicar a la base de datos de Oracle Exadata Database Service on Dedicated Infrastructure cómo conectarse al servidor de Oracle Database Gateway. El nombre de host suele tener el formato servername.windows.net.
  3. En el menú principal de OCI, seleccione Gestión de redes/DNS para crear una zona de DNS privada. En la nueva zona de DNS privada, agregue un nombre de host de registro y una dirección IP de la máquina virtual de Azure creada en el paso anterior.
  4. En el menú principal de OCI, seleccione Gestión de redes/DNS para crear una vista privada de DNS. Agregue la zona de DNS privada creada en el paso anterior a esta vista privada de DNS recién creada y active los cambios.
  5. En el menú principal de OCI, seleccione Red/Red de cliente virtual (VCN). Seleccione la VCN creada al aprovisionar el servicio Oracle Database Gateway Oracle Exadata Database Service on Dedicated Infrastructure (cambie el compartimento si es necesario). Haga clic en el enlace de resolución de DNS y, a continuación, agregue la vista privada de DNS creada desde el paso anterior al solucionador de DNS. Esto permitirá la resolución de nombres y direcciones IP de Oracle Exadata Database Service on Dedicated Infrastructure a la máquina virtual de Azure que ejecuta Oracle Database Gateway.
  6. Conéctese a uno de los nodos de cluster de VM de Oracle Exadata Database Service on Dedicated Infrastructure para utilizar nslookup para verificar que el nombre de host de la resolución de direcciones IP funciona para la máquina virtual de Azure que ejecutará Oracle Database Gateway.
    Por ejemplo:
    [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 ~]$
    Las variables del ejemplo tienen los siguientes valores:
    • servername es el nombre del punto final privado de Azure SQL Server del paso 1.
    • IP_address_of_Azure_VM_from_step_2 es la dirección IP de la máquina virtual de Azure del paso 2.
  7. Instale el software de Oracle Database Gateway que descargó anteriormente en la nueva máquina virtual de Azure.
  8. Configure Oracle Database Gateway para Azure SQL Server para conectarse a la base de datos de Azure SQL Server mediante el punto final privado de Azure SQL Server.
    Tenga en cuenta que la máquina virtual de Azure que ejecuta Oracle Database Gateway y el punto final privado de Azure SQL Server están en la misma red virtual de Azure.
  9. En todos los nodos del cluster de VM de Oracle Exadata Database Service on Dedicated Infrastructure, configure la base de datos tnsnames.ora de Oracle Exadata Database Service on Dedicated Infrastructure para resolverla en 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)
    )
    Las variables del ejemplo tienen los siguientes valores:
    • exadb_name es el nombre de la base de datos Oracle Exadata Database Service on Dedicated Infrastructure.
    • Database_Name_From_Step_1 es el nombre de la base de datos del paso 1.
    • Azure_VM_Hostname_From_Step_2 es el nombre de host de la máquina virtual de Azure desde el paso 2.
  10. Utilice tnsping para probar la conectividad entre la base de datos de Oracle Exadata Database Service on Dedicated Infrastructure y Oracle Database Gateway for SQL Server que se ejecuta en la máquina virtual de Azure (esta conexión utiliza el enlace de red de latencia rápida y baja establecido por OracleDB for Azure entre Azure y OCI).
    [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 ~]$
    Las variables del ejemplo tienen los siguientes valores:
    • exadb_name es el nombre de la base de datos Oracle Exadata Database Service on Dedicated Infrastructure.
    • Database_Name_From_Step_1 es el nombre de la base de datos del paso 1.
    • Azure_VM_Hostname_From_Step_2 es el nombre de host de la máquina virtual de Azure desde el paso 2.
  11. En Oracle Exadata Database Service on Dedicated Infrastructure base de datos conectable (PDB) (no en la CDB) cree un enlace de base de datos a la base de datos Azure SQL Server. El parámetro global_names está definido en TRUE en las bases de datos de Oracle Exadata Database Service on Dedicated Infrastructure por defecto, por lo que se debe utilizar el nombre completo de la base de datos para crear el enlace de base de datos. Una vez creado el enlace de base de datos, puede consultar y cargar datos de la base de datos de Azure SQL Server en Oracle Exadata Database Service on Dedicated Infrastructure base de datos conectable (PDB) mediante este enlace.
    [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.
    Tenga en cuenta que el nombre de usuario y la contraseña se incluyen entre comillas dobles (" "), mientras que el nombre de la base de datos de Azure SQL Server se incluye entre comillas simples (' ').
    Las variables del ejemplo tienen los siguientes valores:
    • exadb_name es el nombre de la base de datos Oracle Exadata Database Service on Dedicated Infrastructure.
    • PDBName es el nombre de la base de datos de conexión.
    • Fully_Qualified_Server_Name_From_Step_1 es el nombre de host completo para el servidor SQL donde se ejecuta la base de datos de Azure SQL Server, desde el paso 1.
    • Azure_SQL_Server_Username es el nombre del nombre de usuario existente de Azure SQL Server, en el paso 1.
    • Azure_SQL_User_Password es la contraseña para que el usuario de Azure SQL Server se conecte a la base de datos, desde el paso 1.
    • Database_Name_From_Step_1 es el nombre de la base de datos de Azure SQL Server, del paso 1.
  12. Pruebe el enlace de base de datos recién creado ejecutando una consulta, por ejemplo:
    SQL> select count(*) from 
    some_table@DatabaseLink_Name;
    Las variables del ejemplo tienen los siguientes valores:
    • some_table es el nombre de una tabla de la base de datos que se va a consultar.
    • DatabaseLink_Name es el nombre del enlace de base de datos del paso 11.

Instalar Oracle Database Gateway Server

En estos pasos se describe cómo instalar el software del servidor de Oracle Database Gateway en una máquina virtual de Azure que ejecuta Oracle Linux 7.9.

  1. Utilice yum para instalar paquetes de requisitos de Oracle.
    [root@dbgw ~]# yum install oracle-database-preinstall-19c
  2. Cree el grupo user, oracle y dba.
    [root@dbgw ~]# useradd -u 1001 -g dba -d /home/oracle -m -s /bin/bash oracle
    [root@dbgw ~]# groupadd -g 1001 dba
  3. Cree el directorio de instalación para Oracle Database Gateway Server 19.3.
    [root@dbgw ~]# mkdir /u01
    [root@dbgw ~]# chown oracle:dba /u01
  4. Modifique el firewall local para permitir conexiones al puerto 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. Copie los archivos zip de Oracle Database Gateway 19.3 que ha descargado anteriormente en el directorio /home/oracle de la máquina virtual de Linux y, a continuación, descomprima el archivo zip de Oracle Database Gateway 19.3.
    [oracle@dbgw ~]$ unzip LINUX.X64_193000_gateways.zip
  6. Cree un archivo de respuesta de instalación a partir de la plantilla incluida.
    [oracle@dbgw response]$ cd /home/oracle/gateways/response/
    [oracle@dbgw response]$ cp tg.rsp/home/oracle/tg-jc.rsp
  7. Modifique el archivo de respuesta con las siguientes opciones.
    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}
    Las variables del ejemplo tienen los siguientes valores:
    • Fully_Qualified_Server_Name_From_Step_1 es el nombre de host completo para el servidor SQL donde se ejecuta la base de datos de Azure SQL Server, en el paso 1.
    • Database_Name_From_Step_1 es el nombre de la base de datos de Azure SQL Server, en el paso 1.
  8. Ejecute una instalación silenciosa para instalar Oracle Database Gateway 19.3.
    [oracle@dbgw gateways]$./runInstaller -silent -noconfig -
    responseFile /home/oracle/tg-jc.rsp
  9. Configure el directorio raíz de Oracle y la ruta para el usuario 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 ~]$

Configurar Oracle Database Gateway for SQL Server

Después de instalar Oracle Database Gateway en la máquina virtual de Azure que ejecuta Linux 7.9, se debe configurar para conectarse a la base de datos de Azure SQL Server mediante el punto final privado de Azure SQL Server.

  1. Agregue la información de la base de datos de Azure SQL Server al archivo de inicialización de Oracle Database Gateway for SQL Server que se ejecuta en la instancia de OCI Compute. Esta información indica a Oracle Database Gateway cómo conectarse a la base de datos de Azure SQL Server.
    Por ejemplo:
    [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
    Las variables del ejemplo tienen los siguientes valores:
    • Database_Name_From_Step_1 es el nombre de host de la base de datos de Azure SQL Server, en el paso 1.
    • Fully_Qualified_Server_Name es el nombre de host completo para el servidor SQL donde se ejecuta la base de datos de Azure SQL Server, en el paso 1.
    • Database_Domain_Name es el nombre del dominio que reside la base de datos del paso 1, normalmente database.windows.net.
    Tenga en cuenta que los parámetros HS_FDS_ENCRYPT_SESSION y HS_FDS_VALIDATE_SERVER_CERT son necesarios para que la conexión entre el servidor de Oracle Database Gateway y Azure SQL Server se cifre.
  2. En el servidor de Oracle Database Gateway, modifique tnsnames.ora para resolver los servicios de gateway proporcionados por este gateway, de la siguiente forma:
    [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)
    )
    Las variables del ejemplo tienen los siguientes valores:
    • Azure_SQL_Server_Database_Name es el nombre de la base de datos de Azure SQL Server en el paso 1.
    • Azure_VM_Hostname_From_Step_2 es el nombre de host de la máquina virtual de Azure en el paso 2.
  3. En el servidor de Oracle Database Gateway, modifique listener.ora para incluir la información de Oracle Database Gateway.
    Por ejemplo:
    [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)
    )
    )
    Las variables del ejemplo tienen los siguientes valores:
    • Azure_VM_Hostname_From_Step_2 es el nombre de host de la máquina virtual de Azure en el paso 2.
    • Database_Name_From_Step_1 es el nombre de la base de datos de Azure SQL Server, en el paso 1.
  4. Inicie el listener en el servidor de Oracle Database Gateway que se ejecuta en la máquina virtual de Azure y pruebe la conectividad al gateway.
    Por ejemplo:
    [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]$
    Las variables del ejemplo tienen los siguientes valores:
    • Database_Name_From_Step_1 es el nombre de la base de datos de Azure SQL Server, en el paso 1.
    • Azure_VM_Hostname_From_Step_2 es el nombre de host de la máquina virtual de Azure en el paso 2.