Carregar Dados Usando o Servidor do Oracle Database Gateway em Execução na VM do Azure

OracleDB para Azure permite que aplicativos Azure carreguem e consultem dados de bancos de dados do OCI. This architecture describes how an Oracle Exadata Database Service on Dedicated Infrastructure can leverage the infrastructure provided by OracleDB for Azure to load data from an Azure SQL Server using a database link via Oracle Database Gateway for SQL Server software running in an Azure virtual machine.

Arquitetura

Essa arquitetura usa o Oracle Database Gateway for SQL Server executado em uma máquina virtual do Azure 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 latência rápida e baixa usando um ponto final privado do Azure.

O diagrama a seguir ilustra essa arquitetura.



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

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

  • O software Oracle Database Gateway for SQL Server pode ser executado em uma máquina virtual do Azure. O número de CPUs, memória e tamanho do disco devem ser atribuídos à máquina virtual do Azure de acordo com os requisitos e diretrizes de dimensionamento do Oracle Database Gateway for SQL Server. Consulte os Requisitos do Sistema para o Oracle Database Gateway for SQL Server abaixo para obter mais informações.
  • O Oracle Exadata Database Service on Dedicated Infrastructure precisa resolver o nome do host e o endereço IP da máquina virtual do Azure que executa o Oracle Database Gateway. 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:

  • OracleDB for Azure with Oracle Exadata Database Service on Dedicated Infrastructure
  • Oracle Cloud Infrastructure
  • Máquina Virtual do Azure

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, modifique o DNS para resolver ao ponto final do Azure e à VM do Azure.
Máquina Virtual do Azure: root Crie o usuário oracle 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 o Oracle Database Gateway em Execução em uma Máquina Virtual do Azure

Executar o Oracle Database Gateway for SQL Server em uma máquina virtual do Azure é ideal para os clientes que estão familiarizados com os serviços do Azure, mas não com serviços do OCI muito familiares.

Vantagens do Oracle Database Gateway em Execução em uma VM do Azure

  • 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 de ambos os ambientes. Além disso, a solução pode ser mais acessível, pois o software Oracle Database Gateway é executado em OCPUs do Azure mais baratas, em vez de ser executado nas OCPUs mais especializadas e de preço mais alto do Oracle Exadata Database Service on Dedicated Infrastructure.
  • A comunicação entre o Servidor do Oracle Database Gateway e o Servidor SQL do Azure é criptografada (imposta pela configuração padrão do Servidor SQL do Azure).
  • A conversão e o mapeamento de tipos de dados entre o Oracle Database e o Azure SQL Server Database são gerenciados automaticamente pelo software Oracle Database Gateway.
  • A resolução de nome de host do Azure SQL Server é gerenciada automaticamente pelo Azure no nível da máquina virtual do Azure.

