Alte Objekte im Data Dictionary
Objekte in der Datenbank, die mit „_OLD“ oder „_BACKUP“ enden, sind in den meisten Fällen Überbleibsel, Backups von irgendwelchen Applikationstabellen, die vor eiinem Applikations-Upgrade gemacht werden und die dann länger in der Datenbank bleiben als nötig (á la KUNDEN_BACKUP_20180707). Umso erstaunter war ich, als ich letztens eine „%_OLD“-View im Data Dictionary entdeckt habe.
Genauer gesagt betrifft das eine DBA-View, nämlich die DBA_SEGMENTS:
[oracle@ohm ~]$ sqlplus / as sysdba
SQL*Plus: Release 23.26.3.0.0 - Production on Sun Aug 23 18:46:22 2026
Version 23.26.3.0.0
Copyright (c) 1982, 2026, Oracle. All rights reserved.
Connected to:
Oracle AI Database 26ai Enterprise Edition Release 23.26.3.0.0 - Production
Version 23.26.3.0.0
SQL> column object_name format a30
SQL> select object_type,object_name from dba_objects where object_name like '%_OLD';
OBJECT_TYPE OBJECT_NAME
----------------------- ------------------------------
VIEW DBA_SEGMENTS_OLD
VIEW CDB_SEGMENTS_OLD
TABLE WRI$_ALERT_THRESHOLD
SYNONYM DBA_SEGMENTS_OLD
SYNONYM CDB_SEGMENTS_OLD
Wenn man beide Views vergleicht, dann zeigt sich, dass (wie zu erwarten war), dass die „neue“ DBA_SEGMENTS einige Spalten mehr hat:
| Spalte | DBA_SEGMENTS | DBA_SEGMENTS_OLD |
| OWNER | VARCHAR2 | VARCHAR2 |
| SEGMENT_NAME | VARCHAR2 | VARCHAR2 |
| PARTITION_NAME | VARCHAR2 | VARCHAR2 |
| SEGMENT_TYPE | VARCHAR2 | VARCHAR2 |
| SEGMENT_SUBTYPE | VARCHAR2 | |
| TABLESPACE_NAME | VARCHAR2 | VARCHAR2 |
| HEADER_FILE | NUMBER | NUMBER |
| HEADER_BLOCK | NUMBER | NUMBER |
| BYTES | NUMBER | NUMBER |
| BLOCKS | NUMBER | NUMBER |
| EXTENTS | NUMBER | NUMBER |
| INITIAL_EXTENT | NUMBER | NUMBER |
| NEXT_EXTENTS | NUMBER | NUMBER |
| MIN_EXTENTS | NUMBER | NUMBER |
| MAX_EXTENTS | NUMBER | NUMBER |
| MAX_SIZE | NUMBER | |
| RETENTION | VARCHAR2 | |
| MINRETENTION | NUMBER | |
| PCT_INCREASE | NUMBER | NUMBER |
| FREELISTS | NUMBER | NUMBER |
| FREELIST_GROUPS | NUMBER | NUMBER |
| RELATIVE_FNO | NUMBER | NUMBER |
| BUFFER_POOL | VARCHAR2 | NUMBER |
| FLASH_CACHE | VARCHAR2 | |
| CELL_FLASH_CACHE | VARCHAR2 | |
| INMEMORY | VARCHAR2 | |
| INMEMORY_PRIORITY | VARCHAR2 | |
| INMEMORY_DISTRIBUTE | VARCHAR2 | |
| INMEMORY_DUPLICATE | VARCHAR2 | |
| INMEMORY_COMPRESSION | VARCHAR2 | |
| CELLMEMORY | VARCHAR2de |
Normalerweise fügt Oracle wenn neue Spalten zu einer Dictionary View hinzu kommen, diese am Ende an. Das ist auch der Grund, warum die aus meiner Sicht recht wichtige Spalte CON_ID in den CDB-Views nicht die erste Spalte ist, sondern erst weit hinten erscheint. Warum bei der DBA_SEGMENTS einige neue Spalten dazwischen eingefügt wurden, ist eine gute Frage. Und warum es diese beiden Varianten der Segment-Übersicht gibt, im ersten Moment auch.
Eine Antwort ist: DBA_SEGMENTS zeigt mehr Segment-Typen als DBA_SEGMENTS_OLD.
Lt. Dokumentation gilt:
Für die Spalte SEGMENT_TYPE gibt es in DBA_SEGMENTS_OLD folgende Möglichkeiten:
- INDEX PARTITION
- TABLE PARTITION
- TABLE
- CLUSTER
- INDEX
- ROLLBACK
- DEFERRED ROLLBACK
- TEMPORARY
- CACHE
- LOBSEGMENT
- LOBINDEX
Und bei der DBA_SEGMENTS sind es einige mehr:
- NESTED TABLE
- TABLE
- TABLE PARTITION
- CLUSTER
- LOBINDEX
- INDEX
- INDEX PARTITION
- LOBSEGMENT
- TABLE SUBPARTITION
- INDEX SUBPARTITION
- LOB PARTITION
- LOB SUBPARTITION
- ROLLBACK
- TYPE2 UNDO
- DEFERRED ROLLBACK
- TEMPORARY
- CACHE
- SPACE HEADER
- UNDEFINED
Links zur 26ai-Dokumentation: