Carregar Dados Usando o Oracle Database Gateway em Execução no OCI Compute

OracleDB para Azure permite que aplicativos Azure carreguem e consultem dados de bancos de dados do OCI. Essa arquitetura descreve como um Oracle Exadata Database Service on Dedicated Infrastructure pode aproveitar a infraestrutura fornecida pelo OracleDB for Azure para carregar e consultar dados do Azure SQL Server usando um link de banco de dados por meio do software Oracle Database Gateway for SQL Server executado em uma instância do OCI Compute.

Arquitetura

Essa arquitetura usa o Oracle Database Gateway for SQL Server em execução em uma instância do OCI Compute para carregar dados do Azure SQL Server para o Oracle Exadata Database Service on Dedicated Infrastructure. O Oracle Database Gateway for SQL Server se conecta ao Azure SQL Server usando o link de rede de baixa latência rápida usando um ponto final privado do Azure.

O diagrama a seguir ilustra essa arquitetura.



exadata-db-azure-odsa-gateway.zip

Observe o seguinte em relação a esta arquitetura:

  • Uma nova regra de segurança deve ser criada na sub-rede do cliente Oracle Exadata Database Service on Dedicated Infrastructure para permitir o tráfego na porta 1521.
  • O software Oracle Database Gateway pode ser executado no OCI Compute Virtual Machine ou Bare Metal. O número de OCPUs, memória e tamanho do disco devem ser designados à instância do OCI Compute de acordo com os requisitos do Oracle Database Gateway for SQL Server Server e as diretrizes de dimensionamento. Consulte os Requisitos do Sistema para o Oracle Database Gateway for SQL Server abaixo para obter detalhes.
  • A resolução do nome do host para o endereço IP do ponto final do Azure SQL Server é necessária no OCI. Edite o arquivo /etc/hosts no servidor do Oracle Database Gateway ou configure uma Zona de DNS Privado na VCN (Rede Virtual na Nuvem) do OCI em que o Oracle Exadata Database Service on Dedicated Infrastructure está configurado.
  • Nos bancos de dados do Oracle Exadata Database Service on Dedicated Infrastructure, o parâmetro global_names é definido como TRUE por padrão. Portanto, o nome do banco de dados totalmente qualificado deve ser usado ao criar o link do banco de dados para o Azure SQL Server.

Antes de Começar

Antes de começar, verifique as versões dos principais componentes de software usados nesta configuração, faça download do pacote de software necessário e revise a documentação do produto para referência posterior.

Revisar Requisitos de Software

Essas instruções são testadas nas seguintes versões de software e hardware.

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

Faça download do seguinte pacote de software:

Sobre Serviços e Atribuições Obrigatórios

Esta solução requer os seguintes serviços:

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

Estas são as atribuições necessárias para cada serviço.

Nome do Serviço: Atribuição Obrigatório para...
Oracle Exadata Database Service on Dedicated Infrastructure Dedicado: sys con Configure o link de banco de dados.
Oracle Cloud Infrastructure: VCN Admin Adicione regras de segurança e modifique o DNS.
Oracle Cloud Infrastructure Compute: admin Crie a instância do serviço Compute para instalar o Oracle Database Gateway.
Oracle Cloud Infrastructure Compute: opc/root Crie o usuário para instalar e configurar o software Oracle Database Gateway. Modifique o firewall local para permitir conexões com a porta 1521.

Consulte Saiba como obter serviços do Oracle Cloud para Soluções Oracle para obter os serviços de nuvem necessários.

Considerações sobre a Execução do Oracle Database Gateway em uma Instância do OCI Compute

Revise essas considerações antes de implementar esta solução. A execução do Oracle Database Gateway for SQL Server em uma instância do OCI Compute é ideal para clientes que estejam familiarizados com os serviços do OCI.

Vantagens do Oracle Database Gateway em Execução no OCI Compute

  • O Oracle Database Gateway for SQL Server foi desenvolvido e suportado pela Oracle.
  • Nenhum software de terceiros adicional deve ser instalado no Oracle Exadata Database Service on Dedicated Infrastructure, facilitando a atualização e a manutenção do ambiente.
  • O Oracle Database Gateway for SQL Server é executado em uma instância de computação separada do Oracle Exadata Database Service on Dedicated Infrastructure, o que facilita a atualização e a manutenção dos dois ambientes. Além disso, a solução pode ser mais acessível, pois o software Oracle Database Gateway é executado em OCPUs do OCI Compute menos caras, em vez de ser executado em OCPUs do Oracle Exadata Database Service on Dedicated Infrastructure mais especializadas e de preço mais alto.
  • A comunicação entre o Oracle Database Gateway Server e o Microsoft Azure SQL Server é criptografada (imposta pelo Microsoft Azure SQL Server por padrão).
  • A conversão e o mapeamento de tipos de dados entre bancos de dados Oracle e bancos de dados Microsoft Azure SQL Server são gerenciados automaticamente pelo software Oracle Database Gateway.

