Perdi tempo…

Não!!! Foi o TEMP… Bom dia, boa tarde, boa noite!! Olá meu amigo! Tudo bem aí??? Opa espero que sim!
A Dica de hoje é bem simples mas muito interessante.
Vamos falar hoje sobre um “cara” muito importante dentro do banco de dados, o tablespace TEMP.
Sabe quando a gente chega naquela situação em que o melhor a fazer é dar tempo ao tempo?? Pois é, não tem nada a  ver com o assunto de hoje, só que lembrei desta frase quando estava escrevendo o blog e coloquei ela aqui, sei lá porque… hehehehehehe, confesso que até eu ri agora.

Pois bem, vamos ao nosso tablespace temporário. O Tablespace TEMP é aquele carinha responsável por ordenar aquelas queries que você coloca order by alguma coisa, certo? Pois é, ele também é responsável por armazenar tabelas temporárias por exemplo.

Porém um belo dia você está rodando um querie e ganha este erro:

SQL> select * from tabela order by 1,2,3,4,5,6,7,8,9;
select * from tabela order by 1,2,3,4,5,6,7,8,9
*
ERROR at line 1:
ORA-01565: error in identifying file ‘/u01/app/oracle/oradata/orcl/temp01.dbf’
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory

Hummm você lembrou do post de banco de dados religioso né? rsrsrs. Pois é, este erro significa que foi perdido o datafile do tablespace temporário (na verdade chamado de tempfile). Eu sei que foi do TEMP pelo nome colocado no path temp01.dbf e por ter falhado justamente quando um order by estava sendo feito (conforme destacado em vermelho).
Nesta hora, nosso primeiro passo é agradecer por não ter sido um datafile de tablespace crítico nem da aplicação. O TEMP é aquele cara que você olha e fala: “ahhhh, foi só o TEMP”. Sim, ele não é crítico, não faz o ambiente parar, porém ele é imprescindível em algumas situações e pode deixar sim a inteligência da aplicação vamos dizer… …meio burra.
Sendo assim precisamos resolver este problema.
Para nossa sorte existem duas formas de resolver isto e uma delas nem precisa de reiniciar o database.
Vamos a elas:

1-Sem reiniciar o banco.

O Oracle é um banco de dados muito especial mas ele às vezes é enganado. Vamos então utilizar um artifício para resolver o problema.

a) Primeiramente adicionar um outro tempfile para ele:

SQL> ALTER TABLESPACE temp ADD TEMPFILE ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ SIZE 20M;

b) Agora sim é a hora de enganar o Oracle, sim isto mesmo. Ele reclamou que o temp01.dbf não foi encontrado, mas mesmo assim ele continua com ele registrado e procurando ele. Então mesmo ele não existindo mais fisicamente, eu dou um DROP nele com o comando abaixo:

SQL> ALTER TABLESPACE temp DROP TEMPFILE ‘/u01/app/oracle/oradata/orcl/temp01.dbf‘;

Com o comando dado acima, mesmo o arquivo não existindo mais fisicamente ele vai “dropar” ele e então não incomodará mais.

2- Reiniciando o banco:

Bem, para esta forma não tem o que dizer, basta reiniciar o banco e como mágica ele recria o tempfile perdido.

Vale lembrar que esta técnica é apenas para o tempfile. hehehehehe

Ok Ok, Espero que tenha curtido a dica de hoje e que um dia ela seja útil… Ou não né? Melhor que não tenhamos problema, mas caso ele ocorra será legal saber como solucioná-lo.

Grande abraço, continue participando, convidando amigos para participarem.

Foco na meta aí que eu foco daqui!

Sobre raul andrade

DBA e Instrutor Oracle, apaixonado pela minha família e por ensinar.
Esta entrada foi publicada em DBA Oracle e marcada com a tag , . Adicione o link permanente aos seus favoritos.

Deixe uma resposta