Pular para o conteúdo
  • Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 7 anos atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #108979
    Avatar de airoospairoosp
    Participante

      Boa tarde pessoal,

      Fiz a instalação do 11g em um servidor de homologação Windows Server 2012, e alguns sistemas utilizam uma DLL externa para fazer a validação da senha do usuário.

      As configurações dos arquivos LISTENER.ORA e TNSNAMES.ORA são:

      # listener.ora Network Configuration File: D:apporacleproduct11.2.0dbhome_1networkadminlistener.ora
      # Generated by Oracle configuration tools.

      SID_LIST_LISTENER =
      (SID_LIST =
      (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:apporacleproduct11.2.0dbhome_1)
      (PROGRAM = extproc)
      (ENVS = “EXTPROC_DLLS=ONLY:D:apporacleproduct11.2.0dbhome_1binoraclr11.dll”)
      )
      (SID_DESC =
      (SID_NAME = BCO11GTESTE.CENESP)
      (ORACLE_HOME = D:apporacleproduct11.2.0dbhome_1)
      )
      )

      LISTENER =
      (DESCRIPTION_LIST =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = SRV-SGBDHML)(PORT = 1521))
      )
      )

      ADR_BASE_LISTENER = D:apporacle

      # tnsnames.ora Network Configuration File: D:apporacleproduct11.2.0dbhome_1networkadmintnsnames.ora
      # Generated by Oracle configuration tools.

      EXTPROC_CONNECTION_DATA =
      (DESCRIPTION =
      (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      )
      (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
      )
      )

      BCO11GTESTE =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = SRV-SGBDHML)(PORT = 1521))
      (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = BCO11GTESTE)
      )
      )

      ORACLR_CONNECTION_DATA =
      (DESCRIPTION =
      (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      )
      (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
      )
      )

      Em outro servidor com 10g funciona sem problema.

      Já copiei o arquivo DLLConversion.dll para a pasta “D:apporacleproduct11.2.0dbhome_1BIN”, verifiquei as configurações dos arquivos LISTENER.ORA e TNSNAMES.ORA do servidor 10g, comparei com este novo servidor, e mesmo assim ocorre o erro:

      ORA-28595: Agente extproc: CAMINHO de DLL inválido

      Mas antes apareceu o erro: ORA-28575 : Unable to open RPC connection to external procedure agent

      Se alguém puder ajudar, agradeço.

      Obrigado.

      Airton

      #108980
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Blz ? Eu não uso esse recurso aqui então não tenho um ambiente configurado, mas algumas Obs :

        a) a note metalink “External Procedures – Troubleshooting ORA-28575 Errors” (Doc ID 70638.1) reporta os principais settings cuja Ausência poderia dar msgs do tipo : confrontando com o que vc mostra, eu vi algumas diferenças, cmo a ausência do PATH completo para o ORACLE_HOME na linha do PROGRAM do listener.ora, vc especificou só PROGRAM = extproc, diferente da nota que especifica PROGRAM = /pathdoOraclehome/bin/extproc) , E o ponto (que vc não cita) da config do EXTPROC_DLLS (no arquivo extproc.ORA iirc) na psta ORACLE_HOME/hs/admin … Dá uma lida na nota e muda o que estiver diferente…

        b) enquanto DBA, teu objetivo é COMPROVAR que o setup de external procedures está OK – quaisquer Adaptações no código eventualmente necessárias pra banco 11g ou outras versões de Windows ou seja o que for é Responsa do Fornecedor da tua aplicação…
        O que vc deve fazer é criar uma EXTERNAL PROCEDURE de teste nesse servidor 11g, assim que ela funcionar cabou a tua reponsa como DBA : em pathdooraclehome11gRDBMSextproc vc tem un EXEMPLINHO em C, tenta com ele… O manual de programação em external procedures (online em https://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_externproc.htm#ADFNS010 pro caso do 11gR2) dá uns exemplos em Java também MAS como vc diz que quer carregar “uma DLL externa” , Java não trabalha com DLLs então ACHO que esse teste não te serviria, teria que ser em C mesmo, ou talvez em VB/.NET….

        []s

        Chiappa

        OBS : é mais chatinho de programar em Windows porque (entre outras coisas) não há um compilador C nativo do sistema ao contrário do Linux/Unix, então nem sempre dá pra vc fazer teste programático do tipo, mas Esse seria seu objetivo : criar um programinha exemplo com uma .DLL exemplo e demonstrar que o setup do banco tá ok…

        #108981
        Avatar photoJosé Laurindo Chiappa
        Moderador

          Ah, detalhe adicional : cfrme a nota “Example compiling an External Procedure using Pro*C Callback on Windows platform” (Doc ID 1271017.1) exemplifica, se teu programa C que foi compilado em DLL usa qquer função do sistema pode haver dependência do ** RUNTIME ** (o Distributable, na verdade) do Visual C, msvcr90.dll no caso da versão usada no exemplo : QUESTIONE teu fornecedor sobre QUAL versão de QUAL linguagem de programação eles usaram pra construir essa .DLL deles, pois dependendo disso vc pode precisar de pacotes distributable adicionais, de DLLs de sistemas extras, etc… DE REPENTE, pode ser por isso que no 10g (que é uma versão ANTERIOR) tá funcionando OK, pois lá tem os extras adicionais necessários e no 11g não tem…

          []s

          Chiappa

          #108982
          Avatar de airoospairoosp
          Participante

            Chiappa,

            Verifiquei a documentação, fiz mais algumas pesquisas e agora o erro mudou para:

            “ORA-06520 ERROR LOADING EXTERNAL LIBRARY”

            Em um dos links diz para fazer um teste com TNSPING no alias criado para “external library” e funcionou.

            Estou pensando em usar alguma criptografia do próprio Oracle para criar as senhas destes usuários.

            Outra coisa, no banco 10g que funciona a DLL, a máquina é Windows Server 2003 R2 32 bits, e o banco 11g esta na máquina Windows Server 2012 64 bits, pode ser que o problema seja incompatibilidade entre 32 e 64.

            Airton

            #108985
            Avatar photoJosé Laurindo Chiappa
            Moderador

              Sim, pode ser TANTO por diferença de versão de Windows (como eu disse, diferentes versões de Windows demandam DIFERENTES DLLs de sistema, pacotes de distributables etc, etc) QUANTO por bitsize, já que DLLs de 32 bits usam entry-points DIFERENTES de DLLs de 64 bits…
              Então SIM, se essa .DLL ** não foi compilada ** pelo teu Fornecedor em ambiente 64-bits E com versão de Windows o mais similar possível á tua versão em uso, PODE TRATAR DE ACIONAR esse fornecedor e ele que mande uma DLL corretamente compilada, sim : http://www.dbforums.com/showthread.php?1663043-ORA-06520-PL-SQL-Error-loading-external-library-on-11g-worked-on-10g só comprova isso…

              E repito : quando eu Recomendei que vc criasse uma DLL sua e a chamasse via EXTERNAL PROCEDURE era justamente para COMPROVAR para o teu Fornecedor que o teo SO e o teu banco tão OK, o problema é com versão/detalhes de compilação lá da DLL dele…

              Sobre a outra pergunta : sim, o RDBMS Oracle 11g tem diversas opções de criptografia e autenticação externa, veja lá na Documentação sobre Transparent Data Encryption, DBMS_CRYPTO , DBMS_OBFUSCATION_TOOLKIT, Oracle Wallet, Proxy Authentication…
              Mas (ÓBVIO!!) é o FORNECEDOR DA TUA APLICAÇÃO que vai dizer se os algoritmos constantes nessas packages Atendem aos requisitos dele ou não, só ele pode confirmar que vc pode substituir a tal DLL dele por um método seu, que chame alguma(s da(s) opçção/opções de Criptografia e Autenticação do RDBMS Oracle…

              []s

              Chiappa
              
            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.
            plugins premium WordPress