Desvantagens do Oracle Database Gateway em Execução no OCI Compute

  • Pode ser necessária uma licença adicional para o software Oracle Database Gateway.
  • Communication between Oracle Exadata Database Service on Dedicated Infrastructure and Oracle Database Gateway Server is not encrypted by default when configuring Oracle Database Gateway Server. É necessária uma configuração adicional no Servidor sqlnet.ora do Oracle Database Gateway para impor a criptografia do Oracle Exadata Database Service on Dedicated Infrastructure para o Servidor do Oracle Database Gateway.

Configurar o Oracle Database Gateway em Execução no OCI Compute

  1. Faça log-in na console do Azure para obter as informações do banco de dados do Azure SQL Server do qual o banco de dados do Oracle Exadata Database Service on Dedicated Infrastructure carregará e consultará dados. Essas informações são necessárias para informar ao servidor do Oracle Database Gateway como estabelecer conexão com o banco de dados do Azure SQL Server.
    Obtenha os seguintes detalhes:
    • Nome do Banco de Dados: Nome do banco de dados Azure SQL Server.
    • Nome do Servidor Totalmente Qualificado: Nome do host totalmente qualificado para o servidor SQL no qual o banco de dados do Azure SQL Server está em execução, geralmente no formato servername.database.windows.net.
    • Ponto Final Privado do Azure SQL Server: O nome e o endereço IP do ponto final privado do Azure SQL Server na vnet do Azure que se conecta ao Azure SQL Server. Se ainda não existir um ponto final privado, crie um para o Azure SQL Server e anote o nome e o endereço IP.
    • Nome do Usuário do Azure SQL Server: Nome de um usuário existente do Azure SQL Server com permissão para estabelecer conexão com o banco de dados e o esquema do Azure SQL Server, geralmente sqladmin.
    • Senha do Usuário do Azure SQL Server: Senha do usuário do Azure SQL Server para estabelecer conexão com o banco de dados e o esquema do Azure SQL Server.
  2. Faça log-in na console do OCI e crie uma instância do OCI Compute na sub-rede do cliente OracleDB for Azure Oracle Exadata Database Service on Dedicated Infrastructure que executa o Oracle Linux 7.9. Esta instância de computação executará o Oracle Database Gateway for SQL Server.
    Observe o hostname e o endereço IP designados a essa instância de computação. This information is required to tell Oracle Exadata Database Service on Dedicated Infrastructure how to connect to the Oracle Database Gateway server.
  3. No menu do OCI, selecione Gerenciamento de Rede/DNS e crie uma Zona de DNS Privada. Na nova Zona de DNS Privado, adicione um registro para o Nome de Servidor Totalmente Qualificado na etapa 1 para resolver o endereço IP do ponto final privado do Azure SQL Server na etapa 1.
  4. No menu do OCI, crie uma View Privada de DNS. Adicione a Zona de DNS Privada criada na etapa 3 a esta View Privada de DNS e ative as alterações.
  5. No menu do OCI, selecione Rede/Rede de Cliente Virtual (VCN). Selecione a VCN criada quando o OracleDB for Azure para o Oracle Exadata Database Service on Dedicated Infrastructure foi provisionado (altere o compartimento, se necessário). Selecione o link do resolvedor de DNS e adicione a View Privada de DNS criada anteriormente para o resolvedor de DNS.
    Isso permite a resolução de nomes e endereços IP dos serviços do OCI (computação e Oracle Exadata Database Service on Dedicated Infrastructure) para o ponto final privado do Azure SQL Server.
  6. Faça log-in em um dos nós do Cluster de VMs do Oracle Exadata Database Service on Dedicated Infrastructure e use o comando nslookup para verificar se a resolução do nome do host para o endereço IP está funcionando para o nome do host e o endereço IP do ponto final privado do Azure SQL Server.
    Por exemplo:
    [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 ~]$
    As variáveis do exemplo têm os seguintes valores:
    • servername é o nome do servidor totalmente qualificado do Azure SQL Server na etapa 1.
    • IP_address_of_Azure_SQL_Server_private_endpoint é o endereço IP do ponto final privado do Azure SQL Server na etapa 1.
  7. Instale o software Oracle Database Gateway que você baixou anteriormente na nova instância de computação do OCI.
  8. Configure o Oracle Database Gateway para o Azure SQL Server em execução na instância do OCI Compute para estabelecer conexão com o banco de dados do Azure SQL Server por meio do ponto final privado do Azure SQL Server usando o link de rede de latência rápida e baixa configurado por OracleDB para Azure entre o Azure e o OCI.
  9. Em todos os nós do Cluster de VMs do Oracle Exadata Database Service on Dedicated Infrastructure, configure o banco de dados tnsnames.ora do Oracle Exadata Database Service on Dedicated Infrastructure para resolver o Oracle Database Gateway for SQL Server.
    Por exemplo:
    [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)
    )
    As variáveis do exemplo têm os seguintes valores:
    • exadb_name é o nome do banco de dados Oracle Exadata Database Service on Dedicated Infrastructure.
    • Database_Name_From_Step_1 é o nome do banco de dados na etapa 1.
    • OCI_Compute_Instance_Hostname_From_Step_2 é o nome do host da instância do OCI Compute na etapa 2.
  10. Use o comando tnsping para testar a conectividade entre o Oracle Exadata Database Service on Dedicated Infrastructure e o Oracle Database Gateway em execução no OCI Compute (essa conexão está totalmente dentro da VCN do OCI).
    Por exemplo:
    [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 ~]$
    As variáveis do exemplo têm os seguintes valores:
    • Database_Name_From_Step_1 é o nome do banco de dados do Azure SQL Server na etapa 1.
    • exadb_name é o nome do banco de dados Oracle Exadata Database Service on Dedicated Infrastructure.
    • OCI_Compute_Instance_Hostname_From_Step_2 é o nome do host da instância do OCI Compute na etapa 2.
  11. No Oracle Exadata Database Service on Dedicated Infrastructure banco de dados plugável (PDB) (não no CDB), crie um link de banco de dados para o banco de dados do Azure SQL Server. O parâmetro global_names é definido como TRUE nos bancos de dados Oracle Exadata Database Service on Dedicated Infrastructure por padrão; portanto, o nome do banco de dados totalmente qualificado deve ser usado para criar o link do banco de dados. Depois que o link de banco de dados for criado, você poderá consultar e carregar dados do banco de dados Azure SQL Server para o banco de dados plugável Oracle Exadata Database Service on Dedicated Infrastructure usando esse link.
    [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.
    Observe que o nome do usuário e a senha estão entre aspas duplas (" "), enquanto o nome do banco de dados do Azure SQL Server está entre aspas simples (' ').
    As variáveis do exemplo têm os seguintes valores:
    • exadb_name é o nome do banco de dados Oracle Exadata Database Service on Dedicated Infrastructure.
    • PDBName é o nome do banco de dados plugável.
    • Fully_Qualified_Server_Name_From_Step_1 é o nome do host totalmente qualificado para o servidor SQL no qual o banco de dados do Azure SQL Server está em execução, na etapa 1.
    • Azure_SQL_Server_Username é o nome do nome de usuário existente do Azure SQL Server, na etapa 1.
    • Azure_SQL_User_Password é a senha do usuário do Azure SQL Server para estabelecer conexão com o banco de dados, na etapa 1.
    • Database_Name_From_Step_1 é o nome do banco de dados do Azure SQL Server, na etapa 1.
  12. Teste o link de banco de dados recém-criado executando uma consulta. Por exemplo:
    SQL> select count(*) from 
    some_table@DatabaseLink_Name_From_Previous_Step;
    As variáveis do exemplo têm os seguintes valores:
    • some_table é o nome de uma tabela no seu banco de dados a ser consultada.
    • DatabaseLink_Name_From_Previous_Step é o nome do link de banco de dados na etapa 11.

Instalar Servidor do Oracle Database Gateway

Estas etapas descrevem como instalar o software do Servidor do Oracle Database Gateway em uma instância do OCI Compute que executa o Oracle Linux 7.9.

  1. Use yum para instalar pacotes de pré-requisitos da Oracle.
    [root@dbgw ~]# yum install oracle-database-preinstall-19c
  2. Crie o grupo user, oracle e dba.
    [root@dbgw ~]# useradd -u 1001 -g dba -d /home/oracle -m -s /bin/bash oracle
    [root@dbgw ~]# groupadd -g 1001 dba
  3. Crie um diretório de instalação para o Oracle Database Gateway 19.3.
    [root@dbgw ~]# mkdir /u01
    [root@dbgw ~]# chown oracle:dba /u01
  4. Modifique o firewall local para permitir conexões com a porta 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 os arquivos zip do Oracle Database Gateway 19.3 que você fez download anteriormente para o diretório /home/oracle na VM linux e descompacte o arquivo zip do Oracle Database Gateway 19.3.
    [oracle@dbgw ~]$ unzip LINUX.X64_193000_gateways.zip
  6. Crie um arquivo de resposta de instalação a partir do modelo incluído.
    [oracle@dbgw response]$ cd /home/oracle/gateways/response/
    [oracle@dbgw response]$ cp tg.rsp/home/oracle/tg-jc.rsp
  7. Modifique o arquivo de resposta com as seguintes opções.
    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}
    As variáveis do exemplo têm os seguintes valores:
    • Fully_Qualified_Server_Name_From_Step_1 é o nome do host totalmente qualificado para o servidor SQL no qual o banco de dados do Azure SQL Server está em execução, na etapa 1.
    • Database_Name_From_Step_1 é o nome do banco de dados do Azure SQL Server, na etapa 1.
  8. Execute a instalação silenciosa para instalar o Oracle Database Gateway 19.3.
    [oracle@dbgw gateways]$./runInstaller -silent -noconfig -
    responseFile /home/oracle/tg-jc.rsp
  9. Configure o Oracle home e o caminho para o usuário 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 o Oracle Database Gateway for SQL Server

