RE: [oracle_br] Set Transaction
Esta é a parte principal. Agora eu te pergunto: set transaction use rollback segment RBS_INAD, tem que ser via EXECUTE_IMMEDIATE, ou não importa? Isto porque este comando parece não estar funcionando, pois o segmento de rollback alocado não é o RBS_INAD. Ele pega um dos defaults. Obrigado pela ajuda. Grande abraço. PROCEDURE CARGA_ANALISE_INADIMPLENCIA (p_hora_limite in number) IS PE_PROCESSO VARCHAR2(1000); MENS_ERRO VARCHAR2(400); v_mensagem varchar2(100); ERRO EXCEPTION; BEGIN set transaction use rollback segment RBS_INAD; v_mensagem := null; p_excluir_pedidos_15_dias(v_mensagem); if v_mensagem is not null then mens_erro := 'Erro ao excluir pedidos com mais de 15 dias '||v_mensagem; raise erro; end if; CARGA_DADOS_FINANCEIRO (MENS_ERRO); IF MENS_ERRO IS NOT NULL THEN update SELEC_ANALISE_INADIMPLENCIA set CD_SIT_PEDIDO = 9 where CD_SIT_PEDIDO = 0; commit; set transaction use rollback segment RBS_INAD; RAISE ERRO; END IF; FOR C1 IN ( SELECT S.*,C.* FROM SELEC_ANALISE_INADIMPLENCIA S, CONFIG_ANALISE_INADIMPLENCIA C WHERE CD_SIT_PEDIDO IN (0) order by s.nr_pedido) LOOP if to_number(to_char(sysdate,'hh24mi')) = p_hora_limite then insert into fcbatch values ('ANL_INAD','Ultrapassou Hora Limite '||to_char(p_hora_limite,'0999')||' '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,to_char(sysdate,'dd/mm/yy hh24:mi:ss'),userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment RBS_INAD; exit; end if; insert into fcbatch values ('ANL_INAD',' Fim da execucao do pedido '||c1.nr_pedido||' - '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment RBS_INAD; END LOOP; commit; set transaction use rollback segment RBS_INAD; EXCEPTION WHEN OTHERS THEN MENS_ERRO := 'Erro na procedure CARGA_ANALISE_INADIMPLENCIA - '||SQLERRM; commit; set transaction use rollback segment RBS_INAD; END; -Original Message- From: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] On Behalf Of Júlio César Corrêa Sent: terça-feira, 19 de maio de 2009 22:54 To: oracle_br@yahoogrupos.com.br Subject: Re: [oracle_br] Set Transaction Passa o código ou trecho dele. 2009/5/19 Eduardo Abrantes de Souza eduardo.abran...@fgv.br Cara, o que seria 'Transação autonoma'? Este comando está em uma procedure que faz parte de uma package e é o primeiro comando a ser executado. -Original Message- From: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br[mailto: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br] On Behalf Of Júlio César Corrêa Sent: terça-feira, 19 de maio de 2009 13:05 To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br Subject: Re: [oracle_br] Set Transaction Tem transação autonoma? 2009/5/19 Eduardo Abrantes de Souza eduardo.abran...@fgv.brEduardo.Abrantes%40fgv.br Caros amigos do grupo, Estou com um problema em minha instalação e/ou procedure: Na procedure tenho o seguinte comando: set transaction use rollback segment RBS_INAD. Não é sempre, mas às vezes acontece o seguinte erro: ORA-01453: SET TRANSACTION must be first statement of transaction. E já houve casos que deu o seguinte erro: ORA-01555: snapshot too old: rollback segment number 6 with name R05 too small. Sendo assim, gostaria de saber se existe alguma maneira dentro da procedure de confirmar se o segmento de rollback foi realmente setado, pois a aplicação está usando, em algumas execuções, o segmento de rollback default. Qual seria a melhor maneira de se realizar esta operação com segurança? Grande abraço a todos. [As partes desta mensagem que não continham texto foram removidas] -- Júlio César Corrêa IS Technologist - Oracle DBA www.dbajccorrea.com To stay competitive in the tech industry, never stop learning. Always be on the lookout for better ways of doing things and new technologies. Our industry does not reward people who let themselves stagnate -John Hall, Senior Vice President, Oracle University [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 -- Júlio
Re: [oracle_br] Set Transaction
Eduardo Qual a versão do Oracle? [ ] André 2009/5/20 Eduardo Abrantes de Souza eduardo.abran...@fgv.br Esta é a parte principal. Agora eu te pergunto: set transaction use rollback segment RBS_INAD, tem que ser via EXECUTE_IMMEDIATE, ou não importa? Isto porque este comando parece não estar funcionando, pois o segmento de rollback alocado não é o RBS_INAD. Ele pega um dos defaults. Obrigado pela ajuda. Grande abraço. PROCEDURE CARGA_ANALISE_INADIMPLENCIA (p_hora_limite in number) IS PE_PROCESSO VARCHAR2(1000); MENS_ERRO VARCHAR2(400); v_mensagem varchar2(100); ERRO EXCEPTION; BEGIN set transaction use rollback segment RBS_INAD; v_mensagem := null; p_excluir_pedidos_15_dias(v_mensagem); if v_mensagem is not null then mens_erro := 'Erro ao excluir pedidos com mais de 15 dias '||v_mensagem; raise erro; end if; CARGA_DADOS_FINANCEIRO (MENS_ERRO); IF MENS_ERRO IS NOT NULL THEN update SELEC_ANALISE_INADIMPLENCIA set CD_SIT_PEDIDO = 9 where CD_SIT_PEDIDO = 0; commit; set transaction use rollback segment RBS_INAD; RAISE ERRO; END IF; FOR C1 IN ( SELECT S.*,C.* FROM SELEC_ANALISE_INADIMPLENCIA S, CONFIG_ANALISE_INADIMPLENCIA C WHERE CD_SIT_PEDIDO IN (0) order by s.nr_pedido) LOOP if to_number(to_char(sysdate,'hh24mi')) = p_hora_limite then insert into fcbatch values ('ANL_INAD','Ultrapassou Hora Limite '||to_char(p_hora_limite,'0999')||' '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,to_char(sysdate,'dd/mm/yy hh24:mi:ss'),userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment RBS_INAD; exit; end if; insert into fcbatch values ('ANL_INAD',' Fim da execucao do pedido '||c1.nr_pedido||' - '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment RBS_INAD; END LOOP; commit; set transaction use rollback segment RBS_INAD; EXCEPTION WHEN OTHERS THEN MENS_ERRO := 'Erro na procedure CARGA_ANALISE_INADIMPLENCIA - '||SQLERRM; commit; set transaction use rollback segment RBS_INAD; END; -Original Message- From: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br[mailto: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br] On Behalf Of Júlio César Corrêa Sent: terça-feira, 19 de maio de 2009 22:54 To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br Subject: Re: [oracle_br] Set Transaction Passa o código ou trecho dele. 2009/5/19 Eduardo Abrantes de Souza eduardo.abran...@fgv.brEduardo.Abrantes%40fgv.br Cara, o que seria 'Transação autonoma'? Este comando está em uma procedure que faz parte de uma package e é o primeiro comando a ser executado. -Original Message- From: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br[mailto: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br] On Behalf Of Júlio César Corrêa Sent: terça-feira, 19 de maio de 2009 13:05 To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br Subject: Re: [oracle_br] Set Transaction Tem transação autonoma? 2009/5/19 Eduardo Abrantes de Souza eduardo.abran...@fgv.brEduardo.Abrantes%40fgv.br Eduardo.Abrantes%40fgv.br Caros amigos do grupo, Estou com um problema em minha instalação e/ou procedure: Na procedure tenho o seguinte comando: set transaction use rollback segment RBS_INAD. Não é sempre, mas às vezes acontece o seguinte erro: ORA-01453: SET TRANSACTION must be first statement of transaction. E já houve casos que deu o seguinte erro: ORA-01555: snapshot too old: rollback segment number 6 with name R05 too small. Sendo assim, gostaria de saber se existe alguma maneira dentro da procedure de confirmar se o segmento de rollback foi realmente setado, pois a aplicação está usando, em algumas execuções, o segmento de rollback default. Qual seria a melhor maneira de se realizar esta operação com segurança? Grande abraço a todos. [As partes desta mensagem que não continham texto foram removidas] -- Júlio César Corrêa IS Technologist - Oracle DBA www.dbajccorrea.com To stay competitive in the tech industry, never stop learning. Always be on the lookout for better ways of doing things and new technologies. Our industry does not reward people who let themselves stagnate -John Hall, Senior Vice President, Oracle University [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 »
RE: [oracle_br] Set Transaction
8.1.7.4.0 From: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] On Behalf Of Andre Santos Sent: quarta-feira, 20 de maio de 2009 10:14 To: oracle_br@yahoogrupos.com.br Subject: Re: [oracle_br] Set Transaction Eduardo Qual a versão do Oracle? [ ] André 2009/5/20 Eduardo Abrantes de Souza eduardo.abran...@fgv.br mailto:Eduardo.Abrantes%40fgv.br Esta é a parte principal. Agora eu te pergunto: set transaction use rollback segment RBS_INAD, tem que ser via EXECUTE_IMMEDIATE, ou não importa? Isto porque este comando parece não estar funcionando, pois o segmento de rollback alocado não é o RBS_INAD. Ele pega um dos defaults. Obrigado pela ajuda. Grande abraço. PROCEDURE CARGA_ANALISE_INADIMPLENCIA (p_hora_limite in number) IS PE_PROCESSO VARCHAR2(1000); MENS_ERRO VARCHAR2(400); v_mensagem varchar2(100); ERRO EXCEPTION; BEGIN set transaction use rollback segment RBS_INAD; v_mensagem := null; p_excluir_pedidos_15_dias(v_mensagem); if v_mensagem is not null then mens_erro := 'Erro ao excluir pedidos com mais de 15 dias '||v_mensagem; raise erro; end if; CARGA_DADOS_FINANCEIRO (MENS_ERRO); IF MENS_ERRO IS NOT NULL THEN update SELEC_ANALISE_INADIMPLENCIA set CD_SIT_PEDIDO = 9 where CD_SIT_PEDIDO = 0; commit; set transaction use rollback segment RBS_INAD; RAISE ERRO; END IF; FOR C1 IN ( SELECT S.*,C.* FROM SELEC_ANALISE_INADIMPLENCIA S, CONFIG_ANALISE_INADIMPLENCIA C WHERE CD_SIT_PEDIDO IN (0) order by s.nr_pedido) LOOP if to_number(to_char(sysdate,'hh24mi')) = p_hora_limite then insert into fcbatch values ('ANL_INAD','Ultrapassou Hora Limite '||to_char(p_hora_limite,'0999')||' '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,to_char(sysdate,'dd/mm/yy hh24:mi:ss'),userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment RBS_INAD; exit; end if; insert into fcbatch values ('ANL_INAD',' Fim da execucao do pedido '||c1.nr_pedido||' - '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment RBS_INAD; END LOOP; commit; set transaction use rollback segment RBS_INAD; EXCEPTION WHEN OTHERS THEN MENS_ERRO := 'Erro na procedure CARGA_ANALISE_INADIMPLENCIA - '||SQLERRM; commit; set transaction use rollback segment RBS_INAD; END; -Original Message- From: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br oracle_br%40yahoogrupos.com.br[mailto: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br oracle_br%40yahoogrupos.com.br] On Behalf Of Júlio César Corrêa Sent: terça-feira, 19 de maio de 2009 22:54 To: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br oracle_br%40yahoogrupos.com.br Subject: Re: [oracle_br] Set Transaction Passa o código ou trecho dele. 2009/5/19 Eduardo Abrantes de Souza eduardo.abran...@fgv.br mailto:Eduardo.Abrantes%40fgv.br Eduardo.Abrantes%40fgv.br Cara, o que seria 'Transação autonoma'? Este comando está em uma procedure que faz parte de uma package e é o primeiro comando a ser executado. -Original Message- From: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br[mailto: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br] On Behalf Of Júlio César Corrêa Sent: terça-feira, 19 de maio de 2009 13:05 To: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br Subject: Re: [oracle_br] Set Transaction Tem transação autonoma? 2009/5/19 Eduardo Abrantes de Souza eduardo.abran...@fgv.br mailto:Eduardo.Abrantes%40fgv.br Eduardo.Abrantes%40fgv.br Eduardo.Abrantes%40fgv.br Caros amigos do grupo, Estou com um problema em minha instalação e/ou procedure: Na procedure tenho o seguinte comando: set transaction use rollback segment RBS_INAD. Não é sempre, mas às vezes acontece o seguinte erro: ORA-01453: SET TRANSACTION must be first statement of transaction. E já houve casos que deu o seguinte erro: ORA-01555: snapshot too old: rollback segment number 6 with name R05 too small. Sendo assim, gostaria de saber se existe alguma maneira dentro da procedure de confirmar se o segmento de rollback foi realmente setado, pois a aplicação está usando, em algumas execuções, o segmento de rollback default. Qual seria a melhor maneira de se realizar esta operação com segurança? Grande abraço a todos. [As partes desta mensagem que não continham texto foram removidas] -- Júlio César Corrêa IS Technologist - Oracle DBA www.dbajccorrea.com To stay competitive in the tech industry, never stop learning. Always be on the lookout for better ways of
[oracle_br] Re: Set Transaction
Colega, deixa eu me meter aí, vamos dar uns palpites : não, não tem NADA a ver usra o SET TRANSACTION num EXECUTE IMMEDIATE, ele é totalmente aceito em PL/SQL. Uma coisa que pode estar pegando é que essse comando TEM que ser o primeiro DA TRANSAÇÃO, e não o primeiro DA PROCEDURE. Quero dizer o seguinte : imagine que eu acabei de conectar no banco, faço uns SELECTs apenas, coisa e tal, e executo a tua procedure CARGA_ANALISE_INADIMPLENCIA : como não tenho nada pendente, não tenho INSERT/UPDATE/DELETE pendente (ou seja, não TRANSAÇÂO aberta) o cara funciona. OK, imagine agora que em outra sessão antes de executar a tua procedure eu fiz outras coisas, chamei outras rotinas que fazem DMLs - nesse instante eu executo a CARGA_ANALISE_INADIMPLENCIA, como JÁ TENHO outros INSERTs/UPDATE/DELETEs pendentes, eu JÁ TENHO transação aberta, o SET TRANSACION ** não ** está sendo executado como o primeiro comando da transação, ele NÂO VAI funcionar Será que pode ser isso o seu problema ?? Algo me diz que sim... E é claro : a maneira correta e recomendável de se trabalhar é : se vc sabe que precisará de x bytes de rollback, *** SEMPRE *** deveria se ter TODOS os segmentos de rollback com o MESMO tamanho, aí qualquer um é qualquer um, E preferencialmente se usar undo automático, SE a sua versão (que vc NÃO DIZ qual é, pra variar) suporta... Esse negócio de tentar ficar fazendo economia de feijõezinhos no tamanho da tablespace de rollback/undo quase NUNCA dá certo, e quase sempre dá é prejuízo, crie do tamanho que é preciso e be happy... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Eduardo Abrantes de Souza eduardo.abran...@... escreveu Esta é a parte principal. Agora eu te pergunto: set transaction use rollback segment RBS_INAD, tem que ser via EXECUTE_IMMEDIATE, ou não importa? Isto porque este comando parece não estar funcionando, pois o segmento de rollback alocado não é o RBS_INAD. Ele pega um dos defaults. Obrigado pela ajuda. Grande abraço. PROCEDURE CARGA_ANALISE_INADIMPLENCIA (p_hora_limite in number) IS PE_PROCESSO VARCHAR2(1000); MENS_ERRO VARCHAR2(400); v_mensagem varchar2(100); ERRO EXCEPTION; BEGIN set transaction use rollback segment RBS_INAD; v_mensagem := null; p_excluir_pedidos_15_dias(v_mensagem); if v_mensagem is not null then mens_erro := 'Erro ao excluir pedidos com mais de 15 dias '||v_mensagem; raise erro; end if; CARGA_DADOS_FINANCEIRO (MENS_ERRO); IF MENS_ERRO IS NOT NULL THEN update SELEC_ANALISE_INADIMPLENCIA set CD_SIT_PEDIDO = 9 where CD_SIT_PEDIDO = 0; commit; set transaction use rollback segment RBS_INAD; RAISE ERRO; END IF; FOR C1 IN ( SELECT S.*,C.* FROM SELEC_ANALISE_INADIMPLENCIA S, CONFIG_ANALISE_INADIMPLENCIA C WHERE CD_SIT_PEDIDO IN (0) order by s.nr_pedido) LOOP if to_number(to_char(sysdate,'hh24mi')) = p_hora_limite then insert into fcbatch values ('ANL_INAD','Ultrapassou Hora Limite '||to_char(p_hora_limite,'0999')||' '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,to_char(sysdate,'dd/mm/yy hh24:mi:ss'),userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment RBS_INAD; exit; end if; insert into fcbatch values ('ANL_INAD',' Fim da execucao do pedido '||c1.nr_pedido||' - '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment RBS_INAD; END LOOP; commit; set transaction use rollback segment RBS_INAD; EXCEPTION WHEN OTHERS THEN MENS_ERRO := 'Erro na procedure CARGA_ANALISE_INADIMPLENCIA - '||SQLERRM; commit; set transaction use rollback segment RBS_INAD; END; -Original Message- From: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] On Behalf Of Júlio César Corrêa Sent: terça-feira, 19 de maio de 2009 22:54 To: oracle_br@yahoogrupos.com.br Subject: Re: [oracle_br] Set Transaction Passa o código ou trecho dele. 2009/5/19 Eduardo Abrantes de Souza eduardo.abran...@... Cara, o que seria 'Transação autonoma'? Este comando está em uma procedure que faz parte de uma package e é o primeiro comando a ser executado. -Original Message- From: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br[mailto: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br] On Behalf Of Júlio César Corrêa Sent: terça-feira, 19 de maio de 2009 13:05 To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br Subject: Re: [oracle_br] Set Transaction Tem transação autonoma? 2009/5/19 Eduardo Abrantes de Souza eduardo.abran...@...Eduardo.Abrantes%40fgv.br Caros amigos do grupo, Estou com um problema em minha instalação e/ou procedure: Na procedure tenho
Re: [oracle_br] Re: Set Transaction
Concordo com o Chiappa. Detalhe o SET TRANSACTION tem que ser o primeiro comando da transação. Outros: - O Oracle abre uma transação com um DML e termina a transação com Commit ou Rollback. - A transação é independente de bloco. - Multiplas transações podem estar em um unico bloco.(No seu caso acontece isso,você faz DML e logo após faz commit,faz dml,faz commit). Você não tem transação autonoma que poderia ser o problema,tipo você especifica um rollback segment e abre uma transação autonoma,esta nova transação é independente portanto não usaria mesmo o Rollback segment. Sobre o erro ORA-01555 é como o Chiappa falou comfigure um tamanho ideal para você e be happy. Fique de olho se você não chama outra procedure e esta abre outras transações sem o uso do rollback segment que você quer. Abs, 2009/5/20 jlchiappa jlchia...@yahoo.com.br Colega, deixa eu me meter aí, vamos dar uns palpites : não, não tem NADA a ver usra o SET TRANSACTION num EXECUTE IMMEDIATE, ele é totalmente aceito em PL/SQL. Uma coisa que pode estar pegando é que essse comando TEM que ser o primeiro DA TRANSAÇÃO, e não o primeiro DA PROCEDURE. Quero dizer o seguinte : imagine que eu acabei de conectar no banco, faço uns SELECTs apenas, coisa e tal, e executo a tua procedure CARGA_ANALISE_INADIMPLENCIA : como não tenho nada pendente, não tenho INSERT/UPDATE/DELETE pendente (ou seja, não TRANSAÇÂO aberta) o cara funciona. OK, imagine agora que em outra sessão antes de executar a tua procedure eu fiz outras coisas, chamei outras rotinas que fazem DMLs - nesse instante eu executo a CARGA_ANALISE_INADIMPLENCIA, como JÁ TENHO outros INSERTs/UPDATE/DELETEs pendentes, eu JÁ TENHO transação aberta, o SET TRANSACION ** não ** está sendo executado como o primeiro comando da transação, ele NÂO VAI funcionar Será que pode ser isso o seu problema ?? Algo me diz que sim... E é claro : a maneira correta e recomendável de se trabalhar é : se vc sabe que precisará de x bytes de rollback, *** SEMPRE *** deveria se ter TODOS os segmentos de rollback com o MESMO tamanho, aí qualquer um é qualquer um, E preferencialmente se usar undo automático, SE a sua versão (que vc NÃO DIZ qual é, pra variar) suporta... Esse negócio de tentar ficar fazendo economia de feijõezinhos no tamanho da tablespace de rollback/undo quase NUNCA dá certo, e quase sempre dá é prejuízo, crie do tamanho que é preciso e be happy... []s Chiappa --- Em oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br, Eduardo Abrantes de Souza eduardo.abran...@... escreveu Esta é a parte principal. Agora eu te pergunto: set transaction use rollback segment RBS_INAD, tem que ser via EXECUTE_IMMEDIATE, ou não importa? Isto porque este comando parece não estar funcionando, pois o segmento de rollback alocado não é o RBS_INAD. Ele pega um dos defaults. Obrigado pela ajuda. Grande abraço. PROCEDURE CARGA_ANALISE_INADIMPLENCIA (p_hora_limite in number) IS PE_PROCESSO VARCHAR2(1000); MENS_ERRO VARCHAR2(400); v_mensagem varchar2(100); ERRO EXCEPTION; BEGIN set transaction use rollback segment RBS_INAD; v_mensagem := null; p_excluir_pedidos_15_dias(v_mensagem); if v_mensagem is not null then mens_erro := 'Erro ao excluir pedidos com mais de 15 dias '||v_mensagem; raise erro; end if; CARGA_DADOS_FINANCEIRO (MENS_ERRO); IF MENS_ERRO IS NOT NULL THEN update SELEC_ANALISE_INADIMPLENCIA set CD_SIT_PEDIDO = 9 where CD_SIT_PEDIDO = 0; commit; set transaction use rollback segment RBS_INAD; RAISE ERRO; END IF; FOR C1 IN ( SELECT S.*,C.* FROM SELEC_ANALISE_INADIMPLENCIA S, CONFIG_ANALISE_INADIMPLENCIA C WHERE CD_SIT_PEDIDO IN (0) order by s.nr_pedido) LOOP if to_number(to_char(sysdate,'hh24mi')) = p_hora_limite then insert into fcbatch values ('ANL_INAD','Ultrapassou Hora Limite '||to_char(p_hora_limite,'0999')||' '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,to_char(sysdate,'dd/mm/yy hh24:mi:ss'),userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment RBS_INAD; exit; end if; insert into fcbatch values ('ANL_INAD',' Fim da execucao do pedido '||c1.nr_pedido||' - '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment RBS_INAD; END LOOP; commit; set transaction use rollback segment RBS_INAD; EXCEPTION WHEN OTHERS THEN MENS_ERRO := 'Erro na procedure CARGA_ANALISE_INADIMPLENCIA - '||SQLERRM; commit; set transaction use rollback segment RBS_INAD; END; -Original Message- From: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br[mailto: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br] On Behalf Of Júlio César Corrêa Sent: terça-feira, 19 de maio de 2009 22:54 To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br Subject: Re: [oracle_br] Set Transaction Passa o código ou trecho dele.
RE: [oracle_br] Re: Set Transaction
Valeu, amigos. Com estes dados e mais uma bateria de testes acho que vou conseguir acertar. Chiappa, realmente, com ou sem execute immediate o segmento de rollback é setado (Fiz uma procedure de teste). O que deve estar acontecendo é a chamada de outras procedures ou funções e ai o segmento deve se alterar ou perder/desfazer o ponteiro feito no set transaction. Estamos juntos!!! -Original Message- From: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] On Behalf Of Júlio César Corrêa Sent: quarta-feira, 20 de maio de 2009 11:23 To: oracle_br@yahoogrupos.com.br Subject: Re: [oracle_br] Re: Set Transaction Concordo com o Chiappa. Detalhe o SET TRANSACTION tem que ser o primeiro comando da transação. Outros: - O Oracle abre uma transação com um DML e termina a transação com Commit ou Rollback. - A transação é independente de bloco. - Multiplas transações podem estar em um unico bloco.(No seu caso acontece isso,você faz DML e logo após faz commit,faz dml,faz commit). Você não tem transação autonoma que poderia ser o problema,tipo você especifica um rollback segment e abre uma transação autonoma,esta nova transação é independente portanto não usaria mesmo o Rollback segment. Sobre o erro ORA-01555 é como o Chiappa falou comfigure um tamanho ideal para você e be happy. Fique de olho se você não chama outra procedure e esta abre outras transações sem o uso do rollback segment que você quer. Abs, 2009/5/20 jlchiappa jlchia...@yahoo.com.br Colega, deixa eu me meter aí, vamos dar uns palpites : não, não tem NADA a ver usra o SET TRANSACTION num EXECUTE IMMEDIATE, ele é totalmente aceito em PL/SQL. Uma coisa que pode estar pegando é que essse comando TEM que ser o primeiro DA TRANSAÇÃO, e não o primeiro DA PROCEDURE. Quero dizer o seguinte : imagine que eu acabei de conectar no banco, faço uns SELECTs apenas, coisa e tal, e executo a tua procedure CARGA_ANALISE_INADIMPLENCIA : como não tenho nada pendente, não tenho INSERT/UPDATE/DELETE pendente (ou seja, não TRANSAÇÂO aberta) o cara funciona. OK, imagine agora que em outra sessão antes de executar a tua procedure eu fiz outras coisas, chamei outras rotinas que fazem DMLs - nesse instante eu executo a CARGA_ANALISE_INADIMPLENCIA, como JÁ TENHO outros INSERTs/UPDATE/DELETEs pendentes, eu JÁ TENHO transação aberta, o SET TRANSACION ** não ** está sendo executado como o primeiro comando da transação, ele NÂO VAI funcionar Será que pode ser isso o seu problema ?? Algo me diz que sim... E é claro : a maneira correta e recomendável de se trabalhar é : se vc sabe que precisará de x bytes de rollback, *** SEMPRE *** deveria se ter TODOS os segmentos de rollback com o MESMO tamanho, aí qualquer um é qualquer um, E preferencialmente se usar undo automático, SE a sua versão (que vc NÃO DIZ qual é, pra variar) suporta... Esse negócio de tentar ficar fazendo economia de feijõezinhos no tamanho da tablespace de rollback/undo quase NUNCA dá certo, e quase sempre dá é prejuízo, crie do tamanho que é preciso e be happy... []s Chiappa --- Em oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br, Eduardo Abrantes de Souza eduardo.abran...@... escreveu Esta é a parte principal. Agora eu te pergunto: set transaction use rollback segment RBS_INAD, tem que ser via EXECUTE_IMMEDIATE, ou não importa? Isto porque este comando parece não estar funcionando, pois o segmento de rollback alocado não é o RBS_INAD. Ele pega um dos defaults. Obrigado pela ajuda. Grande abraço. PROCEDURE CARGA_ANALISE_INADIMPLENCIA (p_hora_limite in number) IS PE_PROCESSO VARCHAR2(1000); MENS_ERRO VARCHAR2(400); v_mensagem varchar2(100); ERRO EXCEPTION; BEGIN set transaction use rollback segment RBS_INAD; v_mensagem := null; p_excluir_pedidos_15_dias(v_mensagem); if v_mensagem is not null then mens_erro := 'Erro ao excluir pedidos com mais de 15 dias '||v_mensagem; raise erro; end if; CARGA_DADOS_FINANCEIRO (MENS_ERRO); IF MENS_ERRO IS NOT NULL THEN update SELEC_ANALISE_INADIMPLENCIA set CD_SIT_PEDIDO = 9 where CD_SIT_PEDIDO = 0; commit; set transaction use rollback segment RBS_INAD; RAISE ERRO; END IF; FOR C1 IN ( SELECT S.*,C.* FROM SELEC_ANALISE_INADIMPLENCIA S, CONFIG_ANALISE_INADIMPLENCIA C WHERE CD_SIT_PEDIDO IN (0) order by s.nr_pedido) LOOP if to_number(to_char(sysdate,'hh24mi')) = p_hora_limite then insert into fcbatch values ('ANL_INAD','Ultrapassou Hora Limite '||to_char(p_hora_limite,'0999')||' '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,to_char(sysdate,'dd/mm/yy hh24:mi:ss'),userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment RBS_INAD; exit; end if; insert into fcbatch values ('ANL_INAD',' Fim da execucao do pedido '||c1.nr_pedido||' - '||to_char(sysdate,'dd/mm/yy hh24:mi:ss'),to_char(sysdate,'dd/mm/yy hh24:mi:ss'),NULL,userenv('SESSIONID'),SYSDATE); commit; set transaction use rollback segment
Re: [oracle_br] Como mover spfile no RAC
Faça o seguinte como você já tem o pfile, criei o spfile no disco local certo? Depois utilize a DBMS - DBMS_FILE_TRANSFER e jogue o mesmo dentro do ASM. Segue link: http://www.oracle-base.com/articles/10g/FileTransfer10g.php - Original Message - From: Alexandre Anselmo To: oracle_br@yahoogrupos.com.br Sent: Wednesday, May 20, 2009 2:20 PM Subject: [oracle_br] Como mover spfile no RAC Pessoal, mais uma bronquinha com essa maravilha que é o RAC. Precisei criar uma segunda instancia no meu RAC mas o dbca colocou o spfile em um datagroup diferente do que se econtra o spfile da primeira instancia. Estou precisando mover este spfile para o local correto mas estou tendo muitas dificuldades. 1 - Criei o pfile a partir do spfile para o filesystem 2- dei um srvctl stop database -d db; 3- dei startup no banco em estado no mount usando o init criado 4 - tento criar o spfile para o novo datagroup mas nao consigo * quando faco create spfile='+ASMADM' from pfile=/u01/app/oracle/admin/db/scripts/init_new.ora' o comando fica travado e nao cria o arquivo e nem da erro. Fica la um tempao e tenho que matar o processo na mao. ** quando faco create spfile='+ASMADM/db/spfiledb.ora' from pfile=/u01/app/oracle/admin/db/scripts/init_new.ora' recebo o erro: ERROR at line 1: ORA-01078: failure in processing system parameters ORA-17502: ksfdcre:4 Failed to create file +ASMADM/db ORA-15056: additional error message ORA-17502: ksfdcre:4 Failed to create file +ASMADM/db ORA-15005: name db is already used by an existing alias ORA-06512: at line 4 Se eu conseguisse criar o spfile iria depois fazer srvctl modify database -d db -p '+ARCH/db/spfiledb.ora' -s open para atualizar o OCR. Alguem ja passou por isso? Estou fazendo aalguma coisa errada? Qualquer ajuda sera bem vinda. Desde ja agradeco. Ats, Alexandre Tenorio. -- O Banco de Dados de Vírus interno expirou. Verificado por AVG - http://www.avgbrasil.com.br Versão: 8.0.233 / Banco de dados de vírus: 270.10.16/1926 - Data de Lançamento: 30/1/2009 17:31 [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] [MBA ORACLE] MBA Sistema de Gestão Empresarial Inte grada em Banco de Dados ORACLE
A Universidade Veiga de Almeida-RJ, vem através deste divulgar seu curso MBA para formação de DBA Oracle. *Objetivo *Este curso se propõe a capacitar o profissional de TI a atuar no ciclo de vida de um projeto de banco de dados Oracle e na sua administração. Seu objetivo especifico é qualificar o profissional para atuar como Administrador de Banco de Dados Oracle (DBA), atuando nas diversas fases, tais como: fases de definição do modelo de dados, da especificação e da implementação do projeto físico e, por fim, da criação do banco de dados Oracle. Aprenda a apoiar a redução de custos e aumentar a produtividade nas empresas. Venha ter um diferencial no mercado de trabalho. *Público-alvo *Profissional de nível superior que exerça ou que possa vir a exercer a função técnica ou de Gestão na Administração de Banco de Dados Oracle. *Programa *Gerenciamento de Projetos PJ Estudo de Processos de Negócio EPN Modelagem Dados ORACLE BD Banco de Dados Oracle 10g: Introdução à Linguagem SQL Banco de Dados Oracle 10g: Programando com PL/SQL Gestão de Projeto e Business Intelligence Metodologia de Pesquisa e Didática do Ensino Superior Banco de Dados Oracle 10g: Administration Workshop I Banco de Dados 10g: Administration Workshop II Oracle Forms Developer 10g: Build Internet Applications e Report Administração, Performance e Otimização do Banco de Dados Oracle Alta disponibilidade da base de dados Oracle 10g Reorganização e definição da base de dados Oracle 10g Programando com PL/SQL Gestão de Projeto e Business Intelligence *Investimento* 18 parcelas de R$ 499,00 *Dia e Horário* Campus Tijuca (Rua Ibituruna, 75) Terças e Quintas, das 18h45min às 21h45min com sábados alternados, das 8h às 13h. *Matriculas abertas *Inicio: *16/06/2009 (Aula Inaugural)* *Coordenação e Contatos *Edson Almeida Junior (ed...@consulting.com.br) Eduardo Pimentel (epimen...@gmail.com) Sérgio Chaves (sergio.cha...@elumini.com.br) *Mais informações * Ligue Viega de Almeida (21) 2574 www.uva.br [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Como mover spfile no RAC
Pessoal, mais uma bronquinha com essa maravilha que é o RAC. Precisei criar uma segunda instancia no meu RAC mas o dbca colocou o spfile em um datagroup diferente do que se econtra o spfile da primeira instancia. Estou precisando mover este spfile para o local correto mas estou tendo muitas dificuldades. 1 - Criei o pfile a partir do spfile para o filesystem 2- dei um srvctl stop database -d db; 3- dei startup no banco em estado no mount usando o init criado 4 - tento criar o spfile para o novo datagroup mas nao consigo * quando faco create spfile='+ASMADM' from pfile=/u01/app/oracle/admin/db/scripts/init_new.ora' o comando fica travado e nao cria o arquivo e nem da erro. Fica la um tempao e tenho que matar o processo na mao. ** quando faco create spfile='+ASMADM/db/spfiledb.ora' from pfile=/u01/app/oracle/admin/db/scripts/init_new.ora' recebo o erro: ERROR at line 1: ORA-01078: failure in processing system parameters ORA-17502: ksfdcre:4 Failed to create file +ASMADM/db ORA-15056: additional error message ORA-17502: ksfdcre:4 Failed to create file +ASMADM/db ORA-15005: name db is already used by an existing alias ORA-06512: at line 4 Se eu conseguisse criar o spfile iria depois fazer srvctl modify database -d db -p '+ARCH/db/spfiledb.ora' -s open para atualizar o OCR. Alguem ja passou por isso? Estou fazendo aalguma coisa errada? Qualquer ajuda sera bem vinda. Desde ja agradeco. Ats, Alexandre Tenorio.