Problema
A partir da versão 12.1.18 os produtos da linha RM passarão a utilizar o direct mode do provider de conexão utilizado para bases de dados Oracle.
Com este cenário o erro abaixo poderá ocorrer devido a configuração do alias de conexão a base de dados:
O direct mode implementa a conexão da aplicação RM sem a necessidade de utilizar dll's, provider ou outros artefatos de terceiros para conexão a base Oracle. Antes da implementação, utilizávamos a oracle call interface (OCI) para conexão ao banco de dados Oracle.
Atenção: O client do Oracle continua sendo necessário para acesso aos executáveis Delphi que ainda utilizam o BDE (Borland Database Engine) para conexão com o banco.
Causa
Embora seja uma melhoria no funcionamento da aplicação, esta configuração poderá provocar o erro acima nos seguintes cenários:
- Utilização de conexão via tnsnames do client Oracle
- Utilização de servidor de banco de dados Oracle RAC
A mudança implementada no RM foi habilitada através de tags no arquivo de configuração do rm.host (RM.Host.Service.exe.config , RM.Host.exe.config e RM.Host.JobRunner.exe.config), sendo esta tag oculta no config padrão da instalação e definida como true.
Esta configuração ocasionará o erro nos casos em que a forma de conexão ao oracle não for direta, exemplo (host/sid) ou nos casos em que o servidor Oracle esteja em RAC (Real Application Cluster).
Solução
Para solução do problema os seguintes passos poderão ser seguidos
Caso não utilize Oracle RAC
- Recomendamos aos clientes que não utilizam Oracle RAC que mantenham a configuração do direct mode como true, pois além dos ganhos relativos a instalação, manutenção e adminsitração de clients Oracle nas máquinas em que o produto TOTVS está instalado, teremos outros ganhos em potencial, uma vez que neste modelo a aplicação trabalhará diretamente com o Oracle através do protocolo TCP/IP,sem o envolvimento do client do Oracle.
Para a não ocorrência do erro acima você deverá realizar o seguinte procedimento.
No alias manager informar a conexão direta ao banco de dados ao qual deseja se conectar. Para isso, você deverá informar o nome ou ip do host onde o banco de dados se encontra instalado "/" (barra) o SID "Service Identifier do Oracle", que é o nome do serviço Oracle.
Exs:
10.31.0.159/orcl
serverbd/orcl
Ex:
- Recomendamos aos clientes que não utilizam Oracle RAC que mantenham a configuração do direct mode como true, pois além dos ganhos relativos a instalação, manutenção e adminsitração de clients Oracle nas máquinas em que o produto TOTVS está instalado, teremos outros ganhos em potencial, uma vez que neste modelo a aplicação trabalhará diretamente com o Oracle através do protocolo TCP/IP,sem o envolvimento do client do Oracle.
- Obs.: Caso não utilize a porta padrão 1521, será necessário informá-la, conforme exemplo: BHD050101104:1527/exemplo12116
- Caso utilize Oracle RAC
- O modo direct não é compatível com o Oracle RAC. Sendo assim, clientes que utilizam o Oracle RAC poderão no momento da instalação do RM marcar o flag "utilização do Oracle RAC" que automáticamente irá setar a tag USEDEVARTDIRECT para false conforme imagem abaixo.
Caso não tenha marcado a opção durante a instalação, basta incluir a tag abaixo nos arquivos de configuração (RM.Host.Service.exe.config , RM.Host.exe.config e RM.Host.JobRunner.exe.config conforme abaixo:
<add key="USEDEVARTDIRECT" value="false" />
- O modo direct não é compatível com o Oracle RAC. Sendo assim, clientes que utilizam o Oracle RAC poderão no momento da instalação do RM marcar o flag "utilização do Oracle RAC" que automáticamente irá setar a tag USEDEVARTDIRECT para false conforme imagem abaixo.
Para verificar se a instancia é ou não Oracle RAC, você poderá executar a seguinte consulta:
select name, value from v$parameter where name='cluster_database';
Caso o campo VALUE retorne TRUE a instancia é Oracle RAC.