Não sei se isto ocorre no 10g (mas vou saber em breve), mas com o 9i, os tablespaces temporários tem o péssimo hábito de crescer e não diminuir depois. O fato é que se você não ficar de olho, chegará o dia em que o tablespace temporário estará enorme e cheio recebendo mensagens de erro de aplicações que não conseguem extender o tablespace temporário e ficando com os discos cheios sem necessidade. Não há como diminuir o tablespace (é feio e potenciamente desastroso diminuir o tamanho de tablespaces, mas todo mundo faz isso um dia…) pois todo o seu espaço está ocupado. Qual a solução? Criar um novo tablespace temporário e remover o anterior.
Antes de mais nada, vale a pena dar uma olhada no tamanho dos seus arquivos no tablespace temporário olhando em dba_temp_files:
1 2 3 4 5 6 7 8 |
SELECT tablespace_name, file_name, bytes/(1024*1024) tamanho_MB, maxbytes/(1024*1024) maximo_MB, status FROM dba_temp_files ORDER BY tablespace_name, file_name; |
1 2 3 4 5 6 7 |
CREATE TEMPORARY TABLESPACE temporaria TEMPFILE '/oradata/PD02/db/temporaria_01.dbf' SIZE 50M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE 2000M, '/oradata/PD02/db/temporaria_02.dbf' SIZE 50M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE 2000M, '/oradata/PD02/db/temporaria_03.dbf' SIZE 50M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE 2000M EXTENT MANAGEMENT LOCAL; ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temporaria; |
1 2 3 4 5 6 7 8 9 10 11 12 |
SELECT su.username, s.osuser, su.tablespace, TO_CHAR (s.logon_time, 'dd/mm/yyyy hh:mi:ss') logon, s.sid, s.serial#, s.machine, s.terminal, s.program FROM v$sort_usage su JOIN v$session s ON su.session_addr = s.saddr; |
1 |
DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES; |
Hum…. pesquisando no Ask Tom descobri a resposta ao enigma do crescimento descontrolado dos TABLESPACEs temporários. Parece que isto é perfeitamente normal, afinal de contas.