SAP Online Tablespace Reorg unter Oracle

Ich werde hier ausführlich beschreiben wie man eine SAP Oracle Datenbank mit Hilfe der SAP brtools online reorganisieren kann. Die kleinen Helfer sind schon etwas älter, sollten aber noch funktionieren. Ggf. verfügen die brtools mittlerweile über neue oder erweiterte Funktionen. Das SAP System in diesem Beispiel heißt SAP P01 und ist historisch gewachsen. Das Vorgehen wird anhand des PSAPERP Tablespaces beschrieben.

Vorarbeiten

Backup Backup Backup! Auch wenn die Änderungen transparent vorgenommen werden, so sollte vor Beginn der Arbeiten immer zuvor ein Fullbackup (ob online mit Archivelogs oder offline) erstellt werden. Für den Reorg benötigt man je nach Datenbankgröße einiges an Plattenplatz. Der brarchive Prozess wird sehr viele Archivelogs sichern – ggf. sollte also hier das Backupupsystem auf etwas mehr als das übliche Sicherungsvolumen vorbereitet sein oder schlichtweg mehr Sessions zur Verfügung gestellt werden. Zudem sollten die brtools in der neusten verfügbaren Version installiert sein. Dies ist besonders wichtig weil hier nicht nur ständig Fehler behoben werden, sondern auch immer mal Funktionserweiterungen eingepflegt werden.

Informationen zum Reorg mit den brtools findet man hier: 646681 – Reorganisation von Tabellen mit BRSPACE

ERWEITERUNG PLATTENPLATZ

Die bestehenden Filesysteme werden um jeweils 1,5 TB erweitert – für den Reorg wird mind. der doppelte Speicherplatz +x des zu reorganisierenden Tablespaces sowie temporärer Platz im psaptemp benötigt.

/oracle/P01/sapdata1 + 1,5 TB
/oracle/P01/sapdata2 + 1,5 TB
/oracle/P01/sapdata3 + 1,5 TB
/oracle/P01/sapdata4 + 1,5 TB
 
Nach der Erweiterung verfügbarer Platz:
/dev/lvoraarch   1152.00   1130.04    2%       17     1% /oracle/P01/oraarch
/dev/lvsapdata1   3518.00   1926.59   46%     9282     1% /oracle/P01/sapdata1
/dev/lvsapdata2   3058.00   2020.96   34%      118     1% /oracle/P01/sapdata2
/dev/lvsapdata3   2760.00   1839.65   34%       98     1% /oracle/P01/sapdata3
/dev/lvsapdata4   3509.00   1670.05   53%    19557     1% /oracle/P01/sapdata4

Prüfung des Parameters db_files

Um den neuen Tablespace anlegen zu können muss es der Datenbank möglich sein, genügend neue Datenfiles zu erstellen. Ist der Parameter db_files zu klein gesetzt (Default 256) kann es passieren, dass der neue Tablespace aufgrund der Parameterbeschränkungen nicht angelegt werden kann, da die Menge der benötigten DB Files zu hoch ist. Der Parameter kann nur durch einen Oracle Neustart verändert werden.

SQL> show parameter db_files;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_files                             integer     1024
SQL>
 
256 * 32 GB -> max 8,1 TB
1024 * 32 GB -> max 32,7 TB

Prüfung auf das Vorhandensein von Long-Feldern

Long Felder innerhalb von Tabellen können nicht per brspace-Tabellenreorg reorgansisiert werden. Daher muss vor dem Reorg geprüft werden, dass es keine Felder vom Typ Long im online zu reorganisierenden Tablespace gibt.

SQL> select TABLE_NAME, COLUMN_NAME from dba_tab_columns where owner='SAPERP' and data_type = 'LONG';

TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------
PLAN_TABLE                     OTHER

Die Plan_Table kann gedropt werden, siehe Oracle Hinweis: https://docs.oracle.com/cd/B28359_01/server.111/b28320/statviews_5127.htm#REFRN29510

Vorbereitung neuer Tablespace

Die Größe des aktuellen Tablespaces beträgt (netto) ca. 4.942.385 MB

Für die Berechung der Menge der benötigten Datenfiles wurde dieser Wert mit einem Buffer versehen:

Aktuell TS Größe PSAPERP: 4.968.207  MB / 32767 -> 152 Files

Da man nicht abschätzen kann, ob die Größe sich verringert, gleich bleibt oder ggf. wächst werden 4 Dateien a 32 GB als Puffer eingeplant. Sollte der Platz nicht reichen, so kann der Tablespace entsprechend erweitert werden.

Hieraus ergeben sich also 156 Files a 32 GB für den neuen Tablespace. Da dieser möglichst gleichmäßig auf die bestehenden 4 sapdata Verzeichnisse verteilt werden soll wird die Anzahl der Files durch 4 geteilt. Entsprechend 156 / 4 -> 39 Datafiles pro sapdata Filesystem.

Anlegen des neuen Tablespaces

Per brspace-Befehl (empfohlen)

brspace -u / -f tscreate -t PSAPERP2 -d both -l all

Per SQL im sqlplus

Bitte beachten, dass die Zielordner zuvor manuell angelegt werden müssen, da Oracle hier nicht selbst tätig wird (im Gegensatz zu den brtools)! Ansonsten schlägt das Anlegen der Files mit einer entsprechenden Fehlermeldung fehl.

!mkdir –p /oracle/P01/sapdata1/erp2_1/
create tablespace PSAPERP2 extent management local autoallocate segment space management auto datafile '/oracle/P01/sapdata1/erp2_1/erp2.data1' size 1000M autoextend on next 500M maxsize 32767M';

Anlegen der Datenfiles für den neuen Tablespace

Syntax:
!mkdir –p /oracle/P01/sapdata1/erp2_2
alter tablespace PSAPERP2 add datafile '/oracle/P01/sapdata1/erp2_2/erp2.data2' size 1000M autoextend on next 500M maxsize 32767M

Über die Pseudoschleife innerhalb der While Bedinung des folgenden Scriptes werden die Datenfiles über die SAPDATAs verteilt. So erreicht man ggf. eine bessere Lastverteilung auf den Platten, sofern das Oracle die Files gleichmäßig wachsen lässt und das Storage-Subsystem hier keinen Strich durch die Rechnung macht. Die SID, Pfade sowie Größen und Extends der Files können natürlich nach belieben angepasst werden.

#!/usr/bin/ksh
#Script zum Anlegen neuer Datenfiles innerhalb eines TBS 
#wsp
DB_SID=P01 
COUNTER=2
COUNTMAX=156
SQL=create_tbs_datafiles.sql
TBSFULL=PSAPERP2
TBS=erp2
SAPDNR=1
SAPDATA=/oracle/${DB_SID}/sapdata${SAPDNR}/${TBS}_
 
[ -f $SQL ] && rm $SQL
touch $SQL
echo -e "connect / " >> $SQL
while [[ $COUNTER -le $COUNTMAX ]]
do
        SAPDATA=/oracle/${DB_SID}/sapdata${SAPDNR}/${TBS}_
        echo -e "!mkdir -p ${SAPDATA}${COUNTER}" |tee -a $SQL      
        echo -e "alter tablespace ${TBSFULL} add datafile '${SAPDATA}${COUNTER}/${TBS}.data${COUNTER}' size 100M autoextend on next 100M maxsize 32767M;" |tee -a $SQL
        let COUNTER=COUNTER+1
        let SAPDNR=SAPDNR+1
        [[ $SAPDNR -eq 5 ]] && let SAPDNR=1 
done
echo -e "exit;" >> $SQL
 
vi $SQL
sqlplus /NOLOG @$SQL
 
exit 0

PSAPTEMP anpassen

Der Tablespace PSAPTEMP muss entsprechend erweitert werden und sollte hierbei je nach gewünschter Parallelität des Reorgs die Größe der beiden (-p2) drei (-p3)… etc. Tabellen halten können + genügend Reserven für den regulären Betrieb des Systems haben. Sprich er muss das Grundrauschen des Systems sowie die zusätzliche Last durch den Reorg bedienen können.

Für das SAP System P01 sind in diesem Falle ca. 200-300 GB anzusetzen. Das Entspricht 10 Temp-Files:

1100/32 -> 10 zusätzliche Tempfiles für PSAPTEMP

per SQL im sqlplus