Desvantagens do Oracle Database Gateway em Execução em uma Máquina Virtual do Azure

  • 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 the Oracle Database Gateway server. É necessária uma configuração adicional no Oracle Database Gateway sqlnet.ora 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 na Máquina Virtual do Azure

  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 SQL Server onde 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 permitido para estabelecer conexão com o banco de dados ou 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. Crie uma máquina virtual do Azure que execute o Linux 7.9 na vnet configurada para o OracleDB para Azure. Esta máquina virtual executará o Oracle Database Gateway for SQL Server. Anote o hostname e o endereço IP (na vnet do Azure) atribuídos a essa máquina virtual, essas informações são necessárias para informar ao banco de dados Oracle Exadata Database Service on Dedicated Infrastructure como estabelecer conexão com o Servidor Oracle Database Gateway. O nome do host geralmente está no formato servername.windows.net.
  3. No menu principal do OCI, selecione Gerenciamento de Rede/DNS para criar uma Zona de DNS Privada. Na nova Zona de DNS Privado, adicione um nome de host e um endereço IP de registro da VM do Azure criada na etapa anterior.
  4. No menu principal do OCI, selecione Gerenciamento de Rede/DNS para criar uma View Privada de DNS. Adicione a Zona de DNS Privada criada na etapa anterior à View Privada de DNS recém-criada e ative as alterações.
  5. No menu principal do OCI, selecione Rede/VCN (Rede Virtual do Cliente). Selecione a VCN criada quando o serviço Oracle Database Gateway Oracle Exadata Database Service on Dedicated Infrastructure foi provisionado (altere o compartimento, se necessário). Clique no link do resolvedor de DNS e adicione a View Privada de DNS criada da etapa anterior ao resolvedor de DNS. Isso permitirá a resolução de nome e endereço IP do Oracle Exadata Database Service on Dedicated Infrastructure para a VM do Azure que executa o Oracle Database Gateway.
  6. Faça log-in em um dos nós do Cluster de VMs do Oracle Exadata Database Service on Dedicated Infrastructure para usar nslookup para verificar se a resolução do nome do host para o endereço IP está funcionando para a VM do Azure que executará o Oracle Database Gateway.
    Por exemplo:
    [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 ~]$
    As variáveis do exemplo têm os seguintes valores:
    • servername é o nome do ponto final privado do Azure SQL Server na etapa 1.
    • IP_address_of_Azure_VM_from_step_2 é o endereço IP da VM do Azure na etapa 2.
  7. Instale o software Oracle Database Gateway que você baixou anteriormente na nova máquina virtual do Azure.
  8. Configure o Oracle Database Gateway para Azure SQL Server para estabelecer conexão com o banco de dados do Azure SQL Server usando o ponto final privado do Azure SQL Server.
    Observe que a máquina virtual do Azure que executa o Oracle Database Gateway e o ponto final privado do Azure SQL Server estão na mesma vnet do Azure.
  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:
    [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)
    )
    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.
    • Azure_VM_Hostname_From_Step_2 é o nome do host da VM do Azure na etapa 2.
  10. Use tnsping para testar a conectividade entre o banco de dados Oracle Exadata Database Service on Dedicated Infrastructure e o Oracle Database Gateway for SQL Server em execução na máquina virtual do Azure (esta conexão usa o link de rede de latência rápida baixa estabelecido por OracleDB para Azure entre o Azure e o 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 ~]$
    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.
    • Azure_VM_Hostname_From_Step_2 é o nome do host da VM do Azure 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 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 do Azure SQL Server para o Oracle Exadata Database Service on Dedicated Infrastructure banco de dados plugável (PDB) 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;
    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 é o nome do link de banco de dados na etapa 11.

Instalar Servidor do Oracle Database Gateway

Essas etapas descrevem como instalar o software do Servidor do Oracle Database Gateway em uma máquina virtual do Azure 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 o diretório de instalação do Oracle Database Gateway Server 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 do 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 máquina virtual do Azure 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: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
    As variáveis do exemplo têm os seguintes valores:
    • Database_Name_From_Step_1 é o nome do host do banco de dados do Azure SQL Server, na etapa 1.
    • Fully_Qualified_Server_Name é 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_Domain_Name é o nome do domínio do qual o banco de dados reside na etapa 1, 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
    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)
    )
    As variáveis do exemplo têm os seguintes valores:
    • Azure_SQL_Server_Database_Name é o nome do banco de dados do Azure SQL Server na etapa 1.
    • Azure_VM_Hostname_From_Step_2 é o nome do host da VM do Azure na etapa 2.
  3. No Servidor do Oracle Database Gateway, modifique listener.ora para incluir as informações do Oracle Database Gateway.
    Por exemplo:
    [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)
    )
    )
    As variáveis do exemplo têm os seguintes valores:
    • Azure_VM_Hostname_From_Step_2 é o nome do host da VM do Azure 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 VM do Azure 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= 
    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]$
    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.
    • Azure_VM_Hostname_From_Step_2 é o nome do host da VM do Azure na etapa 2.