- This topic has 3 replies, 2 voices, and was last updated 3 years, 9 months ago by José Laurindo Chiappa.
-
AuthorPosts
-
15 de fevereiro de 2021 at 6:17 pm #147411maperesParticipant
boa tarde !
estou com um problema em uma tabela, verifiquei através do dbv que o datafile onde a tabela está, possui blocos corrompidos. Executei um select que confirma a tabela como danificada.
se eu rodo um : select count(*) from tabela com a clausula where –> retorna 1 registro
se eu rodo o select * from tabela com a clausula where –> não retorna registro
se eu rodo o select coluna1,coluna2 from tabela com a clausula where –> retorna o registro
alguém ja passou por essa situação ?
Agradeço.
Marco
16 de fevereiro de 2021 at 12:39 pm #147412José Laurindo ChiappaModeratorBlz ? Então, a partir do momento que um dbv (executado corretamente, com o blocksize apropriado, etc) reporta blocos corrompidos num datafile sim, em princípio TUDO de erro pode acontecer…. O procedimento é simples : primeiro, encontrar a CAUSA do erro (pode ser falha em disco, Pode ser falha em memória, PODE ser bug de software – tabnto o software Oracle em si quanto Sistema Operacional, device drivers, etc) , e DEPOIS de corrigir a causa para que o problema não aconteça novamente, vc faz uma cópia dos dados dessa tabela que vc já sabe que está corrompida em princípio E das outras tabelas que residem nesse datafile corrompido (pode ser via export, pode ser CREATE AS SELECT talvez não citando a(s) coluna(s) que deram erro) e então marca os blocos corrompidos como inusáveis com DBMS_REPAIR…. É isso…
[]s
Chiappa
16 de fevereiro de 2021 at 1:19 pm #147414maperesParticipantObrigado, Chiappa, pelo retorno.
Entendi, mas no meu caso, creio que seja mais em baixo, além das tabelas do sistema corrompidas, existem tbm vários objetos do schema SYS tbm corrompidos (1992 objetos, para ser mais preciso). Existe uma maneira de marcar os blocos como inusaveis de uma vez só, ou bojeto a objeto ?
Abs.
17 de fevereiro de 2021 at 9:26 am #147415José Laurindo ChiappaModeratorBlz ? Não, pode ver na Documentação em https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_REPAIR.html que Não, Não Existe uma opção pra vc marcar TODOS os blocos de TODOS os objetos em que foi detectado corrupção no database INTEIRO de uma vez só, não – o que se Poderia fazer é simplesmente escrever um SCRIPT que abre cursor na DBA_OBJECTS e te GERA os comandos necessários, ou coisa assim : é ISSO que se faz para automatizar tarefas administrativas no Oracle, é comum…
Respondida a sua perginta, PORÉM, eu TENHO que te dar o Aviso : veja vc, os objetos do schema SYS são de uso interno do RDBMS Oracle E são o modo pelo qual o database Oracle se auto-gerencia, se controla : se vc TEM corrupções múltiplas no SYS, é muito MUITO provável / possível que esse database teu aí esteja PERTO de ficar inusável, de dar os paus, os bugs mais loucos – a partir do momento que os CRUCIAIS objetos internos do database estão Comprometidos, absolutamente NINGUÉM pode botar a mão no fogo por esse database – eu RECOMENDO FORTEMENTE que vc verifique as suas possibilidades em termos de backups feitos nesse banco, pois MUITO PROVAVELMENTE , cedo ou tarde (mais provável CEDO) vc VAI precisar recriar esse database, pelo jeito….
E (imagino) que não preciso dizer, mas Corrupção é algo Raro num ambiente saudável : se vc tá tendo múltiplas corrupções aí, eu COM CERTEZA RECOMENDO que vc faça checks PROFUNDOS no seu hardware E verifique com o Suporte Oracle quais BUGs vc pode estar caindo, quais patches vc deveria aplicar….. Pra ontem….
[]s
Chiappa
-
AuthorPosts
- You must be logged in to reply to this topic.