!mkdir –p /oracle/P01/sapdata2/temp_2
alter tablespace PSAPTEMP add tempfile '/oracle/P01/sapdata2/temp_2/temp.data2' size 1000M autoextend on next 20M maxsize 32767M;

oder per Script:
#!/usr/bin/ksh
#Script zum Anlegen neuer Datenfiles im PSAPTEMP
#WSP
DB_SID=P01 
COUNTER=4
COUNTMAX=35
SQL=create_tbs_temp_datafiles.sql
 
[ -f $SQL ] && rm $SQL
touch $SQL
echo -e "connect / " >> $SQL
while [[ $COUNTER -le $COUNTMAX ]]
do
        echo -e "!mkdir -p /oracle/${DB_SID}/sapdata2/temp_${COUNTER}" |tee -a $SQL
        echo -e "alter tablespace PSAPTEMP add tempfile '/oracle/${DB_SID}/sapdata2/temp_${COUNTER}/temp.data${COUNTER}' size 1000M autoextend on next 500M maxsize 32767M;" |tee -a $SQL
        let COUNTER=COUNTER+1
done
echo "exit;" >> $SQL
 
sqlplus /NOLOG @$SQL
 
exit 0

Brarchive

Aufgrund des sehr hohen Archivelog-Aufkommens während des Online-Rorgs sollte permanent ein brarchive Prozess mitlaufen bzw. sichergestellt sein, dass das FS oraarch auf seinen Füllgrad hin überwacht wird und frühzeitig mit der Sicherung begonnen wird um sich aufbauende Bugwellen bei der Sicherung zu vermeiden und ggf. schwankender TSM Performance vorzubeugen.

Der brrachive wird per nohup in den Hintergrund gelegt und mit –f5 angewiesen, ab 5 Archivelogs im Verzeichnis zu sichern und anschließend auf die nächsten Archivefiles zu warten.

nohup brarchive -sd -c -u / -f 5 &

Tablespace Reorg starten

Aufgrund eines Pufferüberlaufs innerhalb älterer brtools bei (zu) langen DDL Statements sollte vor dem Start entsprechend das Environment geändert werden:

setenv BR_DBL 41943040
setenv BR_MSL 10485760

Da das System produktiv ist darf die Last durch den Reorg nicht zu hoch werden. Auch ein potentes Plattensubsystem wird bei zu viel I/O irgendwann anfangen, die Antwortzeiten zu stark ansteigen zu lassen und das merkt man dann ggf. in kritischen Applikationsbereichen. Daher wird brspace nur mit zwei Prozessen (max. 2 gleichzeitige Tabellen, PSAPTEMP Größe beachten!) gestartet (-p2). Auf eine weitere Beschleunigung per –e 4 wird in der Produktion verzichtet, um die Last nicht zu sehr zu erhöhen. Mit -e 4 wird oracleintern mit 4 Prozessen an der gleichen Tabelle gearbeitet, dies kann die Bearbeitungszeit pro Tabelle enorm verkürzen. Steigert jedoch den notwendigen I/O sehr stark. 

brspace  -u / -c force -f tbreorg -s PSAPERP -o SAPERP -t allsel -n PSAPERP2 -p 2 

Nachdem der Reorglauf abgeschlossen ist sieht man, dass der Tablespace PSAPRERP fast komplett entleert ist:

SQL> select * from dba_tablespace_usage_metrics;
 
TABLESPACE_NAME                USED_SPACE TABLESPACE_SIZE USED_PERCENT
------------------------------ ---------- --------------- ------------
PSAPERP                             32504       708519040   .004587597
PSAPERP2                        464039576       624851083   74.2640268
PSAPERP740X                      12296752        20480000   60.0427344
PSAPERPUSR                         691984         2560000    27.030625
PSAPTEMP                            76032        42376704   .179419334
PSAPUNDO                          4695664        36407680   12.8974546
SYSAUX                             516656         2560000    20.181875
SYSTEM                             242496         2560000       9.4725
 
8 rows selected.
 
SQL>

Alten Tablespace shrinken

Bevor der alte Tablespace gelöscht wird sollte er zunächst geschrinkt werden.

alter tablespace PSAPERP COALESCE;

per Script:

