[oracle_br] Re: Fwd: Patch Issue 11g
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
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
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
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
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
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
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
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
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