Die aus dem älteren DBA Studio bekannte, recht nützliche Tablespace Map ist im Enterprise Manager recht schwer zu finden.
So sah sie aus:
Hier kurz der Wegweiser zum Ziel, um sie auch im Enterprise Manager zu nutzen:
Wir navigieren unter Administration – Storage zu Tablespaces:
In der Auswahlbox über die Funktionen, die defaultmäßig auf „Add Datafile“ steht, selektieren wir „Show Tablespace Contents„. Ich muss zugeben, darunter hatte ich etwas Anderes erwartet.
Es geht dann eine Ansicht auf, auf der wir ganz unten unter dem „Contents“ einen unscheinbaren Link finden, „Extent Map„.
Nutzen wir diesen Link, klappt tatsächlich die aus dem DBA Studio bekannte Ansicht auf! Welch Überraschung.
Für diejenigen, die noch nicht wissen, was man damit Nützliches anfangen kann, folgt eine kurze Erklärung. Es werden genutze und freie Blöcke farblich gekennzeichnet. Man erkennt damit die Nutzung (und Fragmentierung) des Tablespaces.
Wofür ist das gut?
Manchmal ist ein Tablespace zu groß, und man bekommt ihn mit ALTER .. RESIZE nicht kleiner, da am Ende des Tablespace noch ein Objekt ist.
ORA-03297: file contains used data beyond requested RESIZE value
Welches Objekt da stört, erfährt man hier dynamisch mit einem einfachen Mouseover (Tooltip). Dann kann man dieses Objekt reorganisieren und hat die Chance, dass der Tablespace verkleinert werden kann. Dies ist nützlich bei Objekten, die üblicherweise nicht automatisiert reorganisert werden können wie SYSAUX.
Hier ist rechts unten die hellblaue Fläche das Objekt welches eine Reorganisation verhindert. Als Tabelle ein Move, als Index ein REBUILD löst das Problem.
Natürlich kann man die den Shrink störenden „höchsten“ Objekte auch mittels der Console ermitteln:
1 2 3 4 5 6 7 8 9 10 11 | SELECT * FROM ( SELECT file_id, block_id, block_id + blocks - 1 end_block, owner, segment_name, partition_name, segment_type FROM dba_extents WHERE tablespace_name = 'SYSAUX' UNION ALL SELECT file_id, block_id, block_id + blocks - 1 end_block,'free' owner, 'free' segment_name, NULL partition_name, NULL SEGMENT_TYPE FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME = 'SYSAUX' ORDER BY 1 DESC, 2 DESC) WHERE ROWNUM < 10; |
Ein beispielhafter Output sieht dann z.B. so aus:
FILE_ID BLOCK_ID END_BLOCK OWNER SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE
———- ———- ———- —— ——————————- —————————— ——————
10 25792 25855 SYS I_WRI$_OPTSTAT_H_ST INDEX
10 25280 25791 SYS AUD$ TABLE
10 24192 24255 SYS I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST INDEX
10 24128 24191 SYS WRH$_LATCH WRH$_LATCH_489711439_34766 TABLE PARTITION
Dies wären dann die Kandidaten für einen MOVE/REBUILD, um den Platz am Ende der Datei freizuschaufeln.