#!/usr/bin/ksh
#Script zum ermitteln der zu shrinkenden Datafiles eines Tablespaces
#WSP
 
SQLGETID=get_shrink_tbs_datafiles.sql
SQLSHRINKID=shrink_tbs_datafiles.sql
DBAID=datafile_ids.txt
TBS=PSAPERP
SIZE=10
 
[ -f $SQLGETID ] && rm $SQLGETID
touch $SQLGETID
echo -e "connect / " >> $SQLGETID
echo -e "spool ${DBAID}" >> $SQLGETID
echo -e "select FILE_ID from dba_data_files where TABLESPACE_NAME = '${TBS}';"  >> $SQLGETID
echo -e "spool off"  >> $SQLGETID
echo -e "exit"  >> $SQLGETID
 
sqlplus /NOLOG @$SQLGETID
sleep 5
[ -f $DBAID.tmp ] && rm $DBAID.tmp
touch $DBAID.tmp
grep -v -e FILE_ID -e "-" -e "rows selected" $DBAID >> $DBAID.tmp
mv $DBAID.tmp $DBAID
 
[ -f $SQLSHRINKID ] && rm $SQLSHRINKID
touch $SQLSHRINKID
echo -e "connect / " >> $SQLSHRINKID
for i in $(cat $DBAID)
do
        echo -e "alter database datafile ${i} resize ${SIZE}M;" |tee -a $SQLSHRINKID
done
echo -e "exit"  >> $SQLSHRINKID
 
vi $SQLSHRINKID
sqlplus /NOLOG @$SQLSHRINKID
 
exit 0

Oracle Steuertabellen im SAP prüfen

Transaktion TX SE16 öffnen und folgende Tabellen auf korrekte Einträge zu PSAPERP2(!) prüfen: TSAORA, IAORA, TAORA

SQL> set pages 200 lines 200
SQL> select * from saperp.iaora;
 
TABART          TABSPACE                                                                                   PCTINC       OFREELIST OPCTFR
--------------- ------------------------------------------------------------------------------------------ ------------ --------- ------
USER4           PSAPERPUSR                                                                                 0000         001       10
USER5           PSAPERPUSR                                                                                 0000         001       10
APPL0           PSAPERP2                                                                                   0000         1         10
APPL1           PSAPERP2                                                                                   0000         1         10
APPL2           PSAPERP2                                                                                   0000         1         10
CLUST           PSAPERP2                                                                                   0000         1         10
DDIM            PSAPERP2                                                                                   0000         001       10
DFACT           PSAPERP2                                                                                   0000         004       10
DODS            PSAPERP2                                                                                   0000         004       10
POOL            PSAPERP2                                                                                   0000         1         10
SDIC            PSAPERP2                                                                                   0            1         10
SDOCU           PSAPERP2                                                                                   0000         1         10
SLDEF           PSAPERP740X                                                                                0000         1         10
SLEXC           PSAPERP740X                                                                                0000         1         10
SLOAD           PSAPERP2                                                                                   0000         1         10
SPROT           PSAPERP2                                                                                   0000         1         10
SSDEF           PSAPERP740X                                                                                0000         1         10
SSEXC           PSAPERP740X                                                                                0000         1         10
SSRC            PSAPERP2                                                                                   0000         1         10
TEMP            PSAPERP2                                                                                   0000         1         10
USER            PSAPERPUSR                                                                                 0000         1         10
USER1           PSAPERPUSR                                                                                 0000         1         10
 
22 rows selected.
 
SQL> select * from saperp.taora;
 
