[oracle_br] Re: Fwd: Patch Issue 11g

2016-07-27 Por tôpico jlchia...@yahoo.com.br [oracle_br]
E que fique *** CLARO *** : eu estou falando de identicar qual porção de qual 
software que usa (ou mesmo usou) essas DLLs E interromper o software :  NÃO 
É  pra sair des-regitrando DLL NENHUMA, não é isso normalmente o problema, 
não se meta a querer fuçar nisso - é basicamente essa a recomendação da nota 
metalink Oficial sobre o assunto, a "Write Errors, or Files in Use, or 
NoServicesForProcessException During Patch Installation" (Doc ID 294350.1)

[]s

  Chiappa

[oracle_br] Re: Fwd: Patch Issue 11g

2016-07-27 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Opa : então, em 99,999% das vezes isso é Windowsize, nada a ver com o Oracle em 
si : vc já teve a experiência de fechar um arquivo no Word ou no excel ou no 
Windows Explorer, aí vc dá um comando de deleção numa outra janela/prompt de 
comando e recebe um erro de "Arquivo em uso por outro processo" ?? Eu já, 
várias vezes, e normalmente isso é por causa da maneira que o Windows 
implementa lock de arquivos, muitas só quando o processo que abriu o arquivo e 
ganhou o file handle EFETIVAMENTE é encerrado é que o file handle 
correspondente é liberado e os "locks" em cima do arquivo são removidos...
 Pois bem, a suposição Básica é justamente essa, ie, vc fez shutdown da 
instância, parou o processo oracle.exe, parou listener, etc, ** MAS ** ainda 
tem algum programinha abestado na memória marcando um ou alguns desses .DLLs 
como sendo lidos/usados, aí o Installer não os consegue sobrepor Pode ser 
aqueles Windows services que o Oracle cria e ativa mas a gente pouco usa 
(OracleMTSRecovery, extporc,OLAP,VSSWriter,SNMP, tem uma porção deles), pode 
ser outro produto Oracle (GRID Insfrastricture, Client Oracle, Weblogic ou 
qquer outro) usando essas DLLs, pode ser algum serviço que atende ao teu 
aplicativo (ODBC, por exemplo, é useiro e vezeiro em acessar OCI.dll), ou mesmo 
pode ser softwares adicionais, como o  Windows Management Instrumentation, o 
COM+ System, OU mesmo o Windows defender e/ou um Antivírus (já que ninguém 
mexeu na máquina, imagino que tá tudo default nesse sentido) ERRADAMENTE se 
metendo a analisar arqs que pertencem aos softwares Oracle - na verdade, um 
servidor Oracle dedicado a isso imho ** necessariamente ** tá na DMZ, sem 
acesso NENHUM á Internet (e não é acessado por NENHUMA máquina, diretamente), 
então não deveria ter software nenhum de segurança fuçando nele...
 
  Pra vc determinar QUEM está mantendo o lock nesses arquivos, vc pode ir de 
tasklist (normalmente um tasklist /m > tasks.txt te dá a lista) OU (a ** melhor 
** opção, imho) usa um software especializado como o Process manager, que 
consta no pacote System Internals : não é á toa que a m$soft comprou esse 
pacote do desenvolvedor, ele é bom demais da conta : é Obrigatório pra qquer 
DBA trabalhando sob Windows
  
  Uma vez identificado o serviço windows e/ou o software adicional que tá 
acessando/usando (ou que acessou/usou) aí vc pára o serviço windows dele e/ou 
para o software em si/o descarrega da memória que aí sim o file lock deve ser 
liberado...
  
  []s
  
Chiappa

[oracle_br] Fwd: Patch Issue 11g

2016-07-27 Por tôpico angelo angelolis...@gmail.com [oracle_br]
Gostaria de uma opiniao, vcs tem mais experiencia em aplicar patch do que
eu...

Agora final do dia, fui tentar aplicar e eu to achando estranho essa
reclamacao do OPatch, veja abaixo, o que marquei em vermelho
O que acontece, durante o processo, ta reclamando de um monte de DLL que
estaria ativa (ou registrada, que é o certo, nao?)  e todos os serviços do
Oracle estão parados e a base parada.

A maquina nao ta em produção ainda, então tô.. mexendo..


Ambiente Oracle 11.2.0.4  x64  Windows e o patch que tentei aplicar
foi o *23530402
  (desse CPU que saiu esse mes recente, o banco foi atualizado ha pouco
tempo do 11.2.0.3.x pra 11.2.0.4) *


