Estava eu dando um olhada no web site Siebel Unleashed no começo desta semana quando me deparei com o artigo "Memory Leaks in Siebel". O artigo é interessante pois agrega informação espalhada por vários documentos encontrados somente no My Oracle Support. Mas o que mais me chamou a atenção no artigo não foi o que já está documentado por aí.
O autor do artigo (Timur Vafin) criou uma série de scripts (sendo um deles em Perl) para analisar código eScript recuperado do banco de dados do repositório do Siebel e procurar por variáveis do tipo Object (ou derivados) que de acordo com as boas práticas (de sanidade) deveriam ser eliminadas com um simples var = null dentro do bloco finally de cada programa/função.
Pois bem, eu resolvi botar o programa para rodar e ver o que acontecia. Me desapontei por achar alguns tropeços básicos no que se trata de Perl (nada de pragmas como warnings e strict a a total falta de conhecimento de DBI) mas depois de algumas linhas de código a mais e correções aqui e ali e o script Perl passou a rodar sem problemas no meu ambiente de desenvolvimento sem maiores sustos e com bons resultados!
O script encontrou um monte de tranqueiras no meu repositório... coisa que já faz muito tempo que ninguém olha mas está lá... como uma mina terrestre esperando alguém pisar encima para explodir!
Caso você não saiba, algum componente do seu servidor Siebel pode estar tendo problemas de vazamento de memória e o processo acaba sendo morto pelo sistema operacional para evitar que o servidor fique sem memória RAM. No caso de eScript, fatalmente será algum AOM que estiver rodando no servidor.
Eu fiquei tão contente com o resultado que entrei em contato com o Timur e hoje acabo de criar um projeto para o programa no Google Code. O resultado pode ser visto aqui.
O parser do programa ainda é bem rudimentar (baseado em expressões regulares) e provavelmente pode apresentar falsos positivos mas certamente já é uma mão na roda para começar a desenterrar essas "minas terrestres".
Gostou da ideia também? Estou aceitando contribuidores para o projeto (ei rodar testes também é contribuir!) e mesmo que você só estiver interessado em dar uma olhada no código basta acessar o repositório SVN do Google Code em:
http://code.google.com/p/siebel-code-analyzer/source/browse/#svn%2Ftrunk
Até mais!
quinta-feira, 27 de outubro de 2011
quarta-feira, 19 de outubro de 2011
Fazendo melhor uso do srvrmgr.exe
O aplicativo de linha de comando srvrmgr.exe nunca foi lá de muito sucesso com o Siebel. Mas qualquer SADMIN com algum tempo de experiência acaba descobrindo na marra que a interface gráfica tem suas limitações e o srvrmgr é um excelente complemento para ela.
Uma das utilizações mais óbvias do srvrmgr é quando o AOM utilizado no servidor está fora do ar e você não tem um cliente dedicado configurado. Outro uso é para automatizar tarefas, mas isso é um assunto para outro dia.
A dica que vou escrever aqui hoje é sobre o uso interativo do srvrmgr. Estou assumindo que você está usando Windows. Se você está usando Linux (algum outro UNIX like), por favor me avise para aonde eu mando meu currículo porque eu não aguento mais trabalhar com Siebel em Windows. :-D
Em primeiro lugar, vamos falar de configuração de codificação de caracteres. Suponhamos que seu sistema tenha configurado a aplicação em PTB (Português do Brasil) e você roda um simples list comp no srvrmgr:
srvrmgr> list comp
CC_ALIAS CC_NAME CG_ALIAS CC_RUNMODE CP_DISP_RUN_STATE
----------------- ------------------------------------ ------------ ----------- -----------------
ClientAdmin Client Administration System Background Ativado
CommConfigMgr Communications Configuration Manager CommMgmt Batch Ativado
CommOutboundMgr Communications Outbound Manager CommMgmt Batch Ativado
CommSessionMgr Communications Session Manager CommMgmt Batch Ativado
DbXtract Database Extract Remote Batch Ativado
EAIObjMgr_enu EAI Object Manager (ENU) EAI Interactive Ativado
MailMgr Email Manager CommMgmt Background Ativado
EIM Enterprise Integration Mgr EAI Batch Ativado
FSMSrvr File System Manager System Batch Ativado
GenNewDb Generate New Database Remote Batch Ativado
GenTrig Generate Triggers Workflow Batch Ativado
PageMgr Page Manager CommMgmt Background Ativado
PDbXtract Parallel Database Extract Remote Batch Em execuþÒo
RepAgent Replication Agent Remote Background Ativado
ServerMgr Server Manager System Interactive Em execuþÒo
SRBroker Server Request Broker System Interactive Em execuþÒo
SRProc Server Request Processor System Interactive Em execuþÒo
SynchMgr Synchronization Manager Remote Interactive Ativado
TxnMerge Transaction Merger Remote Background Em execuþÒo
TxnProc Transaction Processor Remote Background Em execuþÒo
TxnRoute Transaction Router Remote Background Em execuþÒo
UpgKitBldr Upgrade Kit Builder SiebAnywhere Batch Ativado
WorkActn Workflow Action Agent Workflow Background Ativado
WorkMon Workflow Monitor Agent Workflow Background Ativado
WfProcBatchMgr Workflow Process Batch Manager Workflow Batch Ativado
WfProcMgr Workflow Process Manager Workflow Batch Ativado
ePharmaObjMgr_enu ePharma Object Manager (ENU) LifeSciences Interactive Ativado
ePharmaObjMgr_esn ePharma Object Manager (ESN) LifeSciences Interactive Ativado
ePharmaObjMgr_ptb ePharma Object Manager (PTB) LifeSciences Interactive Ativado
CC_ALIAS CC_NAME CG_ALIAS CC_RUNMODE CP_DISP_RUN_STATE
----------------- ------------------------------------ ------------ ----------- -----------------
ClientAdmin Client Administration System Background Ativado
CommConfigMgr Communications Configuration Manager CommMgmt Batch Ativado
CommOutboundMgr Communications Outbound Manager CommMgmt Batch Ativado
CommSessionMgr Communications Session Manager CommMgmt Batch Ativado
DbXtract Database Extract Remote Batch Ativado
EAIObjMgr_enu EAI Object Manager (ENU) EAI Interactive Ativado
MailMgr Email Manager CommMgmt Background Ativado
EIM Enterprise Integration Mgr EAI Batch Ativado
FSMSrvr File System Manager System Batch Ativado
GenNewDb Generate New Database Remote Batch Ativado
GenTrig Generate Triggers Workflow Batch Ativado
PageMgr Page Manager CommMgmt Background Ativado
PDbXtract Parallel Database Extract Remote Batch Em execuþÒo
RepAgent Replication Agent Remote Background Ativado
ServerMgr Server Manager System Interactive Em execuþÒo
SRBroker Server Request Broker System Interactive Em execuþÒo
SRProc Server Request Processor System Interactive Em execuþÒo
SynchMgr Synchronization Manager Remote Interactive Ativado
TxnMerge Transaction Merger Remote Background Em execuþÒo
TxnProc Transaction Processor Remote Background Em execuþÒo
TxnRoute Transaction Router Remote Background Em execuþÒo
UpgKitBldr Upgrade Kit Builder SiebAnywhere Batch Ativado
WorkActn Workflow Action Agent Workflow Background Ativado
WorkMon Workflow Monitor Agent Workflow Background Ativado
WfProcBatchMgr Workflow Process Batch Manager Workflow Batch Ativado
WfProcMgr Workflow Process Manager Workflow Batch Ativado
ePharmaObjMgr_enu ePharma Object Manager (ENU) LifeSciences Interactive Ativado
ePharmaObjMgr_esn ePharma Object Manager (ESN) LifeSciences Interactive Ativado
ePharmaObjMgr_ptb ePharma Object Manager (PTB) LifeSciences Interactive Ativado
Tudo certo, exceto pelos caracteres esquisitos. Bem, o problema é a codificação de página padrão do prompt de comando do Windows. A codificação ativa padrão é 850 e isso não ajuda muito com caracteres acentuados da língua portuguesa. Para mudar isto, basta usar o comando chcp no CMD.exe com a opção 1252:
I:\>chcp 1252
Active code page: 1252
Isso resolverá seus problemas com codificações de página. Se você tiver saída com alguma outra configuração exótica, pesquise sobre o assunto para conseguir visualizar a saída do programa de forma adequada. Claro que ficar digitando isso toda santa vez vai ser trabalhoso, mas nada que criar um script para lhe ajudar a fazer isto (você está usando um script, não? Por favor não me diga que você digita todos aqueles parâmetros toda hora!).
A outra questão é trabalhar com senha: se você precisa utilizar um login e senha para se autenticar no srvrmgr é sempre uma boa idéia se preocupar como utilizar sua senha. Salvar em um script não é legal e digitar no terminal também não, afinal papagaio de pirata também é uma falha de segurança!
Existem diversas formas de resolver isto, mas o melhor é desabilitar o ECHO ao se digitar no terminal. Isso pode ser feito de diversas formas (vide sua linguagem de programação favorita). Eu, por exemplo, criei o script em Perl abaixo para fazer isto pra mim:
use warnings;
use strict;
use Term::ReadKey qw(ReadMode);
use Win32::Process;
my $server = '';
my $gateway = '';
my $enterprise = '';
my $user = '';
my $srvrmgr = 'sea752\\client\\BIN\\srvrmgr.exe';
system('chcp 1252');
print 'Type your password to connect to Siebel Server: ';
ReadMode(2);
my $password = <STDIN>;
ReadMode(0);
chomp($password);
print "\n\n";
my $process;
Win32::Process::Create( $process, $srvrmgr,
"srvrmgr /e $enterprise /g $gateway /u $user /p $password",
0, NORMAL_PRIORITY_CLASS, '.' )
or die errorReport();
$process->Wait(10);
sub errorReport {
print Win32::FormatMessage( Win32::GetLastError() );
}
use strict;
use Term::ReadKey qw(ReadMode);
use Win32::Process;
my $server = '';
my $gateway = '';
my $enterprise = '';
my $user = '';
my $srvrmgr = 'sea752\\client\\BIN\\srvrmgr.exe';
system('chcp 1252');
print 'Type your password to connect to Siebel Server: ';
ReadMode(2);
my $password = <STDIN>;
ReadMode(0);
chomp($password);
print "\n\n";
my $process;
Win32::Process::Create( $process, $srvrmgr,
"srvrmgr /e $enterprise /g $gateway /u $user /p $password",
0, NORMAL_PRIORITY_CLASS, '.' )
or die errorReport();
$process->Wait(10);
sub errorReport {
print Win32::FormatMessage( Win32::GetLastError() );
}
Assim a vida fica mais fácil!
Vale lembrar que se você utilizar a função spool do srvrmgr, ela provavelmente vai assumir a codificação do seu banco de dados (não tenho certeza disto, mas meu banco é UTF-8 e a saída salva tem a mesma codificação de dados).
quinta-feira, 6 de outubro de 2011
Bem-vindo!
Olá,
Este é meu primeiro texto neste blog. Aliás, meu primeiro texto em qualquer blog porque este é o primeiro que me atrevo a escrever alguma coisa.
Eu sempre achei que blog era algo muito parecido com um diário e bem... melhor conversar com um amigo/amiga sobre a minha vida pessoal do que publicá-la na Internet!
Mas também é uma oportunidade de escrever alguma coisa que eu goste e que possa ser útil para alguém.
Este blog é dedicado a assuntos técnicos da área de informática, que não por acaso é a área que me dedico profissionalmente. Então, se você não gosta do assunto ou tem horror a gente "nerd"... melhor você visitar outro blog! :-)
São muitos os assuntos que eu poderia escrever sobre tecnologia, que é um campo incrivelmente vasto e que se modifica todos os dias. Não é difícil chegar a conclusão que ficar atualizando ele pode ser difícil, sem considerar o tempo necessário para tanto.
O nome deste blog é "Diário de bordo" porque resolvi que vou escrever exatamente sobre isto: situações em que eu lido no dia-a-dia no meu trabalho e os truques técnicos (ou às vezes nem tão técnicos assim) que eu uso para conseguir "matar os leões" que aparecem cotidianamente.
Seja bem-vindo!
Este é meu primeiro texto neste blog. Aliás, meu primeiro texto em qualquer blog porque este é o primeiro que me atrevo a escrever alguma coisa.
Eu sempre achei que blog era algo muito parecido com um diário e bem... melhor conversar com um amigo/amiga sobre a minha vida pessoal do que publicá-la na Internet!
Mas também é uma oportunidade de escrever alguma coisa que eu goste e que possa ser útil para alguém.
Este blog é dedicado a assuntos técnicos da área de informática, que não por acaso é a área que me dedico profissionalmente. Então, se você não gosta do assunto ou tem horror a gente "nerd"... melhor você visitar outro blog! :-)
São muitos os assuntos que eu poderia escrever sobre tecnologia, que é um campo incrivelmente vasto e que se modifica todos os dias. Não é difícil chegar a conclusão que ficar atualizando ele pode ser difícil, sem considerar o tempo necessário para tanto.
O nome deste blog é "Diário de bordo" porque resolvi que vou escrever exatamente sobre isto: situações em que eu lido no dia-a-dia no meu trabalho e os truques técnicos (ou às vezes nem tão técnicos assim) que eu uso para conseguir "matar os leões" que aparecem cotidianamente.
Seja bem-vindo!
Assinar:
Postagens (Atom)