Carga de datos mediante Oracle Database Gateway en ejecución en OCI Compute

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 for Azure para cargar y consultar datos de Azure SQL Server mediante un enlace de base de datos mediante el software de Oracle Database Gateway for SQL Server que se ejecuta en una instancia de OCI Compute.

Arquitectura

Esta arquitectura utiliza Oracle Database Gateway for SQL Server que se ejecuta en una instancia de OCI Compute 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-gateway.zip

Tenga en cuenta lo siguiente acerca de esta arquitectura:

  • Se debe crear una nueva regla de seguridad en la subred del cliente Oracle Exadata Database Service on Dedicated Infrastructure para permitir el tráfico al puerto 1521.
  • El software de Oracle Database Gateway se puede ejecutar en la máquina virtual de recursos informáticos de OCI o en hardware dedicado. El número de OCPU, la memoria y el tamaño del disco se deben asignar a la instancia informática de OCI según los requisitos y las directrices de tamaño del servidor 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.
  • Se necesita la resolución de nombre de host a dirección IP para el punto final de Azure SQL Server en OCI. 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:

  • Oracle Exadata Database Service on Dedicated Infrastructure con OracleDB para Azure
  • Oracle Cloud Infrastructure
  • Oracle Cloud Infrastructure Compute

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 y modifique el DNS.
Oracle Cloud Infrastructure Compute: admin Cree una instancia informática para instalar Oracle Database Gateway.
Oracle Cloud Infrastructure Compute: opc/root Cree un usuario 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 instancia informática de OCI

Revise estas consideraciones antes de implantar esta solución. La ejecución de Oracle Database Gateway for SQL Server en una instancia de OCI Compute es ideal para clientes que están familiarizados con los servicios de OCI.

Ventajas de la ejecución de Oracle Database Gateway en OCI Compute

  • 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 recursos informáticos de OCI menos costosas en lugar de ejecutarse en las OCPU de Oracle Exadata Database Service on Dedicated Infrastructure más especializadas y con un precio más alto.
  • La comunicación entre el servidor de Oracle Database Gateway y Microsoft Azure SQL Server está cifrada (aplicada por Microsoft Azure SQL Server por defecto).
  • La conversión y la asignación de tipos de datos entre bases de datos Oracle y bases de datos Microsoft Azure SQL Server se gestionan automáticamente mediante el software Oracle Database Gateway.

Desventajas de la ejecución de Oracle Database Gateway en OCI Compute

  • 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 el servidor de 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 OCI Compute

  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 el servidor SQL 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 de Azure SQL Server existente que puede conectarse a la base de datos y el 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. Conéctese a la consola de OCI y cree una instancia de OCI Compute en la subred del cliente OracleDB for Azure Oracle Exadata Database Service on Dedicated Infrastructure que ejecuta Oracle Linux 7.9. Esta instancia informática ejecutará Oracle Database Gateway for SQL Server.
    Observe el hostname y la dirección IP asignadas a esta instancia informática. Esta información es necesaria para indicar a Oracle Exadata Database Service on Dedicated Infrastructure cómo conectarse al servidor de Oracle Database Gateway.
  3. En el menú OCI, seleccione Gestión de redes/DNS y cree una zona de DNS privada. En la nueva zona de DNS privada, agregue un registro para el nombre de servidor totalmente cualificado del paso 1 para resolver la dirección IP del punto final privado de Azure SQL Server del paso 1.
  4. En el menú OCI, cree una vista privada de DNS. Agregue la zona de DNS privada creada en el paso 3 a esta vista privada de DNS y active los cambios.
  5. En el menú OCI, seleccione Redes/Red de cliente virtual (VCN). Seleccione la VCN creada al aprovisionar OracleDB para Azure para Oracle Exadata Database Service on Dedicated Infrastructure (cambie el compartimento si es necesario). Seleccione el enlace de resolución DNS y agregue la vista privada DNS creada previamente al solucionador DNS.
    Esto permite la resolución de nombres y direcciones IP de los servicios de OCI (compute y Oracle Exadata Database Service on Dedicated Infrastructure) al punto final privado de Azure SQL Server.
  6. Conéctese a uno de los nodos de cluster de VM de Oracle Exadata Database Service on Dedicated Infrastructure y utilice el comando nslookup para verificar que el nombre de host para la resolución de direcciones IP funciona para el nombre de host y la dirección IP de punto final privado de Azure SQL Server.
    Por ejemplo:
    [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 ~]$
    Las variables del ejemplo tienen los siguientes valores:
    • servername es el nombre del servidor completo del Azure SQL Server del paso 1.
    • IP_address_of_Azure_SQL_Server_private_endpoint es la dirección IP del punto final privado de Azure SQL Server del paso 1.
  7. Instale el software de Oracle Database Gateway que descargó anteriormente en la nueva instancia informática de OCI.
  8. Configure Oracle Database Gateway para Azure SQL Server que se ejecute en la instancia de OCI Compute para conectarse a la base de datos de Azure SQL Server mediante el punto final privado de Azure SQL Server mediante el enlace de red de latencia rápida y baja configurado por OracleDB para Azure entre Azure y OCI.
  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.
    Por ejemplo:
    [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)
    )
    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.
    • OCI_Compute_Instance_Hostname_From_Step_2 es el nombre de host de la instancia de OCI Compute del paso 2.
  10. Utilice el comando tnsping para probar la conectividad entre Oracle Exadata Database Service on Dedicated Infrastructure y Oracle Database Gateway que se ejecuta en OCI Compute (esta conexión está totalmente dentro de la VCN de OCI).
    Por ejemplo:
    [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 ~]$
    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 del paso 1.
    • exadb_name es el nombre de la base de datos Oracle Exadata Database Service on Dedicated Infrastructure.
    • OCI_Compute_Instance_Hostname_From_Step_2 es el nombre de host de la instancia de OCI Compute del paso 2.
  11. En la 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 de 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 la base de datos conectable de Oracle Exadata Database Service on Dedicated Infrastructure 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_From_Previous_Step;
    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_From_Previous_Step es el nombre del enlace de base de datos del paso 11.

Instalar el servidor de Oracle Database Gateway

En estos pasos se describe cómo instalar el software del servidor de Oracle Database Gateway en una instancia de OCI Compute que ejecuta Oracle Linux 7.9.

  1. Utilice yum para instalar los 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 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 VM 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 de acceso 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 instancia de OCI Compute 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_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
    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.
    • 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_Hostname_From_Step_1 es el nombre de host de la base de datos, en el paso 1.
    • Database_Domain_Name es el nombre del dominio que reside la base de datos, 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
    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)
    )
    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.
    • OCI_Compute_Instance_Hostname_From_Step_2 es el nombre de host de la instancia de OCI Compute del paso 2.
  3. En el servidor de Oracle Database Gateway, modifique listener.ora para incluir la información de 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)
    )
    )
    Las variables del ejemplo tienen los siguientes valores:
    • OCI_Compute_Instance_Hostname_From_Step_2 es el nombre de host de la instancia de OCI Compute del 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 instancia de OCI Compute 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= 
    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]$
    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.
    • OCI_Compute_Instance_Hostname_From_Step_2 es el nombre de host de la instancia de OCI Compute del paso 2.