LONG-Field Tabellen und die online Reorganisation

Wenn man einen Tablespace reorganisieren möchte kann man dies in der Regel online als auch offline tun. Beide Verfahren haben ihre Vor- und Nachteile. Bei der online Reorganisation von Tabellen gibt es jedoch eine Einschränkung bzgl. Tabellen mit Feldern vom Typ LONG. Diese können nicht online reorganisiert werden. Bei moderneren Systemen (Neuinstallation >= Kernel 7.00) kommen LONG-Fields nicht mehr vor bzw. die Systeme werden ohne LONG-Felder ausgeliefert. Bei älteren Systemen muss man sich entweder mit einem Export/Import der Tabellen behelfen oder aber die LONG-Fields in LOBs umwandeln. Aber Achtung, je nach Release kann es hier zu Nebeneffekten kommen. Sofern man ein historisch gewachsenes System hat, das über einen Kernel >= 7.00 sowie Oracle 10g verfügt kann man die LONG-Fields jedoch einfach konvertieren. Das geht sogar online und muss lediglich einmal gemacht werden. Der online Reorganisation von Tabellen steht dann nichts mehr im Wege.

Zunächst kann man recht einfach prüfen ob es denn überhaupt LONG-Fields in den Tabellen gibt, die umgesetzt werden müssen.

SQL> select TABLE_NAME, COLUMN_NAME from dba_tab_columns where owner='<Schema-Owner>' and data_type = 'LONG';

TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------
GVD_OBJECT_DEPEN               TO_NAME
GVD_SQL                        SQL_TEXT
GVD_SQLAREA                    SQL_TEXT
ORA_RESUMABLE                  SQL_TEXT
PLAN_TABLE                     OTHER

SQL>

Die Tabelle PLAN_TABLE kann man ignorieren. Diese kann z.B. bei der online Reorganisation in einen anderen Tablespace einfach gedoppt und anschließend per Oracle Script neu angelegt werden. Die anderen Tabellen beinhalten LONG Felder.

Um gezielt diese Felder in den Tabellen umzuwandeln nutzt man praktischer Weise brspace:

brspace -u / -f tbreorg -a long2lob -t GVD_OBJECT_DEPEN,GVD_SQL,GVD_SQLAREA,ORA_RESUMABLE -p 4 -e 4

In diesem Beispiel wird brspace angewiesen die Tabellen VD_OBJECT_DEPEN, GVD_SQL, GVD_SQLAREA und ORA_RESUMABLE auf die Existenz von LONG-Feldern zu untersuchen und wenn vorhanden diese in LOBs zu wandeln. Ruft man brspace mit -t „*“ oder -t allsel auf werden alle Tabellen auf die Felder untersucht und die Umsetzung geschieht nur für vorhandene LONG-Felder:

List of tables for reorganization
 
  Pos.  Owner    Table                Pt. DgPk.     Rows   Used[KB]  Data[KB:%]
 
    1 - SAP-SCHEMA   GVD_OBJECT_DEPEN     NO   1           0         0         0:0
    2 - SAP-SCHEMA   GVD_SQL              NO   1           0         0         0:0
    3 - SAP-SCHEMA   GVD_SQLAREA          NO   1           0         0         0:0
    4 - SAP-SCHEMA   ORA_RESUMABLE        NO   1           0         0         0:0
 
Standard keys: c - cont, b - back, s - stop, r - refr

Über die Parameter -p und -e kann man die Umsetzung beschleunigen. Mit -p werden die parallelen Threads für brspace bestimmt. Hiermit kann man steuern wie viele Tabellen parallel bearbeitet werden. Die Tabellen im Beispiel haben praktischer Weise keine Einträge, so dass die Umsetzung sehr schnell geht 😉

Über den Parameter -e gibt man an, mit wie vielen Prozessen das verwendete ORACLE DBMS Paket eine einzelne Tabelle bearbeitet. Achtung, durch die Nutzung des Wertes -e wird das I/O Subsystem bei großen Datenmengen stark belastet und sollte entsprechend leistungsfähig sein, damit es keine negativen Auswirkungen auf die Systemperformance gibt. Zudem erhöht sich das Archivlog-Volumen sehr stark.

Sofern die LONG-Fields konvertiert wurden können die Tabellen zukünftig auch online reorganisiert werden.

About the author