Re: [oracle_br] Re: ORA-01555 - Oracle 12g

2019-10-04 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Blz, espero que a minha resposta tenha Esclarecido um pouco ao menos o 
funcionamento/conceitos do UNDO, demonstrado o porquê da Necessidade dele, 
sugerido enfaticamente adotar o backup real via RMAN, E caso isso não seja 
possível espero ter indicado as Possibilidades de melhoria no procedimento de 
export E no UNDO em si para Minimizar o risco de SNAPHOT TOO OLD

[]s

  Chiappa

Re: [oracle_br] Re: ORA-01555 - Oracle 12g

2019-10-03 Por tôpico eugênio tenório eu_teno...@yahoo.com.br [oracle_br]
 Chiappa, boa tarde!
Muitíssimo obrigado pelas dicas!!! Lhe asseguro, serão de grande valia pra 
nós!!!
Já estamos providenciando os ajustes necessários para a nossa database.
Abração!
Eugênio Tenórioeu_teno...@yahoo.com.br
Em quinta-feira, 3 de outubro de 2019 17:23:04 BRT, jlchia...@yahoo.com..br 
[oracle_br]  escreveu:  
 
     
Seguem as Respostas e Obs :

"Estou ciente do fato de que - principalmente devido à execução de declarações 
SQL muito longas (> 3h) não dá tempo do banco sincronizar os dados da database 
com os dos segmentos de UNDO, e isso causa o erro informado."

==> NÃO, colega, não é bem isso não : pra começo de conversa, não é "dados do 
database que serão sincronizados", nada a ver : o mecanismo é, por EXIGÊNCIA 
fundamental de um RDBMS, quando um SQL terminar ele TEM que enxergar os dados 
os dados EXATAMENTE COMO ESTAVAM no instante em que ele começou, e para 
alcançar isso o RDBMS Oracle, ao começar um DML qualquer (seja INSERT, UPDATE 
ou DELETE),  simplesmente "COPIA" os dados como estavam antes da alteração pra 
uma área "temporária" especial, a chamada ÁREA DE UNDO : aí, quando um SQL 
qualquer que começou antes desse DML que está alterando os dados precisar, ele 
simplesmente vai no UNDO e LÊ esses dados , ok ?? NÃO HÁ SINCRONIZAÇÃO ALGUMA, 
e realmente essa área de undo deve ser entendida como algo "temporário", a ser 
simplesmente DESCARTADO (sem sincronizar coisa alguma, repito!!) 
automaticamentee quando o RDBMS detectar que não há nenhum SQL em execução que 
começou num momento no tempo ANTES do DML alterar os dados... Okdoc ?? Talvez 
vc estivesse pendando no REDO LOG, esse sim contém alterações que TEM que ser 
INTRODUZIDAS nos datafiles, então aí SIM poderíamos falar de SINCRONIZAÇÃO 
entre dados do REDO LOG FILE e dados nos DATAFILES...
 Muito bem, compreendido o mecanismo do UNDO/ROLLBACK, isso logo de cara nos 
traz ao Primeiro Ponto : isso é um mecanismo OBRIGATÓRIO para consistência de 
dados, para que o RDBMS ORACLE ** cumpra ** os ditames da tecnologia de RDBMS, 
que entre outras coisas EXIGEM que um SQL SEMPRE TEM QUE ENXERGAR OS DADOS 
EXATAMENTE COMO ESTAVAM ano momento em que ele começa... Inclusive, o RDBMS 
ORACLE leva isso muito muito a sério, então nele vc pode até mesmo, enquanto 
uma sessão A tá fazendo um SELECT de longa duração, vc APAGAR e COMITAR os 
dados da MESMA TABELA SENDO LIDA em outra sessão B que a sessão A VAI VER OS 
DADOS IGUAZINHOS COMO ESTAVAM... É um pouco diferente de outros SGBDs, onde 
isso não acontece... E já que é algo tão fundamental, NÂO TEM COMO vc 
'desligar' esse mecanismo, não
 O Segundo ponto é : o uso de UNDO sim, depende da duração do SQL mas TAMBÉM 
DEPENDE que haja OUTRAS sessões fazendo DMLs : se teu SQL, como vc diz, dura 3 
horas MAS não há outras sessões fazendo DML nas mesmas exatas tabelas, 
ABSOLUTAMENTE NÃO SERÀ GERADO/USADO UNDO ALGUM... certo ???
 
 ==> Então ESSA é a sua primeira resposta Parcial : se vc quer Minimizar a 
