Oracle Enterprise Manager 10g Grid Control no Windows 7
Em um dos trabalhos de compatibilidade realizados, o cliente me informou que a ferramenta Oracle Enterprise Manager 10g só funcionava no Windows 7 quando executada com privilégios administrativos. Caso contrário, a aplicação era encerrada (Crash) após o usuário fornecer suas credenciais.
Informei ao cliente que por se tratar de uma ferramenta de terceiros, que o recomendado era acionar o fornecedor e solicitar o suporte até mesmo para evitar perder qualquer tipo de garantia do produto ou suporte.
Devido à urgência e aval do cliente, seguimos com o processo de troubleshooting.
O problema ocorria nas seguintes ferramentas: Enterprise Manager, Oracle SQL Plus e Oracle Export.
O seguinte erro era gerado no console do Enterprise Manager:
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION (0xc0000005) occurred at PC=0x8077E76
Function=[Unknown.]
Library=C:\oracle\product\10.2.0\client_1\jdk\jre\bin\client\jvm.dll
Current Java thread:
at oracle.jdbc.driver.T2CConnection.t2cCreateState(Native Method)
at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:346)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414)
at oracle.jdbc.driver.T2CConnection.<init>(T2CConnection.java:132)
at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:78)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
No Oracle SQL Plus, através de um DUMP, identificamos que o seguinte erro ocorria após o CRASH:
sp2-1053 unable to initialize Oracle call interface
Já no Oracle Export a aplicação não exportava as tabelas e gerava o seguinte erro quando não era executada com o perfil de administrador:
Export: Release 10.2.0.1.0 - Production on Sex Jan 6 14:26:07 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
EXP-00056:
EXP-00000: ExportaþÒo encerrada sem Ûxito
Causa do Problema:
Os processos da ferramenta Oracle Enterprise Manager 10g tentam criar um objeto de mapeamento de arquivo no namespace Global que requer o privilégio SeCreateGlobal, que não está disponível para usuários comuns.
O SHIM LocalMappedObject substitui o prefixo Global\ com o prefixo Local\ antes da aplicação chamar a API original.
Solução:
Habilitar o UAC (Controle de Conta de Usuário) no nível padrão recomendado pela Microsoft e criar os seguintes SHIMs (correções) para cada aplicação conforme descrito seguir.
Console do Enterprise Manager:
Utilize o SHIM LocalMappedObject para corrigir o problema.
O SHIM pode ser criado através da ferramenta Compatibility Administrator que faz parte do Microsoft Application Compatibility Toolkit 5.6 (ACT).
Ao executar o Enterprise Manager verificamos que o não se trata de um executável e sim de um arquivo .JAR.
Através do PROCMON foi possível obter a linha de comando utilizada para executar a ferramenta:
java -mx128m
-DADMIN_WRL=C:\oracle\product\10.2.0\client_1\sysman\admin
-Dsun.java2d.noddraw=true -DORACLE_HOME=C:\oracle\product\10.2.0\client_1
-DGENERAL_BUS_PACK="" -DORBdisableLocator=true
-Djdbc.backward_compatible_to_816=true
-cp
"classes;jlib/oembase-10_1_0.jar;jlib/oemtools-10_1_0.jar;jlib/swingall-1_1_1.jar;jlib/ewtcompat-3_3_15.jar;jlib/ewt3.jar;jlib/ewt3-nls.jar;jlib/share.jar;C:\oracle\product\10.2.0\client_1\sysman\jlib\master.jar;C:\oracle\product\10.2.0\client_1\sysman\jlib\master_zh_CN.jar;C:\oracle\product\10.2.0\client_1\sysman\jlib\master_fr.jar;C:\oracle\product\10.2.0\client_1\sysman\jlib\master_de.jar;C:\oracle\product\10.2.0\client_1\sysman\jlib\master_it.jar;C:\oracle\product\10.2.0\client_1\sysman\jlib\master_ja.jar;C:\oracle\product\10.2.0\client_1\sysman\jlib\master_ko.jar;C:\oracle\product\10.2.0\client_1\sysman\jlib\master_pt_BR.jar;C:\oracle\product\10.2.0\client_1\sysman\jlib\master_es.jar;jlib/help4.jar;jlib/help4-nls.jar;jlib/oracle_ice5.jar;jlib/dbui2.jar;jlib/dbui2-nls.jar;jdbc\lib\ojdbc14.jar;jdbc/lib/nls_charset12.zip;jlib\orai18n.jar;jlib/kodiak.jar;sysman\jlib\netchart360.jar;jlib/javax-ssl-1_1.jar;jlib/jssl-1_1.jar;jlib/netcfg.jar;jlib/o3logon.jar;jlib/verifier14.jar;jlib/ewm-1_1.jar;jlib/ojpse_2_1_5.jar;network\jlib/netmgrm.jar;network\jlib/netmgr.jar;network/tools;lib\xmlparserv2.jar;jlib/cvd.zip;jlib/jndi.jar;jlib/jewt4.jar;jlib/jewt4-nls.jar;assistants/jlib/assistantsCommon.jar;jlib/jle2.jar;jle2-nls.jar;jlib/ldap.jar;jlib/ldapjclnt10.jar;rdbms\jlib\qsma.jar"
oracle.sysman.vtx.vtxOemApp.OemApp console
O primeiro passo é executar a ferramenta Compatibility Administrator e clicar no botão FIX para criar o SHIM, conforme:
Nesse caso o SHIM deve ser aplicado na aplicação JAVA.EXE utilizada pela aplicação.
Através do arquivo de configuração da ferramenta, ou até mesmo pelo PROCMON, foi possível obter o caminho do arquivo JAVA.EXE utilizado pela aplicação.
Após fornecer o caminho do arquivo JAVA.EXE clique no botão NEXT.
A seguinte tela irá aparecer. Clique no botão NEXT para prosseguir.
Selecione o SHIM LocalMappedObject e clique no botão NEXT.
Clique no botão FINISH para finalizar.
Clique no ícone Salvar existe na barra de ferramentas (ou pressione CTRL+S) para salvar o SHIM (arquivo SDB).
Após salvar, clique com o botão direito no SHIM e clique no item Install.
Uma vez instalado é possível conferir através do nó Installed Database.
Uma alternativa para a instalação é executar o seguinte comando:
SDBINST.EXE <nome do SHIM (arquivo SDB)
Os mesmos procedimos foram realizados para o Oracle SQL PLUS e ORACLE EXPORT. Para o SQL PLUS o arquivo selecionado para criar o SHIM foi o sqldeveloper.exe e para o ORACLE EXPORT o arquivo foi o exp.exe.
Ferramentas:
Microsoft Application Compatibility Toolkit 5.6
Disponível em: https://www.microsoft.com/en-us/download/details.aspx?id=7352
Microsoft Application Verifier
Disponível em: https://www.microsoft.com/en-us/download/details.aspx?id=20028