TABART          TABSPACE                                                                                   PCTINC       OFREELIST OFREEG OPCTFR OPCTUS
--------------- ------------------------------------------------------------------------------------------ ------------ --------- ------ ------ ------
USER4           PSAPERPUSR                                                                                 0000         001       01     10     40
USER5           PSAPERPUSR                                                                                 0000         001       01     10     40
APPL0           PSAPERP2                                                                                   0000         001       01     10     40
APPL1           PSAPERP2                                                                                   0000         1         1      10     40
APPL2           PSAPERP2                                                                                   0000         1         1      10     40
CLUST           PSAPERP2                                                                                   0000         1         1      10     40
DDIM            PSAPERP2                                                                                   0000         001       01     00     60
DFACT           PSAPERP2                                                                                   0000         004       01     10     60
DODS            PSAPERP2                                                                                   0000         004       01     00     60
POOL            PSAPERP2                                                                                   0000         1         1      10     40
SDIC            PSAPERP2                                                                                   0            1         1      10     40
SDOCU           PSAPERP2                                                                                   0000         1         1      10     40
SLDEF           PSAPERP740X                                                                                0000         1         1      10     40
SLEXC           PSAPERP740X                                                                                0000         1         1      10     40
SLOAD           PSAPERP2                                                                                   0000         1         1      10     40
SPROT           PSAPERP2                                                                                   0000         1         1      10     40
SSDEF           PSAPERP740X                                                                                0000         1         1      10     40
SSEXC           PSAPERP740X                                                                                0000         1         1      10     40
SSRC            PSAPERP2                                                                                   0000         1         1      10     40
TEMP            PSAPERP2                                                                                   0000         1         1      10     40
USER            PSAPERPUSR                                                                                 0000         1         1      10     40
USER1           PSAPERPUSR                                                                                 0000         1         1      10     40
 
22 rows selected.
 
SQL> select * from saperp.tsora;
 
TABSPACE                                                                                   INDSPACE
------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------
PSAPERPUSR                                                                                 PSAPERPUSR
PSAPERP                                                                                    PSAPERP
PSAPERP740X                                                                                PSAPERP740X
PSAPERP2                                                                                   PSAPERP2
 
SQL>

Alten Tablespaceinhalt prüfen

SQL> select TABLE_NAME,TABLESPACE_NAME,PARTITIONED,TABLE_TYPE,DEPENDENCIES from dba_all_tables where TABLESPACE_NAME ='PSAPERP';
 
no rows selected
 
SQL> select TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME ='PSAPERP'; 
 
no rows selected
 
SQL> Select SEGMENT_NAME,SEGMENT_TYPE,PARTITION_NAME,TABLESPACE_NAME from dba_segments where TABLESPACE_NAME = 'PSAPERP';
 
no rows selected
 
SQL>

Sollten hier in Überprüfung noch Objekte angezeigt werden, so müssen diese vor dem Droppen des Tablespaces natürlich in den neuen Tablespace reorganisiert werden! Das BI z.B. legt neue Tabellen/Indizes auch zur Laufzeit an.

Entsprechend explizit über die brtools vor dem Löschen:

  • Tabellenreorg
  • Indexreorg
  • Index-Partition Regorg

Temp Table shrinken und files droppen:

Das folgende Script erlaubt es die generierte SQL Datei vor der eigentlichen Verarbeitung zu bearbeiten. Somit können Tempfiles vom Shrinken/Droppen ausgenommen werden. Hierbei beachten, dass die alte Tablespacegröße für PSAPTEMP wieder hergestellt werden sollte. Sprich die ersten x Files aus dem Script entfernen, damit diese nicht verkleinert und gelöscht werden. Die Temp-Files, die extra für den Reorg angelegt wurden können natürlich gelöscht werden.

per Script:
#!/usr/bin/ksh
#Script zum ermitteln der zu shrinkenden und droppenden Temp-Datafiles eines Tablespaces
#WSP
SQLGETID=get_shrink_temp_datafiles.sql
SQLSHRINKID=shrink_temp_datafiles.sql
DBAID=temp_datafile_ids.txt
TBSFULL=PSAPTEMP
SIZE=100
 
[ -f $SQLGETID ] && rm $SQLGETID
touch $SQLGETID
echo -e "connect / " >> $SQLGETID
echo -e "spool ${DBAID}" >> $SQLGETID
echo -e "select FILE_ID from dba_temp_files where TABLESPACE_NAME = '${TBSFULL}';"  >> $SQLGETID
echo -e "spool off"  >> $SQLGETID
echo -e "exit"  >> $SQLGETID
 
sqlplus /NOLOG @$SQLGETID
sleep 5
[ -f $DBAID.tmp ] && rm $DBAID.tmp 
touch $DBAID.tmp
grep -v -e FILE_ID -e "-" -e "rows selected" $DBAID >> $DBAID.tmp
mv $DBAID.tmp $DBAID
 