[27/07/2016 18:11:17]OUI exists, the oraclehome is OUI based.
[27/07/2016 18:11:17]OUI exists, the oraclehome is OUI based.
[27/07/2016 18:11:18]OPatch invoked as follows: 'apply '
[27/07/2016 18:11:18]OUI-67077:
 Oracle Home   :
D:\U01\product\11.2.0\dbhome_1
 Inventário Central: C:\Program
Files\Oracle\Inventory
de   :
 Versão de OPatch: 11.2.0.3.14
 Versão de OUI   : 11.2.0.4.0
 Localização de OUI  :
D:\U01\product\11.2.0\dbhome_1\oui
 Localização do arquivo de log:
D:\U01\product\11.2.0\dbhome_1\cfgtoollogs\opatch\opatch2016-07-27_18-11-17PM_1.log
[27/07/2016 18:11:18]Patch history file:
D:\U01\product\11.2.0\dbhome_1\cfgtoollogs\opatch\opatch_history.txt
[27/07/2016 18:11:21][OPSR-MEMORY-1] : after
installInventory.getAllCompsVect() call : 9 (MB)
[27/07/2016 18:11:21][OPSR-MEMORY-2] : after loading rawOneOffList9
(MB)
[27/07/2016 18:11:21]NApply::new process() calls old process() if
CAS is not enabled.
[27/07/2016 18:11:21]Verifying environment and performing
prerequisite checks...
[27/07/2016 18:11:21][OPSR-MEMORY-3] : before loading cooked one
off : 13 (MB)
[27/07/2016 18:11:21][OPSR-MEMORY-4] : after filling cookedOneOffs
and when inventory is loaded.. : 14 (MB)
[27/07/2016 18:11:22]Checking conflict among patches...
[27/07/2016 18:11:22]checkConflictAmongPatchesWithDetail start ->
Wed Jul 27 18:11:22 BRT 2016
[27/07/2016 18:11:22]Wed Jul 27 18:11:22 BRT 2016
[27/07/2016 18:11:22]Adapter can go list: 23530402
[27/07/2016 18:11:22]Adapter not need list:
[27/07/2016 18:11:22]Adapter auto-rollback list:
[27/07/2016 18:11:22]checkConflictAmongPatchesWithDetail end -> Wed
Jul 27 18:11:22 BRT 2016
[27/07/2016 18:11:22]Intra-Conflict check PASSED
[27/07/2016 18:11:22]Checking if Oracle Home has components
required by patches...
[27/07/2016 18:11:22]Check if patch "23530402"  is a no-op patch.
[27/07/2016 18:11:22]Opt. comp. not in OH inventory: oracle.sdo,
11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.sysman.agent, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.rdbms.tg4msql, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.rdbms.tg4sybs, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.rdbms.tg4tera, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.rdbms.tg4ifmx, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.rdbms.tg4db2, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.oraolap, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.oraolap.api, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.rdbms.ic, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.rdbms.dv, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.network.aso, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.has.cfs, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.has.crs, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory:
oracle.has.cvu, 11.2.0.4.0
[27/07/2016 18:11:22]Opt. comp. not in OH inventory: oracle.usm,
11.2.0.4.0
[27/07/2016 18:11:22][ oracle.sdo, 11.2.0.4.0 ] , [
oracle.sysman.agent, 11.2.0.4.0 ] , [ oracle.rdbms.tg4msql, 11.2.0.4.0 ] ,
[ oracle.rdbms.tg4sybs, 11.2.0.4.0 ] , [ oracle.rdbms.tg4tera, 11.2.0.4.0 ]
, [ oracle.rdbms.tg4ifmx, 11.2.0.4.0 ] , [ oracle.rdbms.tg4db2, 11.2.0.4.0
] , [ oracle.oraolap, 11.2.0.4.0 ] , [ oracle.oraolap.api, 11.2.0.4.0 ] , [
oracle.rdbms.ic, 11.2.0.4.0 ] , [ oracle.rdbms.dv, 11.2.0.4.0 ] , [
oracle.network.aso, 11.2.0.4.0 ] , [ oracle.has.cfs, 11.2.0.4.0 ] , [
oracle.has.crs, 11.2.0.4.0 ] , [ oracle.has.cvu, 11.2.0.4.0 ] , [
oracle.usm, 11.2.0.4.0 ]
[27/07/2016 18:11:22]CheckMissingComp: OPatch is not running w/
2-phase patching, re-bui

[oracle_br] Re: get name procedure function