chance de UNDO esgotado, PROGRAME ESSES SQLs LONGOS para horários em que as 
tabelas sendo acessadas não estejam sendo alteradas por outras sessões, OK ?? 
Veja, não é "sem nenhum usuário acessando", é sem nenhum usuário FAZENDO DML 
NAS TABELAS A SEREM USADAS, blz ???
 E outro ponto : vc não diz mas IMAGINO que vc está usando o expdp como se 
fosse um "backup", "backupeando" todo o database ??? Se for isso, UMA das 
vantagens de um backup REAL, feito com RMAN, é JUSTAMENTE A QUE ele trabalha 
copiando BLOCOS DE DADOS DE DATAFILES EM DISCO, ele ABSOLUTAMENTE NÃO USA SQLs 
para obter os dados , portanto é MENOS QUE ZERO a chance de um backup de 
verdade, feito com RMAN, esgotar UNDO E é ** ÓBVIO **, esse "BACKUP" feito 
com export tem ASPAS TOTAIS, é um PSEUDO-BACKUP, já que entre N outros 
problemas, ele NÃO COPIA os dados do SYS/metadados, NÃO permite backup 
incremental... É algo PRIMITIVO e Não SEGURO usar export (seja exp tradicional, 
seja datapump) como um "BACKUP"
 
 ==> Vou continuar respondendo à sua pergunta sobre EXPORT mas PLEASE considere 
com carinho a Hipótese de usar um BACKUP DE VERDADE ao invés de export, 
please...
 
"Para solucionar o erro, foi feito o ajuste da tablespace UNDO:

-- Tablespace UNDOTBS1 --
Ajustada de:
FILE_NAME   MBytes 
--  -
D:\APP\ORACLE\ORADATA\SENIOR\UNDOTBS01.DBF  1024

Para:
FILE_NAME   MBytes 
--  -
D:\APP\ORACLE\ORADATA\SENIOR\UNDOTBS01.DBF  1544

E da retenção de UNDO:

alter system set undo_retention = 7627;
alter tablespace undotbs1 retention guarantee;
"

==> veja, não tem como a gente saber daqui, mas VIA DE REGRA, falando nos dias 
de hoje onde QUALQUER PEN-DRIVE tem dezenas de GBs, sorry mas 1,5 GB de UNDO é 
** risível **, é MUITO MUITO PEQUENO, é muito POUCO para Qualquer ambiente de 
Produção... Como eu disse não dá pra gente daqui de fora saber 

[oracle_br] Re: ORA-01555 - Oracle 12g

2019-10-03 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Seguem as Respostas e Obs :

"Estou ciente do fato de que - principalmente devido à execução de declarações 
SQL muito longas (> 3h) não dá tempo do banco sincronizar os dados da database 
com os dos segmentos de UNDO, e isso causa o erro informado."

==> NÃO, colega, não é bem isso não : pra começo de conversa, não é "dados do 
database que serão sincronizados", nada a ver : o mecanismo é, por EXIGÊNCIA 
fundamental de um RDBMS, quando um SQL terminar ele TEM que enxergar os dados 
os dados EXATAMENTE COMO ESTAVAM no instante em que ele começou, e para 
alcançar isso o RDBMS Oracle, ao começar um DML qualquer (seja INSERT, UPDATE 
ou DELETE),  simplesmente "COPIA" os dados como estavam antes da alteração pra 
uma área "temporária" especial, a chamada ÁREA DE UNDO : aí, quando um SQL 
qualquer que começou antes desse DML que está alterando os dados precisar, ele 
simplesmente vai no UNDO e LÊ esses dados , ok ?? NÃO HÁ SINCRONIZAÇÃO ALGUMA, 
e realmente essa área de undo deve ser entendida como algo "temporário", a ser 
simplesmente DESCARTADO (sem sincronizar coisa alguma, repito!!) 
automaticamentee quando o RDBMS detectar que não há nenhum SQL em execução que 
começou num momento no tempo ANTES do DML alterar os dados... Okdoc ?? Talvez 
vc estivesse pendando no REDO LOG, esse sim contém alterações que TEM que ser 
INTRODUZIDAS nos datafiles, então aí SIM poderíamos falar de SINCRONIZAÇÃO 
entre dados do REDO LOG FILE e dados nos DATAFILES...
 Muito bem, compreendido o mecanismo do UNDO/ROLLBACK, isso logo de cara nos 