Depois que o Oracle Database Gateway for instalado na instância do OCI Compute que executa o Linux 7.9, ele deverá ser configurado para estabelecer conexão com o banco de dados do Azure SQL Server usando o ponto final privado do Azure SQL Server.

  1. Adicione as informações do banco de dados do Azure SQL Server ao arquivo de inicialização do Oracle Database Gateway for SQL Server executado na instância do OCI Compute. Essas informações informam ao Oracle Database Gateway como estabelecer conexão com o banco de dados do Azure SQL Server.
    Por exemplo:
    [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
    As variáveis do exemplo têm os seguintes valores:
    • Database_Name_From_Step_1 é o nome do banco de dados do Azure SQL Server, na etapa 1.
    • Fully_Qualified_Server_Name_From_Step_1 é o nome do host totalmente qualificado para o servidor SQL no qual o banco de dados do Azure SQL Server está em execução, na etapa 1.
    • Database_Hostname_From_Step_1 é o nome do host do banco de dados, na etapa 1.
    • Database_Domain_Name é o nome do domínio em que o banco de dados reside, geralmente database.windows.net.
    Observe que os parâmetros HS_FDS_ENCRYPT_SESSION e HS_FDS_VALIDATE_SERVER_CERT são necessários para que a conexão entre o Servidor do Oracle Database Gateway e o Azure SQL Server seja criptografada.
  2. No servidor do Oracle Database Gateway, modifique tnsnames.ora para resolver os Serviços de Gateway fornecidos por esse gateway, da seguinte 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)
    )
    As variáveis do exemplo têm os seguintes valores:
    • Database_Name_From_Step_1 é o nome do banco de dados do Azure SQL Server, na etapa 1.
    • OCI_Compute_Instance_Hostname_From_Step_2 é o nome do host da instância do OCI Compute na etapa 2.
  3. No Servidor do Oracle Database Gateway, modifique listener.ora para incluir as informações do 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)
    )
    )
    As variáveis do exemplo têm os seguintes valores:
    • OCI_Compute_Instance_Hostname_From_Step_2 é o nome do host da instância do OCI Compute na etapa 2.
    • Database_Name_From_Step_1 é o nome do banco de dados do Azure SQL Server na etapa 1.
  4. Inicie o listener no servidor do Oracle Database Gateway em execução na instância do OCI Compute e teste a conectividade com o gateway.
    Por exemplo:
    [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]$
    As variáveis do exemplo têm os seguintes valores:
    • Database_Name_From_Step_1 é o nome do banco de dados do Azure SQL Server na etapa 1.
    • OCI_Compute_Instance_Hostname_From_Step_2 é o nome do host da instância do OCI Compute na etapa 2.