2016-07-27 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Verdade André, as funcões da package OWA foram pensadas para serem usadas num 
ambiente WEB, cfrme o manual correspondente (Database PL/SQL Packages and Types 
Reference, no capítulo sobre OWA_UTIL) nos diz :

"

The OWA_UTIL package contains utility subprograms for performing operations 
such as getting the value of CGI environment variables, printing the data that 
is returned to the client, and printing the results of a query in an HTML table
...
"

** PROVAVELMENTE ** é disso, inclusive, que vc viu ref e quis dizer quando 
falou em 'CGI', 'erro de ambiente não-CGI' no post original, imagino

[]s

  Chiappa

[oracle_br] Re: get name procedure function

2016-07-27 Por tôpico jlchia...@yahoo.com.br [oracle_br]
OK, tá um pouco mais claro o que vc quer, mas antes de mais nada, ** PARA QUE 
** vc quer isso ?? Isso eu já tinha perguntado logo de cara na minha 
resposta Como eu tinha dito, SE o teu objetivo é algum tipo de DEBUG, ie, 
de maneira excepcional/não-rotineira vc quer confirmar que uma procedure X está 
corretamente chamando Y que chama Z para corrigir algum erro de fluxo/lógica, 
as opções de DEBUG, de TRACE e de obter a Lista de Programas em Execução a 
partir das X$ continuam de péEssa opção ** VAI TE POUPAR ** um monte de 
recodificação nas suas rotinas, mas não sei se te atende...


 SE não for para isso (ie, não é algo excepcional mas sim algo que vc quer 
definitivamente, por qualquer motivo que for) e/ou as outras opções não te 
atendem, aí vc VAI TER QUE instrumentar (ie, escrever linhas adicionais no seu 
código), não tem jeito, e como vc esclareceu que é uma rotina PL/SQL que chama 
outra rotina PL/SQL (e provavelmente chama outra e outra) essa 
Instrumentação/código a mais vc VAI TER QUE adicionar nas rotinas PL/SQL, 
mesmo 
 
  Confirmo que que ** não há ** nenhuma "variável global", nenhuma "diretiva de 
compilação", nenhum "algo como 'get_name_procedure'" que funcione para objetos 
dentro de uma package, que é seu caso (como vc já comprovou, as $$ não chegam a 
esse detalhe)... Porém, Antes de listar as possibilidades que vc pode usar no 
código PL/SQL que vc vai adicionar a todas as rotinas PL/SQL que quiser, 
deixe-me apenas (pela última vez) repisar o ponto da arquitetura de 
funcionamento do PL/SQL : vc vai usar alguma combinação das técnicas que 
listarei para obter o nome da procedure em execução (ou ainda melhor, todo o 
call stack, ie, toda a linha de execução que chegou até a rotina atual), ok, 
mas REAFIRMO que o PL/SQL ** não tem acesso ** a terminal nem a nada assim : 
para "exibir na tela" a informação que vc coletou na sua rotina PL/SQL , é por 
sua conta OU adaptar exibição do buffer DBMS_OUTPUT OU escrever no seu 
aplicativo de front-end alguma coisa que leia a informação (a partir de um 
buffer, de uma GTT, de uma variável global/context, de um arquivo-texto, seja 
onde for que a rotina PL/SQL guardou) do nome da rotina e a exiba...

Isso posto, o que vc pode usar nesse código a mais que vc vai ter que adicionar 
em ** todas ** as suas rotinas PL/SQL é :
  
  1) alterar ** TODAS ** as suas rotinas para  usar as built-ins do PL/SQL que 
formatam o call stack, ie, toda a lista de execuções que chegaram até a rotina 
atual e gravar a info nalgum lugar : no 11g vc usava pra isso a 
DBMS_UTILITY.FORMAT_CALL_STACK (veja 
http://www.oracle.com/technetwork/issue-archive/2014/14-jan/o14plsql-2045346.html
 para exemplo), e no 12c ganhamos uma built-in própria no banco pra isso, a 
UTL_CALL_STACK (https://oracle-base.com/articles/12c/utl-call-stack-12cr1 
exemplifica)
  
  ou
  
  2) fazer como vc estava pensando mesmo, ie : alterar ** todas ** as suas 
rotinas para ter um parâmetro string a mais e alterar TODAS as chamadas para 
rotinas de modo a incluir esse parâmetro a mais. Por exemplo, se uma procedure 
PACKAGEX.P1 vai chamar uma rotina PACKAGEY.P2 a chamada ao invés de ser :
  
  PACKAGEY.P2(parâmetrosnecessarios)
  
  deveria passar a ser :
  
  PACKAGEY.P2(parâmetrosnecessários, 'PACKAGEX.P1 chamando PACKAGEY.P2');
  
  ou
  
  3) alterar ** TODAS ** as suas rotinas para que, antes de chamar uma outra 