traz ao Primeiro Ponto : isso é um mecanismo OBRIGATÓRIO para consistência de 
dados, para que o RDBMS ORACLE ** cumpra ** os ditames da tecnologia de RDBMS, 
que entre outras coisas EXIGEM que um SQL SEMPRE TEM QUE ENXERGAR OS DADOS 
EXATAMENTE COMO ESTAVAM ano momento em que ele começa... Inclusive, o RDBMS 
ORACLE leva isso muito muito a sério, então nele vc pode até mesmo, enquanto 
uma sessão A tá fazendo um SELECT de longa duração, vc APAGAR e COMITAR os 
dados da MESMA TABELA SENDO LIDA em outra sessão B que a sessão A VAI VER OS 
DADOS IGUAZINHOS COMO ESTAVAM... É um pouco diferente de outros SGBDs, onde 
isso não acontece... E já que é algo tão fundamental, NÂO TEM COMO vc 
'desligar' esse mecanismo, não
 O Segundo ponto é : o uso de UNDO sim, depende da duração do SQL mas TAMBÉM 
DEPENDE que haja OUTRAS sessões fazendo DMLs : se teu SQL, como vc diz, dura 3 
horas MAS não há outras sessões fazendo DML nas mesmas exatas tabelas, 
ABSOLUTAMENTE NÃO SERÀ GERADO/USADO UNDO ALGUM... certo ???
 
 ==> Então ESSA é a sua primeira resposta Parcial : se vc quer Minimizar a 
chance de UNDO esgotado, PROGRAME ESSES SQLs LONGOS para horários em que as 
tabelas sendo acessadas não estejam sendo alteradas por outras sessões, OK ?? 
Veja, não é "sem nenhum usuário acessando", é sem nenhum usuário FAZENDO DML 
NAS TABELAS A SEREM USADAS, blz ???
 E outro ponto : vc não diz mas IMAGINO que vc está usando o expdp como se 
fosse um "backup", "backupeando" todo o database ??? Se for isso, UMA das 
vantagens de um backup REAL, feito com RMAN, é JUSTAMENTE A QUE ele trabalha 
copiando BLOCOS DE DADOS DE DATAFILES EM DISCO, ele ABSOLUTAMENTE NÃO USA SQLs 
para obter os dados , portanto é MENOS QUE ZERO a chance de um backup de 
verdade, feito com RMAN, esgotar UNDO E é ** ÓBVIO **, esse "BACKUP" feito 
com export tem ASPAS TOTAIS, é um PSEUDO-BACKUP, já que entre N outros 
problemas, ele NÃO COPIA os dados do SYS/metadados, NÃO permite backup 
incremental... É algo PRIMITIVO e Não SEGURO usar export (seja exp tradicional, 
seja datapump) como um "BACKUP"
 
 ==> Vou continuar respondendo à sua pergunta sobre EXPORT mas PLEASE considere 
com carinho a Hipótese de usar um BACKUP DE VERDADE ao invés de export, 
please...
 
"Para solucionar o erro, foi feito o ajuste da tablespace UNDO:

-- Tablespace UNDOTBS1 --
Ajustada de:
FILE_NAME   MBytes 
--  -
D:\APP\ORACLE\ORADATA\SENIOR\UNDOTBS01.DBF  1024

Para:
FILE_NAME   MBytes 
--  -
D:\APP\ORACLE\ORADATA\SENIOR\UNDOTBS01.DBF  1544

E da retenção de UNDO:

alter system set undo_retention = 7627;
alter tablespace undotbs1 retention guarantee;
"

==> veja, não tem como a gente saber daqui, mas VIA DE REGRA, falando nos dias 
de hoje onde QUALQUER PEN-DRIVE tem dezenas de GBs, sorry mas 1,5 GB de UNDO é 
** risível **, é MUITO MUITO PEQUENO, é muito POUCO para Qualquer ambiente de 
Produção... Como eu disse não dá pra gente daqui de fora saber exatamente 
QUANTO vc está usando, mas eu digo pra vc deixar PELO MENOS UMA DEZENAS DE GBs 
na sua tablespace de UNDO, já de cara bote aí uns 10 ou 15 GB de UNDO , e 
depois vai monitorando o consumo disso
Afinal, de nada adianta vc pedir pra vc reter o UNDO por um LOOONGO tempo se o 
espaço físico se esgotar, o que FACILMENTE PODE ACONTECER