quinta-feira, 28 de julho de 2016

Debug #10 - ORA-600


Fala galera que acompanha o blog...

Eu gostaria de começar esse post já lhe desejando meus pêsames. Com certeza você já varreu toda a internet tentando arrumar uma solução para esse erro ORA-600 do banco de dados Oracle, e até agora não conseguiu nada definitivo.

Debug #10 - ORA-600


O método que eu vou ensinar funcionou comigo, e consegui recuperar sem problemas o banco de dados. A "solução" (na verdade são os passos) é a seguinte, espero que funcione pra você!

Acesse esse site, para baixar e utilizar a ferramenta ORA-600 LOOKUP TOOL, que a própria Oracle disponibiliza, que realiza uma pesquisa para esse erro específico.
O programa realizará uma varredura na sua máquina, colhendo informações de hardware, software, coletando os logs e registros que o próprio bando gera e fará uma análise, verificando se para o problema já existe um patch de correção.
Pode ser que seja necessário enviar os traces para o suporte para uma análise.

Caso queira continuar lendo o post, estarei explicando o motivo de tanto desespero quando um DBA/DEV encontra esse código de erro e como tentar realizar uma leitura do erro e descobrir as possíveis causas.

Sempre, que tiver um ORA-600 em sua base de dados, entre em contato de imediato com o suporte da Oracle, para que possam realizar uma analise profunda verificando os motivos do problema e uma investigação profunda no seu ambiente e quem sabe seja apenas um BUG da versão utilizada.

O RDBMS (Relational Database Management System) Oracle possui dois códigos de erros que causam um pânico em qualquer DBA/DEV, o curioso e audacioso ORA-600 e ORA-7445. Nesse post vamos falar apenas do ORA-600.

Quando nos deparamos com esse erro seja diretamente pelo Oracle Server, via qualquer gerenciador de banco de dados ou pelo alert.log, significa que temos uma inconsistência
em um determinado processo, que, geralmente, pode estar associado a um BUG ou um problema na aceitação do comando no kernel do RDBMS.

No entanto, existe uma ferramenta ORA-600 Lookup tool, que a própria Oracle disponibiliza, que realiza uma pesquisa para esse erro específico. Através dele, pode ser encontrada a solução, ou um famoso "recurso técnico" (gambiarra) para realizar e resolver o problema.

Vários fatores podem gerar um ORA-600:
  • Configuração do S.O: a falta de patchs no sistema operacional, ou má instalação, pode causar esse erro;
  • News Features: sempre que é lançada uma versão nova de banco de dados e a sua versão instalada passa a utilizar essas features da versão, grandes chances de encontrar esse erro. Isso acontece porque o Kernel do RDBMS ainda não está "pronto" para executar "a tarefa", sobre "o hardware", com "o sistema operacional" junto com "a linguagem de programação". E dessa forma o erro aparece!;
  • Falta de recurso de hardware: não é a principal causa, mas falta de recursos de memória, problemas no funcionamento do hardware, problemas de disco podem auxiliar seu aparecimento;
  • Falta de atualização do Banco de Dados: ao lançar um novo produto, este possui diversos Patchs sets, que é um conjunto de correções (Patch offs) que foram coletadas com o auxilio dos clientes, ao reportar erros na operação da ferramenta. A falta de atualização só aumenta a chance do aparecimento do erro.
Ao surgir um ORA-600, no diretório USER_DUMP_DEST ou BACKGROUND_DUMP_DEST (pode variar, dependendo do processo afetado), é gerado um arquivo de trace no servidor. Nesse arquivo, para o pessoal mais experiente, poderá ser o salvador, pois poderá encontrar a raiz do problema.

Veja essas mensagens de erro abaixo, devemos tentar entende-las, principalmente ao se tratar de um ORA-600:

ORA-00600: internal error code, arguments: [kcbz_check_objd_typ_3], [0], [0], [1], [], [], [], []

ou

ORA-00600: internal error code, arguments: [12209], [498], [], [], [], [], [], []

A mensagem de erro é sempre composta por ORA-600[arg1][arg2]...[arg8]. Ao verificar a documentação da Oracle é possível verificar a arquitetura interna do Oracle. O kernel é composto por diversas travas que fazem o controle, acesso e utilização dos dados.

Analisando a mensagem de erro, podemos ter ideia de onde ele vem, que pode ser de diferentes lugares (SELECT, INSERT, CREATE e etc), e é o primeiro argumento a nossa chave para descobrir o problema, pois é ele que dirá em qual trava ocorreu o problema.

No primeiro erro, o primeiro argumento é: kcbz_check_objd_typ_3, internamente a trava kcbz significa Kernel Cache Buffer, podemos supor que o problema possa ter acontecido ao realizar um tratamento da informação durante sua passagem pelo SGA (System Global Area).

No segundo caso, pode ser um problema um mais simples, como não existe nenhuma trava mencionada no primeiro argumento, o problema pode ser apenas quebra de integridade interna ou algum problema de manipulação dos dados. Nesses casos surge a expectativa de que o erro ORA-600 possua uma resolução rápida.

Espero ter ajudado de alguma forma, foi o que eu consegui pesquisar na internet e olhar nos fóruns, como eu disse meu problema foi de fácil resolução, a ferramenta que a Oracle disponibiliza resolveu meu problema, mas fui pesquisar mais um pouco para ajudar ai quem tiver esse problema,

É isso ai, e até a próxima
Luiz Fagner Zordan Analista de Sistemas

Graduado em Sistemas de Informação, atualmente trabalhando na Embraer pela FocusNetworks como FullStack. Sou apaixonado por tecnologia, fascinado por jogos e adoro passar o tempo assistindo séries.