rotina, guardar em algum lugar (buffer DBMS_OUTPUT, tabela, GTT, context, 
variável global, arquivo-texto no servidor, o que for) a informação de nomes 
das rotinas, E alterar ** TODAS ** as suas rotinas  para que assim que 
startarem lerem a info previamente gravada
  
  
  É isso, ou então alguma pequena variação do tema, penso eu
  
  []s
  
Chiappa

[oracle_br] Re: get name procedure function

2016-07-27 Por tôpico drelu...@gmail.com [oracle_br]
Olá Amanda.. obrigado por sua resposta 

 é isso mesmo, mas não funcionou usando o owa_util.GET_PROCEDURE
 

 apresenta o erro ORA-06502
 

 mas encontrei esse link dizendo que o pacote OWA_UTIL faz parte do kit de 
ferramentas web que não é o meu caso.. portanto apresenta esse 06502
 

 error ORA-06502 
http://www.dbasupport.com/forums/showthread.php?53308-error-ORA-06502 
 
 http://www.dbasupport.com/forums/showthread.php?53308-error-ORA-06502 
 
 error ORA-06502 
http://www.dbasupport.com/forums/showthread.php?53308-error-ORA-06502 Hi, I 
wrote this piece of code to get current procedure name but having error 6502 
when executing it. Can any one know why is it so? Thks
 
 
 
 Visualizar em www.dbasupport... 
http://www.dbasupport.com/forums/showthread.php?53308-error-ORA-06502 
 Visualização pelo Yahoo 
 
 
  


 



[oracle_br] Re: get name procedure function

2016-07-27 Por tôpico amand...@yahoo.com [oracle_br]
Olá Meninos, sou nova aqui 

 eu entendi algo assim

 

 create or replace package body pkg_qualqueras
 

 procedure verifica_nome(nome varchar2) is
 begin
 executa algo com o nome?
 .
 .
 .
 end;
 

 end pkg_qualquer;
  

 

 create or replace package body pkg as
 

 procedure teste1 is
 begin
 .
 .
 .
 pkg_qualquer.verifica_nome(owa_util.get_procedure)
 .
 .
 .
 end;
 

 procedure teste2 is
 begin
 .
 .
 .
 pkg_qualquer.verifica_nome(owa_util.get_procedure)
 .
 .
 .

 end;
 

 end pkg;
  
 

 isso não funcionou?
 

 se entendi errado me desculpe
 

 Amanda


[oracle_br] Re: get name procedure function

2016-07-27 Por tôpico drelu...@gmail.com [oracle_br]
obrigado pela sua resposta Chiappa 

 deixando mais claro o que preciso
 

 o dbms eu coloquei somente para exemplificar, não estou usando o mesmo como 
imaginou.
 

 o que preciso é passar o nome da procedure para uma outra package como 
parametro, imaginando algo mais simples, achei que tivesse algo como 
"get_name_procedure".


[oracle_br] Re: get name procedure function

2016-07-27 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Oi, tudo jóia ? Eu havia dado uma resposta (que vc provavelmente até já viu) 
num outro fórum mas se vc não se importar, vou colar aqui a mesma resposta - 
não só para que outras pessoas que precisem tenham outra chance de encontrar 
MAS também para ter outra chance de provocar eventuais respostas, outros pontos 
de vistas e outras Possibilidades que não me ocorreram : entre outras coisas, 
esse tipo de aprendizado/troca de idéias para que eu tenha crescimento 
profissional (já que essa coisa de banco de dados é o que paga o leitinho das 
crianças) é uma das coisas que me move...

 Então segue : bom, primeiro não entendi patavina sobre essa sua obs de "não é 
