Re: [oracle_br] Re: Ajuda Codigo PL/SQL
Maravilha : mais importante do que a resposta às vezes. é ensinar como se faz Okdoc, teste o export/import direitinho em primeiro lugar (num banco Teste, claro) , dando certo ok, não sendo viável. Apela pras técnicas de SQL gerando script SQL ou em último caso apela pro SQL dinamico... []s Chiappa
Re: [oracle_br] Re: Ajuda Codigo PL/SQL
Opa Chiappa, o que quis dizer é exatamente o que você entendeu. Eu até tinha montado a query dinâmica da mesma forma que você a escreveu, só não tinha feito o script. E realmente, burrice minha, nao tinha pensado no expdp passando somente os dados dos owners para depois fazer o impdp para o novo owner do catálogo, mas simples e mais elegante dessa forma. Em quinta-feira, 18 de janeiro de 2018 17:40:18 BRST, jlchia...@yahoo.com.br [oracle_br] escreveu: Xô entender melhor a sua situação : num único database Oracle, database esse que é usado como RMAN catalog database, vc tem muitos catálogos, sendo que é um catálogo RMAN pra cada database, é isso ??? E dado o fato que a utiliuzação Normal e Rotineira de um catálogo RMAN é manter dados de backup para Múltiplos Databases (isso é demonstrado Inclusive na Modelagem do catálogo, vc vai ver que as tabelas do catálogo ** TODAS ELAS ** possuem já uma coluna DB_KEY, para que a mesma tabela possa guardar backups de N databases), vc quer Unificar isso, correto ? Muito bem : antes de responder a sua pergunta, deixa eu perguntar - vc precisa guardar os dados hoje armazenados nesses catálogos, transportando-os como estão para o novo catálogo único que vc vai criar ?? Se sim, veja que um catálogo RMAN nada mais é do que uma série de tabelas Oracle que pertencem a um dado schema/usuário Oracle qualquer : hoje, se vc tem no seu banco de catálogo digamos 30 catalogs vc tem nesse banco de catálogo 30 schemas, um schema que é owner do catálogo1, um schema que é owner do catálogo2, um schema que é owner do catálogo3, assim por diante... SE todos esses catálogos são da MESMA EXATA VERSÃO, as tabelas que compõem esses catálogos VÃO SER ABSOLUTA E COMPLETAMENTE IGUAIS em termos de estrutura, com as colunas e constraints COMPLETAMENTE IGUAIZINHAS, só os dados dentro de cada tabela é que mudam... SENDO ASSIM, E SE realmente os dados anteriores não podem ser perdidos, não faz sentido vc partir pra bloco PL/SQL anônimo : simplesmente crie o repositório unificado vazio (com o comando de CREATE CATALOG) num schema novo (chamado REP_UNIF, digamos), faça um EXPORT via datapump apenas com os dados (ie, SEM pedir pra criar tabelas!!) de cada schema owner, depois faça import pedindo pros mover os dados que originalmente pertenciam ao schema original para o schema REP_UNIF, isso se faz com REMAP_SCHEMA Agora sim, respondendo a sua pergunta : ao que entendi, se (digamos) a tua consulta principal : SELECT OWNER FROM DBA_OBJECTS WHERE OBJECT_NAME = 'RC_DATABASE'; retorne, digamos 10 linhas : OWNER1 OWNER2 OWNER3 OWNER4 OWNER5 OWNER6 OWNER7 OWNER8 OWNER9 OWNER10 vc quer executar um SQL : select name from OWNER1.RC_DATABASE; depois executar : select name from OWNER2.RC_DATABASE; depois executar : select name from OWNER3.RC_DATABASE; assim por diante, né ? Eu pessoalmente, sempre que tenho uma tarefa do tipo (ie, sei EXATAMENTE quais SQLs precisam ser escritos, é possível vc os montar lendo de alguma tabela Oracle E tenho acesso ao sql*plus (ou tools similar que execute scripts) SEMPRE PREFIRO usar a técnica amiga do DBA, que já me salvou a pele N+1! vezes, que é : montar os SQLs numa query E salvar a saída da query num arquivo-texto, que depois executo pelo sql*plus ou o que tiver... Um exemplo : ==> digamos que meus dados estejam assim : SYSTEM:@XE:SQL>SELECT OWNER FROM DBA_OBJECTS WHERE OBJECT_NAME = 'RC_DATABASE'; OWNER BI PM OE SYSTEM:@XE:SQL> ==> tenho portanto que gerar 3 linhas, com a diff única que a parte da string que indica o OWNER vai vir da coluna OWNER do select demonstrado, seria algo tipo : SYSTEM:@XE:SQL>SELECT 'SELECT NAME FROM ' || OWNER || '.rc_database;' FROM DBA_OBJECTS WHERE OBJECT_NAME = 'RC_DATABASE'; ==> DEU PRA PERCEBER que gerei os comandos que queria concatenando a parte fixa com a parte variável que vem da coluna OWNER da conulta anterior ?? Olha como fica o resultado : 'SELECTNAMEFROM'||OWNER||'.RC_DATABASE;' SELECT NAME FROM BI.rc_database; SELECT NAME FROM PM.rc_database; SELECT NAME FROM OE.rc_database; SYSTEM:@XE:SQL> ==> Não é bico de entender ?? Pra mim sim... Agora só preciso que o sql*plus me GRAVE EM DISCO com um nome qualquer e extensão .SQL esse output, quem faz isso é o comando SPOOL... Vou incluir o SPOOL e uns ajustes de tela pra não vir o cabeçalho e coisitas assim : C:\Users\jlchi_000>type gera_script.sql set term off feedback off verify off pages 0 lines 500 trimspool on head off spool pesquisa_names.sql SELECT 'SELECT NAME FROM ' || OWNER || '.rc_database;' FROM DBA_OBJECTS WHERE OBJECT_NAME = 'RC_DATABASE'; exit; ==> vou executar o script gerador pelo sqlplus : C:\Users\jlchi_000>sqlplus system/oracle @gera_script SQL*Plus: Release 11.2.0.2.0 Production Copyright (c) 1982, 2014, Oracle. All rights reserved. Conectado a: Oracle Database 11g Express Edition Release
[oracle_br] Re: Ajuda Codigo PL/SQL
Xô entender melhor a sua situação : num único database Oracle, database esse que é usado como RMAN catalog database, vc tem muitos catálogos, sendo que é um catálogo RMAN pra cada database, é isso ??? E dado o fato que a utiliuzação Normal e Rotineira de um catálogo RMAN é manter dados de backup para Múltiplos Databases (isso é demonstrado Inclusive na Modelagem do catálogo, vc vai ver que as tabelas do catálogo ** TODAS ELAS ** possuem já uma coluna DB_KEY, para que a mesma tabela possa guardar backups de N databases), vc quer Unificar isso, correto ? Muito bem : antes de responder a sua pergunta, deixa eu perguntar - vc precisa guardar os dados hoje armazenados nesses catálogos, transportando-os como estão para o novo catálogo único que vc vai criar ?? Se sim, veja que um catálogo RMAN nada mais é do que uma série de tabelas Oracle que pertencem a um dado schema/usuário Oracle qualquer : hoje, se vc tem no seu banco de catálogo digamos 30 catalogs vc tem nesse banco de catálogo 30 schemas, um schema que é owner do catálogo1, um schema que é owner do catálogo2, um schema que é owner do catálogo3, assim por diante... SE todos esses catálogos são da MESMA EXATA VERSÃO, as tabelas que compõem esses catálogos VÃO SER ABSOLUTA E COMPLETAMENTE IGUAIS em termos de estrutura, com as colunas e constraints COMPLETAMENTE IGUAIZINHAS, só os dados dentro de cada tabela é que mudam... SENDO ASSIM, E SE realmente os dados anteriores não podem ser perdidos, não faz sentido vc partir pra bloco PL/SQL anônimo : simplesmente crie o repositório unificado vazio (com o comando de CREATE CATALOG) num schema novo (chamado REP_UNIF, digamos), faça um EXPORT via datapump apenas com os dados (ie, SEM pedir pra criar tabelas!!) de cada schema owner, depois faça import pedindo pros mover os dados que originalmente pertenciam ao schema original para o schema REP_UNIF, isso se faz com REMAP_SCHEMA Agora sim, respondendo a sua pergunta : ao que entendi, se (digamos) a tua consulta principal : SELECT OWNER FROM DBA_OBJECTS WHERE OBJECT_NAME = 'RC_DATABASE'; retorne, digamos 10 linhas : OWNER1 OWNER2 OWNER3 OWNER4 OWNER5 OWNER6 OWNER7 OWNER8 OWNER9 OWNER10 vc quer executar um SQL : select name from OWNER1.RC_DATABASE; depois executar : select name from OWNER2.RC_DATABASE; depois executar : select name from OWNER3.RC_DATABASE; assim por diante, né ? Eu pessoalmente, sempre que tenho uma tarefa do tipo (ie, sei EXATAMENTE quais SQLs precisam ser escritos, é possível vc os montar lendo de alguma tabela Oracle E tenho acesso ao sql*plus (ou tools similar que execute scripts) SEMPRE PREFIRO usar a técnica amiga do DBA, que já me salvou a pele N+1! vezes, que é : montar os SQLs numa query E salvar a saída da query num arquivo-texto, que depois executo pelo sql*plus ou o que tiver... Um exemplo : ==> digamos que meus dados estejam assim : SYSTEM:@XE:SQL>SELECT OWNER FROM DBA_OBJECTS WHERE OBJECT_NAME = 'RC_DATABASE'; OWNER BI PM OE SYSTEM:@XE:SQL> ==> tenho portanto que gerar 3 linhas, com a diff única que a parte da string que indica o OWNER vai vir da coluna OWNER do select demonstrado, seria algo tipo : SYSTEM:@XE:SQL>SELECT 'SELECT NAME FROM ' || OWNER || '.rc_database;' FROM DBA_OBJECTS WHERE OBJECT_NAME = 'RC_DATABASE'; ==> DEU PRA PERCEBER que gerei os comandos que queria concatenando a parte fixa com a parte variável que vem da coluna OWNER da conulta anterior ?? Olha como fica o resultado : 'SELECTNAMEFROM'||OWNER||'.RC_DATABASE;' SELECT NAME FROM BI.rc_database; SELECT NAME FROM PM.rc_database; SELECT NAME FROM OE.rc_database; SYSTEM:@XE:SQL> ==> Não é bico de entender ?? Pra mim sim... Agora só preciso que o sql*plus me GRAVE EM DISCO com um nome qualquer e extensão .SQL esse output, quem faz isso é o comando SPOOL... Vou incluir o SPOOL e uns ajustes de tela pra não vir o cabeçalho e coisitas assim : C:\Users\jlchi_000>type gera_script.sql set term off feedback off verify off pages 0 lines 500 trimspool on head off spool pesquisa_names.sql SELECT 'SELECT NAME FROM ' || OWNER || '.rc_database;' FROM DBA_OBJECTS WHERE OBJECT_NAME = 'RC_DATABASE'; exit; ==> vou executar o script gerador pelo sqlplus : C:\Users\jlchi_000>sqlplus system/oracle @gera_script SQL*Plus: Release 11.2.0.2.0 Production Copyright (c) 1982, 2014, Oracle. All rights reserved. Conectado a: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production Desconectado de Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production C:\Users\jlchi_000> ==> ÓIA só a lista dos comandos que eu preciso executar gerada pra mim sozinha : C:\Users\jlchi_000>type pesquisa_names.sql SELECT NAME FROM BI.rc_database; SELECT NAME FROM PM.rc_database; SELECT NAME FROM OE.rc_database; C:\Users\jlchi_000> ==> Pronto, executo essa lista de comandos numa tool qualquer (copiando e colando, o
Re: [oracle_br] Tamanho do Archives Log
Certamente é algum erro... No inicio desse ano (eu estava de ferias) vi uma situacao parecida, só que no sql server Por causa de um erro em uma procedure, o log gerado pela transacao era de quase 100 gb por dia, que nao era o normal tambem, porque havia um estoque zerado e o programa tava se perdendo... enfim Nossa sorte, era que a mesma foi desenvolvida internamente, então foi facil resolver, tivesse que depender de suporte externo, ia demorar um pouco mais 2018-01-18 12:21 GMT-02:00 Rodrigo Mufalani rodr...@mufalani.com.br [oracle_br] : > > > Boa tarde, > > > >Gerar redo (consequentemente archivelog) é um comportamento do banco de > dados. Nesse caso, você deve investigar a(s) rotina(s)/processo(s) que > estão gerando mais redo no seu banco de dados e solicitar ajuste junto ao > fornecedor do apps. Muito provável que haja algum processo problemático > para gerar 400GB de redo em um bd com 500GB. > > > > Atenciosamente, > > Rodrigo Mufalani > > > > > > *De: * em nome de "Alessandro Lúcio > Cordeiro da Silva alecordeirosi...@yahoo.com.br [oracle_br]" < > oracle_br@yahoogrupos.com.br> > *Responder para: *"oracle_br@yahoogrupos.com.br" < > oracle_br@yahoogrupos.com.br> > *Data: *quinta-feira, 18 de janeiro de 2018 12:03 > *Para: *Yahoo! Brazil > *Assunto: *[oracle_br] Tamanho do Archives Log > > > > > > Bom dia a todos, > > > > Eu tomo conta de um banco de dados Oracle 12.2.0.1 em Oracle Linux 6.5, > neste banco é para aplicação Protheus. > > Nestes últimos meses ocorreram duas migrações, uma do Banco que era > Windows e foi para Linux e outra da aplicação Protheus que foi da versão > 11 para 12. > > > > O Banco tem cerca de 500 gigas, porem por estes dias o banco gera mais de > 400 gigas de archives por dia, o que deu um salto muito alto, antes gerava > cerca de 4 a 5 gigas. > > Alguem tem alguma ideia do porque disso? A solução (gerar menos archives) > é somente a nivel de aplicação ou tem algo a nivel de banco a ser feito? > > > > Obrigado! > > >
[oracle_br] Ajuda Codigo PL/SQL
Pessoal, boa tarde. Estou aqui pedindo a ajuda de vocês para criar um bloco pl/sql anonimo.. Eu tenho um cliente que possui um catalogo de recuperacao para cada database e vamos unificar todos os bancos em um unico catalogo. Eu fiz a seguinte consulta para identificar os owners: SELECT OWNER FROM DBA_OBJECTS WHERE OBJECT_NAME = 'RC_DATABASE'; Com isso, eu tenho os owners dos catalogos que serao dropados futuramente, mas antes disso, eu preciso saber quais sao os bancos registrados em cada um desses catalogos, consultando: select name from .RC_DATABASE; -- colocando os owners obs: lembrando que alguns registros retornam 0 linhas (no rows selected). Entao eu queria iria criar uma tabela para guardar os nomes dos bancos, seria mais ou menos assim o algoritmo: Declare v_owner varchar2(50);v_name varchar2(50);cursor c1 is select ownerinto v_ownerFROM DBA_OBJECTS WHERE OBJECT_NAME = 'RC_DATABASE'; Begin loop select name into v_name from v_owner.RC_DATABASE; if v_name (tiver alguma linha retornada) insert into registro values (v_name); end loop; End; / Com isso eu teria todos os bancos que eu precisaria registrar no novo e unico catalogo.
Re: [oracle_br] Tamanho do Archives Log
Boa tarde, Gerar redo (consequentemente archivelog) é um comportamento do banco de dados. Nesse caso, você deve investigar a(s) rotina(s)/processo(s) que estão gerando mais redo no seu banco de dados e solicitar ajuste junto ao fornecedor do apps. Muito provável que haja algum processo problemático para gerar 400GB de redo em um bd com 500GB. Atenciosamente, Rodrigo Mufalani De: em nome de "Alessandro Lúcio Cordeiro da Silva alecordeirosi...@yahoo.com.br [oracle_br]" Responder para: "oracle_br@yahoogrupos.com.br" Data: quinta-feira, 18 de janeiro de 2018 12:03 Para: Yahoo! Brazil Assunto: [oracle_br] Tamanho do Archives Log Bom dia a todos, Eu tomo conta de um banco de dados Oracle 12.2.0.1 em Oracle Linux 6.5, neste banco é para aplicação Protheus. Nestes últimos meses ocorreram duas migrações, uma do Banco que era Windows e foi para Linux e outra da aplicação Protheus que foi da versão 11 para 12. O Banco tem cerca de 500 gigas, porem por estes dias o banco gera mais de 400 gigas de archives por dia, o que deu um salto muito alto, antes gerava cerca de 4 a 5 gigas. Alguem tem alguma ideia do porque disso? A solução (gerar menos archives) é somente a nivel de aplicação ou tem algo a nivel de banco a ser feito? Obrigado!
[oracle_br] Tamanho do Archives Log
Bom dia a todos, Eu tomo conta de um banco de dados Oracle 12.2.0.1 em Oracle Linux 6.5, neste banco é para aplicação Protheus. Nestes últimos meses ocorreram duas migrações, uma do Banco que era Windows e foi para Linux e outra da aplicação Protheus que foi da versão 11 para 12. O Banco tem cerca de 500 gigas, porem por estes dias o banco gera mais de 400 gigas de archives por dia, o que deu um salto muito alto, antes gerava cerca de 4 a 5 gigas. Alguem tem alguma ideia do porque disso? A solução (gerar menos archives) é somente a nivel de aplicação ou tem algo a nivel de banco a ser feito? Obrigado!