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.