ambiente CGI" - o que que é isso no contexto de programação PL/SQL no database 
?? Me parece ser algum conceito da tua linguagem/tool/ambiente de 
desenvolvimento...
A próxima pergunta é a de sempre : PARA QUE vc quer saber o nome do PL/SQL em 
execução, é para fim de debug (ie, numa ÚNICA VEZ vc quer acompanhar o 
comportamento de rotinas PL/SQL, provavelmente para analisar algum erro lógico 
?? Se é isso, considere a opção de ** DEBUGAR ** o PL/SQL, 
www.thatjeffsmith.com/archive/2014/02/ho...-the-plsql-debugger/ exemplifica : 
com esse recurso vc tem até mais recursos, podendo colocar BREAKPOINTs além de 
acompanhar linha a linha a execução A questão apenas é que para debugar 
PL/SQL no SQL Developer vc tem que estar executando o PL/SQL em questão a 
partir do SQL developer, nem sempre isso é possível... Muitas vezes é 
totalmente possível vc levantar os parâmetros que estão sendo passados e 
executar o PL/SQL em questão manualmente no SQL developer informando esses 
parâmetros, mas às vezes não é

Aí finalmente a sua Resposta : se ainda não sabia, *** SAIBA *** que a 
linguagem PL/SQL absolutamente *** NÃO TEM NENHUM COMANDO PARA INTERAGIR COM 
TELA/FRONT-END *** : sendo a linguagem de programação back-end que é, o PL/SQL 
NÂO tem comando para print de texto, NÃO tem comando pra criar uma janela, NÃO 
tem comando para receber input via teclado do usuário, NÃO tem comando pra 
interagir com mouse ou impressora PL/SQL é uma linguagem feita para 
manipular (com extrema eficiência) dados dentro do banco de dados, NADA MAIS 
que isso
Nesse contexto, o que o DBMS_OUTPUT faz NÂO É imprimir coisa NENHUMA, é 
simplesmente colocar uma string num buffer, e Alguns ambientes capazes de 
executar rotinas PL/SQL (como o sqlplus) foram programados para reconhecer e 
exibir o conteúdo desse buffer... Yes ??? Então se a tua 
linguagem/ambiente/tool de programação de onde vc tá chamando o PL/SQL não 
exibe nada, COM CERTEZA ela simplesmente Não Foi Programada para reconhecer e 
exibir o conteúdo do buffer Tá claro ? É alguma coisa EXTERNA ao PL/SQL e 
que o PL/SQL Não Tem Como interferir... Porém antes de desistir Tenha ** 
certeza ** que a sua tool/linguagem de programação Realmente Não Foi programada 
para reconhecer o buffer do DBMS_OUTPUT (** muitas ** tem esse Suporte mas 
simplesmente não está Ativado), e se tiver Dúvidas sobre isso numa outra 
mensagem *** DETALHE EXATAMENTE ** qual é essa tool/linguagem/ambiente de 
programação que vc está usando, que eventualmente quem trabalhar com ela/a 
conhecer pode palpitar : por exemplo, APEX rodando num web browser em princípio 
não tem esse Suporte built-in mas 
http://oraclequirks.blogspot.com.br/2007/08/practical-example-of-using-global.html
 exemplifica como se ler o conteúdo do buffer do DBMS_OUTPUT, persistir numa 
GTT e aí é trivial fazer um select na GTT dentro da aplicação...
 Registro aqui, em AINDA OUTRA variação possível, que desde muito tempo nós 
sempre tivemos a chance de chamar de dentro do PL/SQL rotinas feitas em 
linguagens que tem acesso ao hardware/periféricos como exibição em tela, 
impressoras e quetais : duas das mais comuns são C (via EXTERNAL PROCEDURES) e 
Java (via JVM interna no RDBMS Oracle, se disponível na sua instalação) : não 
vou usar esse recurso, entre outras questões porque ele demanda Conhecimento e 
Pesquisa, mas fica a Possibilidade...

O que vc pode fazer num caso onde o buffer do DBMS_OUTPUT não tá sendo 
reconhecido/impresso pela tua tool/ambiente que chama a rotina PL/SQL E não é 
viável debugar no SQL Developer ou similares é :

a) o MAIS ÓBVIO, instrumentar o teu programa que vai chamar as rotinas PL/SQL 
para imprimir o nome da rotina que vai chamar : por exemplo, se fosse um 
programa C poderia ser algo do tipo :


printf('Vou chamar a rotina nomedapackage.proc1');
exec nomedapackage.proc1();
printf('Vou Chamar a rotina nomedapackage.proc2');
exec nomedapackage.proc2();


(Como eu disse acima, é TOTALMENTE PARTE DA ARQUITETURA proposta vc desenvolver 
front-end em alguma outra linguagem/tool E desenvolver o back-end/manipulação 
de dados em PL/SQL que será chamado pelo front-end : justamente por isso a 
Oracle sempre primou por disponibilizar acesso à rotinas PL/SQL stored  para o 
mais amplo espectro de linguagem/ambientes)...

Uma variação