Re: [oracle_br] Importar XML
Carlos, eu solucionei algo desse tipo da seguinte maneira: http://www.pedroneto.com.br/blog/2012/02/ler-xml-com-oracle-a-partir-de-url Em 28 de maio de 2012 06:12, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Ola a todos, como posso importar um ficheiro XML para uma tabela? Oracle 10G 10.2.0.3.0 Obrigado, Carlos [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
RE: [oracle_br] Re: Importar XML
Ola Chiappa tens razão . == vc TEM o componente de XML, o XMLDb, instalado, setado e ativo, ou não ??? Não, tenho. O ficheiro estará num servidor FTP ao qual eu importarei para o servidor Oracle == vc TEM JAVA nesse database ou não ?? Não == o arquivo a importar está numa máquina cliente ou no servidor Oracle ?? Servidor Oracle == essa importação é algo que vc vai fazer uma vez só (e portanto em tese pode se usar tools externas não-programadas, tipo SQL Developer), ou é algo Rotineiro, e que portanto demanda Automação ?? Vai ser Rotineiro - Diario == o tamanho do arquivo XML a ler, é qual ? Isto se pergunta para que, em caso de arquivo anormalmente grande, já tentemos dar uma solução Otimizada... - Deve ter aproximadamente cerca de 800 Registos Diarios == o arquivo XML em questão ESTÁ bem formado ?? Nos mostre uma versão menor dele, contendo o trailer, o header e uns poucos registros completos e o MAIS IMPORTANTE : = Exatamente O QUE vc quer fazer com ele : vc quer apenas ler e grava o arquivo .XML todo numa única coluna string large (CLOB ou XML-type) de um registro de uma tabela Oracle, OU vc quer interpretar, ie : vc quer que cada coluna de cada registro do arquivo XML corresponda a uma coluna de um registro de uma tabela Oracle, e aí os dados devem ser carregados poara essa tabela Oracle, em ordem ??? Quero carregar os campos para uma tabela separada por campos. ?xml version=1.0 encoding=UTF-8? -LGFDocument xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance; xmlns:xsd=http://www.w3.org/2001/XMLSchema;-AccessRequestDocumentType1 /DocumentTypeVersion1.0/VersionEntityIdLGF/EntityIdTimeStamp2012 -05-23T13:09:50/TimeStampReference1/Reference2/Reference3/Reference 4/Reference5/ReplyEmailAddressinformat...@logi.com/ReplyEmailAddress FileNumber008074/FileNumber/AccessRequest-ConsignmentRef760 42380/RefDocNumber0/DocNumberBarCodeConstantN/BarCodeConstantServ ices1/ServicesProductType2 /ProductTypePieces1/PiecesWeight1000/WeightWeightUnitGR/WeightU nitPaymentType1/PaymentTypeCashOnDeliveryValue0/CashOnDeliveryValue CashOnDeliveryCurrencyCodeEUR/CashOnDeliveryCurrencyCodeCashOnDeliveryO bsTLM: 989058417/CashOnDeliveryObsSentByruiv/SentByConsigneeDepSTALL /ConsigneeDepConsigneeNumber/ConsigneeReference/ConsigneeReference2/ ConsigneeNameCARLOS/ConsigneeNameAttentionOf/ConsigneeAddressAV MIGUEL MAGALHAES N99 PAREDES TLM: 956058417/ConsigneeAddressConsigneeCityBEST/ConsigneeCityConsigneeZip Code4580-000/ConsigneeZipCodeConsigneeCountryCodePT/ConsigneeCountryCo deConsigneeTelephone/ConsigneeFax/ConsigneeEmail/Obs1TLM: 985658417/Obs1Obs2/Obs3/IDMaster/paletesOrdem/RecolhaFalse/Reco lhaIDRota//Consignment/LGFDocument Com os melhores cumprimentos, Carlos De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de J. Laurindo Chiappa Enviada: segunda-feira, 28 de Maio de 2012 14:50 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] Re: Importar XML Detalhes, plz, sempre os sanguinolentos detalhes, a verdade está nos detalhes == vc TEM o componente de XML, o XMLDb, instalado, setado e ativo, ou não ??? == vc TEM JAVA nesse database ou não ?? == o arquivo a importar está numa máquina cliente ou no servidor Oracle ?? == essa importação é algo que vc vai fazer uma vez só (e portanto em tese pode se usar tools externas não-programadas, tipo SQL Developer), ou é algo Rotineiro, e que portanto demanda Automação ?? == o tamanho do arquivo XML a ler, é qual ? Isto se pergunta para que, em caso de arquivo anormalmente grande, já tentemos dar uma solução Otimizada... == o arquivo XML em questão ESTÁ bem formado ?? Nos mostre uma versão menor dele, contendo o trailer, o header e uns poucos registros completos e o MAIS IMPORTANTE : = Exatamente O QUE vc quer fazer com ele : vc quer apenas ler e grava o arquivo .XML todo numa única coluna string large (CLOB ou XML-type) de um registro de uma tabela Oracle, OU vc quer interpretar, ie : vc quer que cada coluna de cada registro do arquivo XML corresponda a uma coluna de um registro de uma tabela Oracle, e aí os dados devem ser carregados poara essa tabela Oracle, em ordem ??? Dependendo das suas respostas, a Recomendação pode e vai variar []s Chiappa --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br , Carlos Pinto carlos.pintoo@... escreveu Ola a todos, como posso importar um ficheiro XML para uma tabela? Oracle 10G 10.2.0.3.0 Obrigado, Carlos [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Re: Trigger que grava comando DML
Colega, antes de sair fazendo, imho vc ** tem ** que saber Exatamente a necessidade, para que será usado, enfim... Se é para Auditoria, eu recomendaria fortemente que vc usasse as opções built-in de Auditoria e simplesmente IGNORASSE as gambis com trigger, pois entre outros fatores : - via de regra triggers interferem mais FORTEMENTE em performance do que a Auditoria nativa - nós NÂO temos uma trigger de DML (insert/update/delete) a nível de database, aí vc TERÁ que ter uma trigger para cada tabela de cada schema que vc quer auditar - afaik provavelmente vc precisará dar GRANTs de consultas em tabelas internas (principalmente V$SESSION e V$SQL), já que há casos em que as built-ins de captura de eventos de sistema e similares (como a ORA_SQL_TEXT, que seria a de seu interesse no caso) não são populadas e/ou não podem ser usadas em triggers de DML : http://topdataway.blogspot.com.br/2008/11/get-sql-using-orasqltxt-via-trigger.html nos fala sobre isso... E há um ponto importante : se o database for 11g (R2,afaik), em a Auditoria nativa sendo setada para 'DB' o texto e os binds já são Automaticamente capturados na AUD$, o que elimina qquer necessidade de manipulação via trigger Se o seu database for 10g ou superior, sempre há também a possibilidade de usar FGA (Fine-Grainde Audit), essa built-in já captura o texto do SQL, já que seu db é 11g : http://mportes.blogspot.com.br/2005/05/audit-trail-fga-fine-grained-audit-10g.html é um exemplo antigo mas ainda funcional E claro, se a Audit for temporária, vc sempre tem a chance de Ativar um trace de SQL, via logon trigger ou quetais... = Então a sua resposta é : Entenda a necessidade, Analise se é possível/viável usar as rotinas built-in (POUPANDO tempo/esforço e muito provavelmente intereferindo menos com performance), E se não for só então, muito de má-vontade, vc parte pras triggers, testando se no seu caso as built-ins de captura de eventos atendem, experimente pegar o SQL_ID numa trigger BEFORE statement, é por aí que vão ser as gambis []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Marcos de Moura Gonçalves mgmarcos@... escreveu Olá Srs, Me solicitaram a criação de uma trigger disparada por eventos DML que grave o SQL que ocasionou o disparo da trigger. Já tinha feito algo parecido no Oracle 10g, e lembrava que bastava fazer o join entre v$session e v$sql na coluna sql_id para encontrar o SQL realizado. Entretanto essa demanda é para um banco 11g, e pelo que reparei houve uma mudança na informação gravada na v$session: ele guarda o sql_id do próprio SELECT realizado na v$session... Experimentei também a junção através da coluna prev_sql_id, mas me traz outro SQL que não o que disparou a trigger. Outra alternativa que tentei foi utilizar a função ORA_SQL_TXT, muito utilizada normalmente em exemplos de quem quer fazer auditoria de comandos DDL. Entretanto, pelo menos nas minhas tentativas em triggers de UPDATE, essa função não trouxe nada (li em algum forum que essa função estaria funcionando no 11g apenas para triggers de eventos de sistema, e não DML). Estou pesquisando alternativas ainda sem sucesso. Alguém tem alguma idéia? Obrigado, Marcos de Moura Gonçalves
[oracle_br] Re: Trigger que grava comando DML
Alô Marcos, Eu já sigo 100% na linha que o Chiappa falou, há bastante tempo: levantar a necessidade (para escolher a melhor solução). Portanto, acrescento somente na linha da busca da solução: se já tem pronta, não compensa rebuild. Usar as is já soluciona a maioria das necessidades. Além do quê, triggers podem ser desabilitadas ... Sugestão: - Versão Enterprise (10 e 11): AWR - Versão Standard (10 e 11)..: Statspack - Sem habilitar nada mais no BD (9, 10 e 11 tanto EE ou SE): Logminer Neste link, vc vê um exemplo de como usar o Logminer com REDO, mas sabendo que vc pode habilitar também para ARCHIVE. Portanto, para a sua janela de pesquisa, basta ter o archive em disco, uma vez que o logminer lê os arquivos que já estão externos ao banco, nenhuma tabela vai encher. É 100% garantido e vc pode buscar qualquer kaca feita pelo usuário, inclusive (se precisar) o Oracle já retorna o comando para desfazer a kaca na coluna REDO: http://oracleflash.com/28/Oracle-11g-Using-LogMiner-to-analyze-redo-log-files.html Ederson Elias DBA Oracle http://br.linkedin.com/pub/ederson-elias/24/8b/8b0 --- Em oracle_br@yahoogrupos.com.br, Marcos de Moura Gonçalves mgmarcos@... escreveu Olá Srs, Me solicitaram a criação de uma trigger disparada por eventos DML que grave o SQL que ocasionou o disparo da trigger. Já tinha feito algo parecido no Oracle 10g, e lembrava que bastava fazer o join entre v$session e v$sql na coluna sql_id para encontrar o SQL realizado. Entretanto essa demanda é para um banco 11g, e pelo que reparei houve uma mudança na informação gravada na v$session: ele guarda o sql_id do próprio SELECT realizado na v$session... Experimentei também a junção através da coluna prev_sql_id, mas me traz outro SQL que não o que disparou a trigger. Outra alternativa que tentei foi utilizar a função ORA_SQL_TXT, muito utilizada normalmente em exemplos de quem quer fazer auditoria de comandos DDL. Entretanto, pelo menos nas minhas tentativas em triggers de UPDATE, essa função não trouxe nada (li em algum forum que essa função estaria funcionando no 11g apenas para triggers de eventos de sistema, e não DML). Estou pesquisando alternativas ainda sem sucesso. Alguém tem alguma idéia? Obrigado, Marcos de Moura Gonçalves
[oracle_br] Re: Importar XML
okdoc, agora tá Bem mais claro, não é ? Muito bem : primeiro, fosse uma qtdade significativa eu contra-recomendaria de cara XML (entre outros pontos, não é possível se paralelizar comn cada sessão lendo uma linha, vc tem que perder tempo montando o registro, etc), mas 800 registros é café pequeno... Muito bem, se vc tivesse o XMLDB instalado haveria outras opções, mas como vc não tem imho o que vc poderia fazer é ler o arquivo (via UTL_FILE, provavelmente) e extrair os dados do XML com EXTRACT : http://musingsofaprogrammingaddict.blogspot.com.br/2010/06/oracles-extractvalue-function-and-xml.html é um exemplo de extract, e para UTL_FILE consulte os manuais de referência... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Carlos Pinto carlos.pintoo@... escreveu Ola Chiappa tens razão . == vc TEM o componente de XML, o XMLDb, instalado, setado e ativo, ou não ??? Não, tenho. O ficheiro estará num servidor FTP ao qual eu importarei para o servidor Oracle == vc TEM JAVA nesse database ou não ?? Não == o arquivo a importar está numa máquina cliente ou no servidor Oracle ?? Servidor Oracle == essa importação é algo que vc vai fazer uma vez só (e portanto em tese pode se usar tools externas não-programadas, tipo SQL Developer), ou é algo Rotineiro, e que portanto demanda Automação ?? Vai ser Rotineiro - Diario == o tamanho do arquivo XML a ler, é qual ? Isto se pergunta para que, em caso de arquivo anormalmente grande, já tentemos dar uma solução Otimizada... - Deve ter aproximadamente cerca de 800 Registos Diarios == o arquivo XML em questão ESTÁ bem formado ?? Nos mostre uma versão menor dele, contendo o trailer, o header e uns poucos registros completos e o MAIS IMPORTANTE : = Exatamente O QUE vc quer fazer com ele : vc quer apenas ler e grava o arquivo .XML todo numa única coluna string large (CLOB ou XML-type) de um registro de uma tabela Oracle, OU vc quer interpretar, ie : vc quer que cada coluna de cada registro do arquivo XML corresponda a uma coluna de um registro de uma tabela Oracle, e aí os dados devem ser carregados poara essa tabela Oracle, em ordem ??? Quero carregar os campos para uma tabela separada por campos. ?xml version=1.0 encoding=UTF-8? -LGFDocument xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance; xmlns:xsd=http://www.w3.org/2001/XMLSchema;-AccessRequestDocumentType1 /DocumentTypeVersion1.0/VersionEntityIdLGF/EntityIdTimeStamp2012 -05-23T13:09:50/TimeStampReference1/Reference2/Reference3/Reference 4/Reference5/ReplyEmailAddressinformatica@.../ReplyEmailAddress FileNumber008074/FileNumber/AccessRequest-ConsignmentRef760 42380/RefDocNumber0/DocNumberBarCodeConstantN/BarCodeConstantServ ices1/ServicesProductType2 /ProductTypePieces1/PiecesWeight1000/WeightWeightUnitGR/WeightU nitPaymentType1/PaymentTypeCashOnDeliveryValue0/CashOnDeliveryValue CashOnDeliveryCurrencyCodeEUR/CashOnDeliveryCurrencyCodeCashOnDeliveryO bsTLM: 989058417/CashOnDeliveryObsSentByruiv/SentByConsigneeDepSTALL /ConsigneeDepConsigneeNumber/ConsigneeReference/ConsigneeReference2/ ConsigneeNameCARLOS/ConsigneeNameAttentionOf/ConsigneeAddressAV MIGUEL MAGALHAES N99 PAREDES TLM: 956058417/ConsigneeAddressConsigneeCityBEST/ConsigneeCityConsigneeZip Code4580-000/ConsigneeZipCodeConsigneeCountryCodePT/ConsigneeCountryCo deConsigneeTelephone/ConsigneeFax/ConsigneeEmail/Obs1TLM: 985658417/Obs1Obs2/Obs3/IDMaster/paletesOrdem/RecolhaFalse/Reco lhaIDRota//Consignment/LGFDocument Com os melhores cumprimentos, Carlos De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de J. Laurindo Chiappa Enviada: segunda-feira, 28 de Maio de 2012 14:50 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] Re: Importar XML Detalhes, plz, sempre os sanguinolentos detalhes, a verdade está nos detalhes == vc TEM o componente de XML, o XMLDb, instalado, setado e ativo, ou não ??? == vc TEM JAVA nesse database ou não ?? == o arquivo a importar está numa máquina cliente ou no servidor Oracle ?? == essa importação é algo que vc vai fazer uma vez só (e portanto em tese pode se usar tools externas não-programadas, tipo SQL Developer), ou é algo Rotineiro, e que portanto demanda Automação ?? == o tamanho do arquivo XML a ler, é qual ? Isto se pergunta para que, em caso de arquivo anormalmente grande, já tentemos dar uma solução Otimizada... == o arquivo XML em questão ESTÁ bem formado ?? Nos mostre uma versão menor dele, contendo o trailer, o header e uns poucos registros completos e o MAIS IMPORTANTE : = Exatamente O QUE vc quer fazer com ele : vc quer apenas ler e grava o arquivo .XML todo numa única coluna string large (CLOB ou XML-type) de um registro de uma tabela Oracle, OU vc quer interpretar, ie : vc quer que cada coluna de cada registro do arquivo XML corresponda a uma coluna de um
RE: [oracle_br] Re: Importar XML
Obrigado Chiappa..vou-me aventurar . Com os melhores cumprimentos, Carlos De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de J. Laurindo Chiappa Enviada: segunda-feira, 28 de Maio de 2012 17:49 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] Re: Importar XML okdoc, agora tá Bem mais claro, não é ? Muito bem : primeiro, fosse uma qtdade significativa eu contra-recomendaria de cara XML (entre outros pontos, não é possível se paralelizar comn cada sessão lendo uma linha, vc tem que perder tempo montando o registro, etc), mas 800 registros é café pequeno... Muito bem, se vc tivesse o XMLDB instalado haveria outras opções, mas como vc não tem imho o que vc poderia fazer é ler o arquivo (via UTL_FILE, provavelmente) e extrair os dados do XML com EXTRACT : http://musingsofaprogrammingaddict.blogspot.com.br/2010/06/oracles-extractva lue-function-and-xml.html é um exemplo de extract, e para UTL_FILE consulte os manuais de referência... []s Chiappa --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br , Carlos Pinto carlos.pintoo@... escreveu Ola Chiappa tens razão . == vc TEM o componente de XML, o XMLDb, instalado, setado e ativo, ou não ??? Não, tenho. O ficheiro estará num servidor FTP ao qual eu importarei para o servidor Oracle == vc TEM JAVA nesse database ou não ?? Não == o arquivo a importar está numa máquina cliente ou no servidor Oracle ?? Servidor Oracle == essa importação é algo que vc vai fazer uma vez só (e portanto em tese pode se usar tools externas não-programadas, tipo SQL Developer), ou é algo Rotineiro, e que portanto demanda Automação ?? Vai ser Rotineiro - Diario == o tamanho do arquivo XML a ler, é qual ? Isto se pergunta para que, em caso de arquivo anormalmente grande, já tentemos dar uma solução Otimizada... - Deve ter aproximadamente cerca de 800 Registos Diarios == o arquivo XML em questão ESTÁ bem formado ?? Nos mostre uma versão menor dele, contendo o trailer, o header e uns poucos registros completos e o MAIS IMPORTANTE : = Exatamente O QUE vc quer fazer com ele : vc quer apenas ler e grava o arquivo .XML todo numa única coluna string large (CLOB ou XML-type) de um registro de uma tabela Oracle, OU vc quer interpretar, ie : vc quer que cada coluna de cada registro do arquivo XML corresponda a uma coluna de um registro de uma tabela Oracle, e aí os dados devem ser carregados poara essa tabela Oracle, em ordem ??? Quero carregar os campos para uma tabela separada por campos. ?xml version=1.0 encoding=UTF-8? -LGFDocument xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance; xmlns:xsd=http://www.w3.org/2001/XMLSchema;-AccessRequestDocumentType1 /DocumentTypeVersion1.0/VersionEntityIdLGF/EntityIdTimeStamp2012 -05-23T13:09:50/TimeStampReference1/Reference2/Reference3/Reference 4/Reference5/ReplyEmailAddressinformatica@... mailto:informatica@...%3c/ReplyEmailAddress%3e%3c /ReplyEmailAddress FileNumber008074/FileNumber/AccessRequest-ConsignmentRef760 42380/RefDocNumber0/DocNumberBarCodeConstantN/BarCodeConstantServ ices1/ServicesProductType2 /ProductTypePieces1/PiecesWeight1000/WeightWeightUnitGR/WeightU nitPaymentType1/PaymentTypeCashOnDeliveryValue0/CashOnDeliveryValue CashOnDeliveryCurrencyCodeEUR/CashOnDeliveryCurrencyCodeCashOnDeliveryO bsTLM: 989058417/CashOnDeliveryObsSentByruiv/SentByConsigneeDepSTALL /ConsigneeDepConsigneeNumber/ConsigneeReference/ConsigneeReference2/ ConsigneeNameCARLOS/ConsigneeNameAttentionOf/ConsigneeAddressAV MIGUEL MAGALHAES N99 PAREDES TLM: 956058417/ConsigneeAddressConsigneeCityBEST/ConsigneeCityConsigneeZip Code4580-000/ConsigneeZipCodeConsigneeCountryCodePT/ConsigneeCountryCo deConsigneeTelephone/ConsigneeFax/ConsigneeEmail/Obs1TLM: 985658417/Obs1Obs2/Obs3/IDMaster/paletesOrdem/RecolhaFalse/Reco lhaIDRota//Consignment/LGFDocument Com os melhores cumprimentos, Carlos De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br ] Em nome de J. Laurindo Chiappa Enviada: segunda-feira, 28 de Maio de 2012 14:50 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br Assunto: [oracle_br] Re: Importar XML Detalhes, plz, sempre os sanguinolentos detalhes, a verdade está nos detalhes == vc TEM o componente de XML, o XMLDb, instalado, setado e ativo, ou não ??? == vc TEM JAVA nesse database ou não ?? == o arquivo a importar está numa máquina cliente ou no servidor Oracle ?? == essa importação é algo que vc vai fazer uma vez só (e portanto em tese pode se usar tools externas não-programadas, tipo SQL Developer), ou é algo Rotineiro, e que portanto demanda Automação ?? == o tamanho do arquivo XML a ler, é qual ? Isto se pergunta para que, em caso de arquivo anormalmente grande, já tentemos dar uma solução
Re: [oracle_br] Re: Trigger que grava comando DML
Olá pessoal achei muito interessante a resposta do colega Ederson, principalmente sobre o comentário a respeito do LogMiner, Atualmente trabalho com a Versão Standard do 11 que tem recursos limitados. Pesquisando sobre o Logminer achei em um blog alguns comentários interessantes sobre o LogMiner que postei abaixo da mensagem. Sobre as afirmações do colega do blog o LogMiner consegue realmente dar subsídios para as questões 1,2,3,4, postadas abaixo?. E até que ponto o LogMiner se assemelha ao Statspack , tentei utilizar o Statspack com Ora cle RAC Standart 11g e o relatório gerado saiu com a maioria dos campos vazios e com pouca de informação. Log Miner | Muito além do FlashBack Filed under: Uncategorizedhttp://aguimaraes.wordpress.com/category/uncategorized/ agleite @ 5:20 pm O Oracle LogMiner é uma ferramenta que permite consultas a arquivos de redo logs online e archives através de SQL. Os arquivos de redo contém o histórico da atividades em um banco de dados. Entre os beneficios do LogMiner temos: 1 Localizar um corrupção lógica devido a erros de aplicação 2 Determinar que ações devem ser tomadas para executarmos um recover granular da transação 3 Otimização de performance e plano de capacitação através da análise de tendencias. 4 Pos auditoria. Em 28 de maio de 2012 13:28, ederson2001br ederson200...@yahoo.com.brescreveu: ** Alô Marcos, Eu já sigo 100% na linha que o Chiappa falou, há bastante tempo: levantar a necessidade (para escolher a melhor solução). Portanto, acrescento somente na linha da busca da solução: se já tem pronta, não compensa rebuild. Usar as is já soluciona a maioria das necessidades. Além do quê, triggers podem ser desabilitadas ... Sugestão: - Versão Enterprise (10 e 11): AWR - Versão Standard (10 e 11)..: Statspack - Sem habilitar nada mais no BD (9, 10 e 11 tanto EE ou SE): Logminer Neste link, vc vê um exemplo de como usar o Logminer com REDO, mas sabendo que vc pode habilitar também para ARCHIVE. Portanto, para a sua janela de pesquisa, basta ter o archive em disco, uma vez que o logminer lê os arquivos que já estão externos ao banco, nenhuma tabela vai encher. É 100% garantido e vc pode buscar qualquer kaca feita pelo usuário, inclusive (se precisar) o Oracle já retorna o comando para desfazer a kaca na coluna REDO: http://oracleflash.com/28/Oracle-11g-Using-LogMiner-to-analyze-redo-log-files.html Ederson Elias DBA Oracle http://br.linkedin.com/pub/ederson-elias/24/8b/8b0 --- Em oracle_br@yahoogrupos.com.br, Marcos de Moura Gonçalves mgmarcos@... escreveu Olá Srs, Me solicitaram a criação de uma trigger disparada por eventos DML que grave o SQL que ocasionou o disparo da trigger. Já tinha feito algo parecido no Oracle 10g, e lembrava que bastava fazer o join entre v$session e v$sql na coluna sql_id para encontrar o SQL realizado. Entretanto essa demanda é para um banco 11g, e pelo que reparei houve uma mudança na informação gravada na v$session: ele guarda o sql_id do próprio SELECT realizado na v$session... Experimentei também a junção através da coluna prev_sql_id, mas me traz outro SQL que não o que disparou a trigger. Outra alternativa que tentei foi utilizar a função ORA_SQL_TXT, muito utilizada normalmente em exemplos de quem quer fazer auditoria de comandos DDL. Entretanto, pelo menos nas minhas tentativas em triggers de UPDATE, essa função não trouxe nada (li em algum forum que essa função estaria funcionando no 11g apenas para triggers de eventos de sistema, e não DML). Estou pesquisando alternativas ainda sem sucesso. Alguém tem alguma idéia? Obrigado, Marcos de Moura Gonçalves [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
[oracle_br] Re: Trigger que grava comando DML
Alô Wadson, Eu uso o Logminer desde a versão 9, sempre que preciso auditar algum procedimento duvidoso no banco, bem como avaliar os estragos causados por algum processo mau-comportado. O uso do Statspack com esta intenção, vc consegue retornar os sqls que o banco executou, juntamente com os planos de execução (dentro da janela do cache), mas não consegue retornar os valores bind. Atualmente, trabalho com bases 10g Standard com RAC em ASM. Usando o statspack, sempre analisamos os sqls rodados e seus planos de execução, sempre atuando na melhoria de performance quando surge um sql lento ou quando algum módulo foi modificado ou quando o custo/tempo de resposta se elevaram. Sobre os pontos levantados no seu email: 1 Localizar um corrupção lógica devido a erros de aplicação R- Como o banco armazenou o histórico da execução no archive, vc terá o horário, o usuário, o terminal, o comando executado (redo) e até o sql que desfaz (undo), para operações de INSERT, UPDATE e DELETE. No Logminer, observe que não loga selects, daí a importância de usar o Statspack/Awr que faz o log também de select. Statspack não diz quem rodou, mas informa o quê e quando. O Logminer diz quem, quando e de onde. 2 Determinar que ações devem ser tomadas para executarmos um recover granular da transação: R- quando identificado o grupo de sqls de uma operação, pode-se usar a coluna UNDO para recuperar/desfazer aquela operação, uma recuperação granular de dados que cirurgicamente repara aquele dano sem a necessidade de voltar um backup e perder outras transações em nome da consistência de dados, basta desfazer a operação completa. Curiosidade: se uma transação faz um delete sem cláusula where, no archive fica anotado o delete de cada linha com seu respectivo rowid, tantas vezes quantas forem as linhas atingidas pela operação, que registra mesmo PROCESS_ID, sendo possível identificar as linhas daquele delete em meio a outras operações que o banco rodou no mesmo período, além do comando insert com cada valor de cada atributo da linha deletada (para desfazer o delete). 3 Otimização de performance e plano de capacitação através da análise de tendencias. R- Não entendi a intenção do autor da frase, mas para otimização de performance prefiro o statspack ou o bom e velho trace 10046 + tkprof 4 Pos auditoria. R- Aqui o Logminer é campeão, pois vc terá registro da operação de DML, bastando o banco estar em archivelog. Não precisa triggers e nem feature paga, lembrando ainda que não enche tabela em nenhum schema, basta ter os archivelogs gravados em disco, podendo-se voltar um backup de archives a qualquer momento (e para qualquer diretório e sem a necessidade de recover de base) e analisar estes logs. Em conjunto com o demais logs (alert, sqlnet, etc), tem muito material para um forense digital ... Ederson Elias DBA Oracle http://br.linkedin.com/pub/ederson-elias/24/8b/8b0 --- Em oracle_br@yahoogrupos.com.br, Wadson Ramon wramon@... escreveu Olá pessoal achei muito interessante a resposta do colega Ederson, principalmente sobre o comentário a respeito do LogMiner, Atualmente trabalho com a Versão Standard do 11 que tem recursos limitados. Pesquisando sobre o Logminer achei em um blog alguns comentários interessantes sobre o LogMiner que postei abaixo da mensagem. Sobre as afirmações do colega do blog o LogMiner consegue realmente dar subsídios para as questões 1,2,3,4, postadas abaixo?. E até que ponto o LogMiner se assemelha ao Statspack , tentei utilizar o Statspack com Ora cle RAC Standart 11g e o relatório gerado saiu com a maioria dos campos vazios e com pouca de informação. Log Miner | Muito além do FlashBack Filed under: Uncategorizedhttp://aguimaraes.wordpress.com/category/uncategorized/ agleite @ 5:20 pm O Oracle LogMiner é uma ferramenta que permite consultas a arquivos de redo log's online e archives através de SQL. Os arquivos de redo contém o histórico da atividades em um banco de dados. Entre os beneficios do LogMiner temos: 1 Localizar um corrupção lógica devido a erros de aplicação 2 Determinar que ações devem ser tomadas para executarmos um recover granular da transação 3 Otimização de performance e plano de capacitação através da análise de tendencias. 4 Pos auditoria.
[oracle_br] Re: Trigger que grava comando DML
Blz ? Acho que vale a pena colocar uns coments adicionais : = dentro do redo log NÃO *** temos o texto exato do SQl, portanto o que vc obtém com o logminer *** NÃO É *** o texto do SQL exato que foi disparado, e sim uma versão Equivalente : dependendo da necessidade (digamos, se vc quer localizar o SQL emitido dentro do aplicativo, fazer Tuning, etc) isso pode ser problema... Por exemplo : SCN CSCN TIMESTAM COMMIT_TTHREAD# LOG_ID XIDUSN XIDSLT XIDSQNPXIDUSNPXIDSLTPXIDSQN RBA -- -- -- -- -- -- -- -- -- -- --- OPERATIONOPERATION_CODE SQL_REDO -- --- SQL_UNDO --- 174539528/05/12 1 87 5 40638 5 40638 START 6 set transaction read write; 174541828/05/12 1 87 5 40638 5 40638 INSERT1 insert into SCOTT.DEPT(DEPTNO,DNAME,LOC) values ('12','depto 12',NULL); delete from SCOTT.DEPT where DEPTNO = '12' and DNAME = 'depto 12' and LOC IS NULL and ROWID = 'AAANm5AAFAMAAF'; (ou seja, vc PERDE a informação de datatypes e bindings, que por vezes é CRUCIAL para tuning, pra ver se estão sendo usados os Histogramas, para localizar na Aplicação qual programa está emitindo o SQL, etc - então Tuning em cima de informações do logminer não acho que vai ser algo preciso) = falando de planejamento de tendências e coisas do tipo, imagino que vc poderia fazer alguma coisa básica, tipo identificar um histórico de quais tabelas estão sendo mais inseridas/updateadas/deletadas,qtdade mas há outras fontes e possibilidades para isso também = granularidade da Auditoria : o redo é gerado para todos os SQLs, independente se é uma tabela importante ou não, enquanto o FGA permite que vc audite apenas alguma(s) coluna(s) de tabela(s), ou mesmo uma condição , tipo auditar apenas alterações no SALARIO aonde SALARIO 1, etc = awr/statspack *** não ** fazem log, não Auditam nada : a questão com eles é que eles capturam AMOSTRAS da V$SQL, V$SESSION e correlatas, que funcionam como retratos dos caches (de dados, de SQL, etc) , então num banco bem ativo é COMUM vc perder SQLs no awr/statspack porque eles já saíram do cache durante o intervalo das amostras = finalmente, sobre o Statspack : é verdade que o Standard é restrito (restrito é até eufemismo aqui, tem que ganhar muita coisa pra chegar a ser considerado restrito), mas afaik o Statspack, como eu disse acima, faz coleta das V$ 'comuns' e 'livres' do sistema, tal como V$SQL, V$SESSION, etc, o que Absolutamente Não Demanda licença alguma, deveria funcionar normalmente : então, se não está vindo a informação completa, acho muito mais provável que tenha algum ponto faltante (como TIMED_STATISTICS, por exemplo), que o usuário usado pro report de statspack não tinha privs corretos e/ou que se esteja gerando ou os snapshots ou o report de statspack erradamente []s Chiappa --- Em oracle_br@yahoogrupos.com.br, ederson2001br ederson2001br@... escreveu Alô Wadson, Eu uso o Logminer desde a versão 9, sempre que preciso auditar algum procedimento duvidoso no banco, bem como avaliar os estragos causados por algum processo mau-comportado. O uso do Statspack com esta intenção, vc consegue retornar os sqls que o banco executou, juntamente com os planos de execução (dentro da janela do cache), mas não consegue retornar os valores bind. Atualmente, trabalho com bases 10g Standard com RAC em ASM. Usando o statspack, sempre analisamos os sqls rodados e seus planos de execução, sempre atuando na melhoria de performance quando surge um sql lento ou quando algum módulo foi modificado ou quando o custo/tempo de resposta se elevaram. Sobre os pontos levantados no seu email: 1 Localizar um corrupção lógica devido a erros de aplicação R- Como o banco armazenou o histórico da execução no archive, vc terá o horário, o usuário, o terminal, o comando executado (redo) e até o sql que desfaz (undo), para operações de INSERT, UPDATE e DELETE. No Logminer, observe que não loga selects, daí a importância de usar o Statspack/Awr que faz o log também
[oracle_br] Statspack em branco em banco Standard
Ah, um detalhe adicional : além de tudo q foi falado, cfrme http://www.oracle-home.ro/Oracle_Database/Tuning/Statspack_utility.html e a Documentação Oracle, na hora que vc coleta os snapshots pro statspack, vc ESCOLHE qual nível de estatísticas vc quer - Evidentemente, se vc usou um nível baixo, vc NÂO vai ter as infos de SQL, de row locks, latches, etc... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, J. Laurindo Chiappa jlchiappa@... escreveu Blz ? Acho que vale a pena colocar uns coments adicionais : = dentro do redo log NÃO *** temos o texto exato do SQl, portanto o que vc obtém com o logminer *** NÃO É *** o texto do SQL exato que foi disparado, e sim uma versão Equivalente : dependendo da necessidade (digamos, se vc quer localizar o SQL emitido dentro do aplicativo, fazer Tuning, etc) isso pode ser problema... Por exemplo : SCN CSCN TIMESTAM COMMIT_TTHREAD# LOG_ID XIDUSN XIDSLT XIDSQNPXIDUSNPXIDSLTPXIDSQN RBA -- -- -- -- -- -- -- -- -- -- --- OPERATIONOPERATION_CODE SQL_REDO -- --- SQL_UNDO --- 174539528/05/12 1 87 5 40638 5 40638 START 6 set transaction read write; 174541828/05/12 1 87 5 40638 5 40638 INSERT1 insert into SCOTT.DEPT(DEPTNO,DNAME,LOC) values ('12','depto 12',NULL); delete from SCOTT.DEPT where DEPTNO = '12' and DNAME = 'depto 12' and LOC IS NULL and ROWID = 'AAANm5AAFAMAAF'; (ou seja, vc PERDE a informação de datatypes e bindings, que por vezes é CRUCIAL para tuning, pra ver se estão sendo usados os Histogramas, para localizar na Aplicação qual programa está emitindo o SQL, etc - então Tuning em cima de informações do logminer não acho que vai ser algo preciso) = falando de planejamento de tendências e coisas do tipo, imagino que vc poderia fazer alguma coisa básica, tipo identificar um histórico de quais tabelas estão sendo mais inseridas/updateadas/deletadas,qtdade mas há outras fontes e possibilidades para isso também = granularidade da Auditoria : o redo é gerado para todos os SQLs, independente se é uma tabela importante ou não, enquanto o FGA permite que vc audite apenas alguma(s) coluna(s) de tabela(s), ou mesmo uma condição , tipo auditar apenas alterações no SALARIO aonde SALARIO 1, etc = awr/statspack *** não ** fazem log, não Auditam nada : a questão com eles é que eles capturam AMOSTRAS da V$SQL, V$SESSION e correlatas, que funcionam como retratos dos caches (de dados, de SQL, etc) , então num banco bem ativo é COMUM vc perder SQLs no awr/statspack porque eles já saíram do cache durante o intervalo das amostras = finalmente, sobre o Statspack : é verdade que o Standard é restrito (restrito é até eufemismo aqui, tem que ganhar muita coisa pra chegar a ser considerado restrito), mas afaik o Statspack, como eu disse acima, faz coleta das V$ 'comuns' e 'livres' do sistema, tal como V$SQL, V$SESSION, etc, o que Absolutamente Não Demanda licença alguma, deveria funcionar normalmente : então, se não está vindo a informação completa, acho muito mais provável que tenha algum ponto faltante (como TIMED_STATISTICS, por exemplo), que o usuário usado pro report de statspack não tinha privs corretos e/ou que se esteja gerando ou os snapshots ou o report de statspack erradamente []s Chiappa --- Em oracle_br@yahoogrupos.com.br, ederson2001br ederson2001br@ escreveu Alô Wadson, Eu uso o Logminer desde a versão 9, sempre que preciso auditar algum procedimento duvidoso no banco, bem como avaliar os estragos causados por algum processo mau-comportado. O uso do Statspack com esta intenção, vc consegue retornar os sqls que o banco executou, juntamente com os planos de execução (dentro da janela do cache), mas não consegue retornar os valores bind. Atualmente, trabalho com bases 10g Standard com RAC em ASM. Usando o statspack, sempre analisamos os sqls rodados e seus planos de execução, sempre atuando na melhoria de