[ -f $SQLSHRINKID ] && rm $SQLSHRINKID
touch $SQLSHRINKID 
echo -e "connect / " >> $SQLSHRINKID
for i in $(cat $DBAID)
do
                  echo -e "alter database tempfile ${i} resize ${SIZE}M;" |tee -a $SQLSHRINKID     
                  echo -e "alter database tempfile ${i} drop including datafiles; " |tee -a $SQLSHRINKID
done
echo -e "exit"  >> $SQLSHRINKID
 
echo "\n#####\nAchtung, vi wird jetzt gestartet. Bitte die ersten Tempfiles aus der Liste löschen und speichern!\n#####"
sleep 1
echo "."
sleep 1
echo ".."
sleep 1
echo "..."
sleep 3
vi $SQLSHRINKID
sleep 5 
echo -e "Weiter mit SQLPLUS:"
sqlplus /NOLOG @$SQLSHRINKID
 
exit 0

TEMP Tablespace prüfen

SQL> select FILE_NAME,FILE_ID,TABLESPACE_NAME, STATUS from dba_temp_files;
 
FILE_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME                STATUS
---------- ------------------------------ -------
/oracle/P01/sapdata2/temp_1/temp.data1
         1 PSAPTEMP                       ONLINE
 
/oracle/P01/sapdata2/temp_2/temp.data2
         2 PSAPTEMP                       ONLINE
 
/oracle/P01/sapdata1/temp_3/temp.data3
         3 PSAPTEMP                       ONLINE
 
/oracle/P01/sapdata3/temp_4/temp.data4
         4 PSAPTEMP                       ONLINE
 
/oracle/P01/sapdata4/temp_5/temp.data5
         5 PSAPTEMP                       ONLINE
 
/oracle/P01/sapdata1/temp_6/temp.data6
         6 PSAPTEMP                       ONLINE
 
/oracle/P01/sapdata2/temp_7/temp.data7
         7 PSAPTEMP                       ONLINE
 
/oracle/P01/sapdata3/temp_8/temp.data8
         8 PSAPTEMP                       ONLINE
 
/oracle/P01/sapdata4/temp_9/temp.data9
         9 PSAPTEMP                       ONLINE
 
 
9 rows selected.
 
SQL>

Tablespace umbenennen

Zunächst sollte das ABAP System gestoppt werden, damit keine Zugriffe erfolgen und keine weiteren Objekte im alten Tablespace mehr angelegt werden (auch wenn natürlich zu zuvor die Oracle Steuertabellen geprüft wurden kann dies immer vorkommen!). Der Rename der Tablespaces bedingt, dass der Tablespace offline genommen wird!

Den SAP Application Server stoppen – die DB bleibt online.

stopsap R3

Tablespace PSAPERP umbenennen:

brspace -u / -f tsalter -a rename -t PSAPERP -n PSAPERPOLD

oder per SQL:

alter tablespace PSAPERP rename to PSAPERPOLD;

Wichtig hierbei ist, dass die Funktion Table data class (tabart) handling ausgeführt wird. Anschließend wird der neu angelegte PSAPERP2 Tablespace in PSAPERP umbenannt. Somit sieht das TBS Layout des Systems wieder aus wie vor dem Reorg.

brspace -u / -f tsalter -a rename -t PSAPERP2 -n PSAPERP

oder per SQL:
alter tablespace PSAPERP2 rename to PSAPERP;

Abschließender Reorg und Tabellencheck

