Oracle-Databasefiles unter SAP verkleinern

Databasefiles werden mit Hilfe der brtools verkleinert.

Um die maximal mögliche Verkleinerung zu erzielen, kann folgendes SQL-Kommando genutzt werden:

SELECT DECODE (
    end_block_1,
    NULL,    'brspace -c force -f dfalter -a drop  -f '''
          || FILE_NAME
          || '''',
       'brspace -c force -f dfalter -a resize -f '''
    || FILE_NAME
    || ''' -s  '
    || CEIL ( (NVL (END_BLOCK_1, 1) * 8192) / 1024 / 1024))
    RESIZE_COMMAND
FROM (SELECT FILE_NAME,
             FILE_ID,
             FILE_BLOCKS,
             SEGMENT_NAME SEGMENT_NAME_1,
             START_BLOCK START_BLOCK_1,
             END_BLOCK END_BLOCK_1,
             LEAD (SEGMENT_NAME, 1)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  SEGMENT_NAME_2,
             LEAD (START_BLOCK, 1)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  START_BLOCK_2,
             LEAD (END_BLOCK, 1)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  END_BLOCK_2,
             LEAD (SEGMENT_NAME, 2)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  SEGMENT_NAME_3,
             LEAD (START_BLOCK, 2)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  START_BLOCK_3,
             LEAD (END_BLOCK, 2)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  END_BLOCK_3,
             POSITION
         FROM (SELECT FILE_NAME,
                      FILE_ID,
                      FILE_BLOCKS,
                      SEGMENT_NAME,
                      BLOCK_ID START_BLOCK,
                      BLOCK_ID + BLOCKS - 1 END_BLOCK,
                      POSITION
                   FROM (SELECT DISTINCT
                                DDF.FILE_NAME,
                                DDF.FILE_ID,
                                DDF.BLOCKS FILE_BLOCKS,
                                DE.SEGMENT_NAME,
                                DE.BLOCK_ID,
                                DE.BLOCKS,
                                ROW_NUMBER ()
                                OVER (PARTITION BY DDF.FILE_NAME
                                    ORDER BY DE.BLOCK_ID DESC)
                                    POSITION
                             FROM DBA_DATA_FILES DDF, DBA_EXTENTS DE
                             WHERE   DDF.FILE_ID = DE.FILE_ID(+)
                                         AND DDF.TABLESPACE_NAME LIKE 'PSAPSR3')
                   WHERE POSITION <= 3))
         WHERE POSITION = 1
         ORDER BY FILE_ID;

Die Ausgabe kann dann auf der Kommandozeile ausgeführt werden. Man sollte aber bedenken, dass (falls im Vorfeld die gesamte DB reorganisiert wurde) anschließend kaum noch Platz für neue Daten zur Verfügung steht. Also sollte man die Ausgaben dieses SQL-Statements mit Vorsicht genießen und ggf. noch etwas Kapazität aufschlagen.

Ausgabebeispiel:

brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_1/sr3.data1' -s  5240
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_2/sr3.data2' -s  5140
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_3/sr3.data3' -s  5140
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_4/sr3.data4' -s  5060
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_5/sr3.data5' -s  5000
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_6/sr3.data6' -s  7740
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_7/sr3.data7' -s  7053

Die hier ausgegebenen Werte werden in GB angegeben.

Schreibe einen Kommentar

Deine Email-Adresse wird nicht veröffentlicht.