Fejlen kom på en af vores Oracle version 9 databaser, og selvfølgelig da vi alle var gået hjem. Var selv lige hjemme fra inde og checke mail, da jeg så den. Det betyder jo typisk at TEMP tablespacet enten er fyldt eller fragmenteret.

For lige at checke størrelsen på pågældende tablespace kan man

[workday:XOS:/home1/usr/oradrift/def/$ORACLE_SID/db_maintainance] sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on Wed Feb 4 10:45:45 2009

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL> select * from dba_tablespaces where tablespace_name = 'TEMP';

TABLESPACE_NAME                BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS
------------------------------ ---------- -------------- ----------- -----------
MAX_EXTENTS PCT_INCREASE MIN_EXTLEN STATUS    CONTENTS  LOGGING   FOR EXTENT_MAN
----------- ------------ ---------- --------- --------- --------- --- ----------
ALLOCATIO PLU SEGMEN
--------- --- ------
TEMP                                 2048          73728       73728           1
                       0          0 ONLINE    TEMPORARY LOGGING   NO  DICTIONARY
USER      NO  MANUAL

Vi kan ihvertfald notere at det er dictionary managed og space segment management er manual. Lad os kigge på DBA_FREE_SPACE

SQL> SELECT * FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME = 'TEMP' 

Her retuneres over 5.000 rækker, ok vi gør følgende

SQL> ALTER TABLESPACE TEMP COALESCE;

Vi checker med DBA_FREE_SPACE igen, og kan nu konstatere at antal rækker fra DBA_FREE_SPACE nu er 10. Det blev løsningen på den problem, efterfølgende blev det til et cron job der laver en coalesce en gang i døgnet. Databasen står til en opgradering, hvor temp bliver sat med space segment management lig auto.