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