Achtung, nur notwendig, wenn in der Zwischenzeit noch Änderungen am Tablespace stattgefunden haben. Schaden tut dieser Schritt natürlich nicht. Sind genügend Ressourcen vorhanden, so kann man diesen letzten Diff-Reorg natürlich auch mit deutlich mehr benutzen Ressourcen ausführen. Hier werden 16 parallele Prozesse gestartet (16 Tabellen gleichzeitig aus dem zu löschenden Tablespace in den Zieltablespace reorganisiert und oracleintern pro Tabelle 8 worker gestartet, die parallel die Tabelle bearbeiten.

brspace  -u / -c force -f tbreorg -s PSAPERPOLD -o SAPERP -t allsel -n PSAPERP -p 16 -e 8
Zusätzlich sollten die Indezes/Index-Partitionen ebenfalls beachtet werden:
brspace -u / -c force -f idrebuild -a rebuild -s PSAPERPOLD -n PSAPERP  -p 16

Jetzt werden die Objekte innerhalb des zu löschenden Tablespaces geprüft. Da das SAP gestoppt ist unterstellen wir mal, es greift kein anderes System mehr auf die Datenbank zu und es werden keine Änderungen mehr innerhalb der Datenbank vorgenommen. Somit dürfen in dem zu löschenden Tablespace keine Tabellen, Indizes oder sonstigen Objekte mehr vorhanden sein:

SQL> select TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME ='PSAPERPOLD';
 
no rows selected
 
SQL> select INDEX_NAME, INDEX_TYPE, TABLESPACE_NAME from dba_indexes where TABLESPACE_NAME = 'PSAPERPOLD';
 
no rows selected

Der Tablespace PSAPERPOLD ist leer und kann gedropped werden. Auch hier ist es wichtig, dass das Table data class (tabart) handling der brtools ausgeführt wird.

brspace -u / -f tsdrop -t PSAPERPOLD

Plan-Table neu anlegen

SQL> select INDEX_NAME, INDEX_TYPE, TABLESPACE_NAME from dba_indexes where TABLESPACE_NAME = 'PSAPERP';
 
INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME
------------------------------ --------------------------- ------------------------------
SYS_IL0000604437C00036$$       LOB                         PSAPERP
 
SQL> Select SEGMENT_NAME,SEGMENT_TYPE,PARTITION_NAME,TABLESPACE_NAME from dba_segments where TABLESPACE_NAME = 'PSAPERP';
 
SEGMENT_NAME                                                                      SEGMENT_TYPE       PARTITION_NAME                 TABLESPACE_NAME
--------------------------------------------------------------------------------- ------------------ ------------------------------ ------------------------------
PLAN_TABLE                                                                        TABLE                                             PSAPERP
SYS_IL0000604437C00036$$                                                          LOBINDEX                                          PSAPERP
SYS_LOB0000604437C00036$$                                                         LOBSEGMENT                                        PSAPERP
 
SQL> drop table PLAN_TABLE;
 
Table dropped.
 
SQL> commit;
 
Commit complete.
 
SQL> select INDEX_NAME, INDEX_TYPE, TABLESPACE_NAME from dba_indexes where TABLESPACE_NAME = 'PSAPERP';
 
no rows selected
 
SQL> @/oracle/P01/11203/rdbms/admin/utlxplan.sql
 
Table created.
 
SQL> commit;
 
Commit complete.
 
SQL> Select SEGMENT_NAME,SEGMENT_TYPE,PARTITION_NAME,TABLESPACE_NAME from dba_segments where TABLESPACE_NAME = 'PSAPERP';
 
no rows selected
 
SQL>

SAP starten und die DB Statistiken aktualisieren

Das SAP System kann jetzt wieder gestartet werden.

startsap

Anschließend sollten die Statistiken für den neuen Tablespace erstellt werden. Da in diesem Beispiel auf Ressourcen keine Rücksicht genommen werden muss mit 32 parallelen Prozessen:

nohup brconnect -u / -c -f stats -t PSAPERP -f collect -p 32 &

Oracle Steuertabellen prüfen

Die Transaktion TX SE16 öffnen und folgende Tabellen auf korrekte Einträge zu PSAPERP und PSAPERP2 (!) überprüfen. Da der alte PSAPERP Tablespace zwischenzeitig umbenannt und gelöscht wurde und der neue Tablespace PSAPERP2 ebenfalls umbenannt wurde, dürfen entsprechend dem aktuellen Systemzustand nur Tablespace-Einträge für PSAPERP vorhanden sein. PSAPERP2 oder PSAPERPOLD dürfen nicht mehr vorhanden sein und müssen, sofern dies doch der Fall sein sollte, entsprechend in PSAPERP umgeschrieben werden.

SQL> select * from saperp.iaora;
 
TABART          TABSPACE                                                                                   PCTINC       OFREELIST OPCTFR
--------------- ------------------------------------------------------------------------------------------ ------------ --------- ------
USER4           PSAPERPUSR                                                                                 0000         001       10
USER5           PSAPERPUSR                                                                                 0000         001       10
APPL0           PSAPERP                                                                                    0000         1         10
APPL1           PSAPERP                                                                                    0000         1         10
APPL2           PSAPERP                                                                                    0000         1         10
CLUST           PSAPERP                                                                                    0000         1         10
DDIM            PSAPERP                                                                                    0000         001       10
DFACT           PSAPERP                                                                                    0000         004       10
DODS            PSAPERP                                                                                    0000         004       10
POOL            PSAPERP                                                                                    0000         1         10
SDIC            PSAPERP                                                                                    0            1         10
SDOCU           PSAPERP                                                                                    0000         1         10
SLDEF           PSAPERP740X                                                                                0000         1         10
SLEXC           PSAPERP740X                                                                                0000         1         10
SLOAD           PSAPERP                                                                                    0000         1         10
SPROT           PSAPERP                                                                                    0000         1         10
SSDEF           PSAPERP740X                                                                                0000         1         10
SSEXC           PSAPERP740X                                                                                0000         1         10
SSRC            PSAPERP                                                                                    0000         1         10
TEMP            PSAPERP                                                                                    0000         1         10
USER            PSAPERPUSR                                                                                 0000         1         10
USER1           PSAPERPUSR                                                                                 0000         1         10
 
22 rows selected.
 
SQL> select * from saperp.taora;
 
TABART          TABSPACE                                                                                   PCTINC       OFREELIST OFREEG OPCTFR OPCTUS
--------------- ------------------------------------------------------------------------------------------ ------------ --------- ------ ------ ------
USER4           PSAPERPUSR                                                                                 0000         001       01     10     40
USER5           PSAPERPUSR                                                                                 0000         001       01     10     40
APPL0           PSAPERP                                                                                    0000         001       01     10     40
APPL1           PSAPERP                                                                                    0000         1         1      10     40
APPL2           PSAPERP                                                                                    0000         1         1      10     40
CLUST           PSAPERP                                                                                    0000         1         1      10     40
DDIM            PSAPERP                                                                                    0000         001       01     00     60
DFACT           PSAPERP                                                                                    0000         004       01     10     60
DODS            PSAPERP                                                                                    0000         004       01     00     60
POOL            PSAPERP                                                                                    0000         1         1      10     40
SDIC            PSAPERP                                                                                    0            1         1      10     40
SDOCU           PSAPERP                                                                                    0000         1         1      10     40
SLDEF           PSAPERP740X                                                                                0000         1         1      10     40
SLEXC           PSAPERP740X                                                                                0000         1         1      10     40
SLOAD           PSAPERP                                                                                    0000         1         1      10     40
SPROT           PSAPERP                                                                                    0000         1         1      10     40
SSDEF           PSAPERP740X                                                                                0000         1         1      10     40
SSEXC           PSAPERP740X                                                                                0000         1         1      10     40
SSRC            PSAPERP                                                                                    0000         1         1      10     40
TEMP            PSAPERP                                                                                    0000         1         1      10     40
USER            PSAPERPUSR                                                                                 0000         1         1      10     40
USER1           PSAPERPUSR                                                                                 0000         1         1      10     40
 
22 rows selected.
 
SQL> select * from saperp.tsora;
 
TABSPACE                                                                                   INDSPACE
------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------
PSAPERPUSR                                                                                 PSAPERPUSR
PSAPERP740X                                                                                PSAPERP740X
PSAPERP                                                                                    PSAPERP
 
SQL>
  • Die Tabellen TAORA (Tabellen) bzw. IAORA (Indizes) enthalten die Zuordnung TABART -> Tablespace.
  • Die Tabellen TGORA (Tabellen) bzw. IGORA (Indizes) enthalten die Zuordnung TABKAT -> Speicherparameter.
  • Die Tabelle TSORA enthält die Zuordnung Tabellen-Tablespace -> Index-Tablespace.
  • Die Tabelle DD09L enthält TABKAT und TABART für alle Objekte mit technischen Einstellungen.
  • Die Tabellen DDART und DARTT enthalten Informationen über die verfügbaren TABARTen.

About the author