Como recriar 'Database Link' Oracle por aplicações customizadas .exe - Módulo de Pesagem - INFLOR

A aplicação envolvida é o Módulo de Pesagem da INFLOR, que foi planejada com a intenção de manter um banco intermediário Oracle que poderia trabalhar offline para não parar o fluxo dos clientes em um sistema apartado quando o MLPS oscilasse ou ficasse indisponível devido à perda do link de internet.

Arquitetura

Modulo de Pesagem

A arquitetura consiste em dois bancos Oracle: Um Oracle Principal com a aplicação SGF e outro Oracle Intermediário com o Módulo de Pesagem. A sincronização entre os bancos acontecia com o apoio de um “Database Link” e um link MPLS, possibilitando a comunicação rápida entre as diferentes regiões.

O Módulo de Pesagem ficava OFFLINE automaticamente com a perda de comunicação entre os bancos envolvidos.

Tabela Verdade

Módulo ONLINE Módulo OFFLINE
Database Link ON Database Link OFF
aplicação ON_XE1.exe aplicação OFF_XE1.exe

Gatilhos

Qual o Problema e Oportunidade?

O “problema” era que ao oscilar o link de internet, o Módulo de Pesagem ficava OFFLINE e muitas vezes se perdia por não conseguir retomar a comunicação com o SGF, gerando muitos chamados para TI e atuações 24/7 do time. O sistema podia até funcionar por um tempo OFFLINE, mas depois era preciso sincronizá-lo com o SGF para manter as informações consilidados no sistema principal.

A solução foi passar para stakeholders1 a função de controlar se o Módulo de Pesagem funcionaria OFFLINE ou ONLINE, por uma aplicação .exe que poderia ser executada de mais de um módulo, ou seja, de mais de um servidor Windows. Neste artigo do blog vou te mostrar uma solução que desenvolvi para tirar a função do DBA de editar um database link no Oracle.

Vamos lá?

Tutorial

Primeiramente para quem não conhece o que é um Database Link ou Linked Server, a descrição vem logo a seguir em NOTA

Database Link no Oracle é um objeto criado em um esquema de um banco de dados que possibilita o acesso a objetos de outro banco de dados.

O executável foi gerado a partir de dois arquivos “.bat”, convertidos em “.exe” e disponibilizados na parte superior direita do servidor Windows conforme a imagem abaixo:

Tela Stakeholders

Somente usuários com permissões liberadas pela TI podiam executar as aplicações “.exe”

Veja o código do arquivo .bat que originou os executáveis

  • Scripts
    • off.bat
    • on.bat

off.bat

1
2
3
4
5
6
7
8
echo connect [usuario_oracle]/[senha_usuario]@[SID] > doit.sql
echo drop database link [DATABASE_LINK]; >> doit.sql
echo create database link "[DATABASE_LINK]" connect to [BANCO_SGF] identified by "[senha_usuario]" using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = [IP_BANCO])(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = [NOME_SERVICO2])))'; >> doit.sql
echo exit >> doit.sql
C:\$ORACLE_HOME\server\bin\sqlplus.exe /nolog @doit.sql
del doit.sql
msg * "MODULO OFFLINE"
exit

Veja abaixo o que cada linha representa detalhadamente:

  1. conecta no banco com o usuário [usuario_oracle] no SID @[SID]
  2. apaga o database link [DATABASE_LINK]
  3. cria o database link com o nome do serviço errado propositalmente [NOME_SERVICO2]
  4. toda a ação é um texto que vai para o arquivo doit.sql
  5. o script doit.sql é executado no banco com o parâmetro /nolog para não gerar logs
  6. o script doit.sql é apagado
  7. a mensagem “MODULO OFFLINE” aparece na tela
  8. fecha a conexão com o banco

Com a mesma logica foi possível criar outro script para ativar o Database Link.

on.bat

1
2
3
4
5
6
7
8
echo connect [usuario_oracle]/[senha_usuario]@[SID] > doit.sql
echo drop database link [DATABASE_LINK]; >> doit.sql
echo create database link "[DATABASE_LINK]" connect to [BANCO_SGF] identified by "[senha_usuario]" using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = [IP_BANCO])(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = [NOME_SERVICO])))'; >> doit.sql
echo exit >> doit.sql
C:\$ORACLE_HOME\server\bin\sqlplus.exe /nolog @doit.sql
del doit.sql
msg * "MODULO ONLINE"
exit

A diferença é que o serviço foi criado corretamente com o mesmo [NOME_SERVICO] disponível no banco do SGF, possibilitando com isso o sincronismo das informações.

Executáveis

com os arquivos .bat prontos, podemos gerar os .exe utilizando um software chamado Bat to Exe Converter

conversao .exe

Somente cole o conteúdo do script .bat neste campo marcado e clique para Converter em .exe

Em Exe-Format selecione 32 Bit.

conversao .exe

Faça o mesmo com o outro script “on.bat” para gerar o segundo aplicativo.

Pronto!!

Mensagem OFFLINE

No marcador 1 está o Executável OFF_XE1.exe, que foi acionado pelo stakeholder com permissão de execução. No marcado 2 é a mensagem que aparece quando o database link foi modificado para um serviço que não encontrará o banco Primário.

Modulo de Pesagem offline

ao executar o aplicativo ON_XE1.exe a mensagem abaixo indica que o Modulo de Pesagem está ativo.

Modulo de Pesagem online

Modulo de Pesagem online

Gostou da dica?

Então é possível automatizar ações de DBA através de uma aplicação .exe via Windows. Você só precisa se certificador da sintaxe correta do script e a permissão correta para o usuário do banco conseguir realizar a operação desejada!!

Legal, né?

O céu é o limite para a sua criatividade.

Referência

  1. Conceito criado na década de 1980, pelo filósofo norte-americano Robert Edward Freeman, o stakeholder é qualquer indivíduo ou organização que, de alguma forma, é impactado pelas ações de uma determinada empresa. Em uma tradução livre para o português, o termo significa parte interessada.