Fehlerhafte Tabellenumsetzung korrigieren
Bei der Änderung einer Tabellenstruktur kann es passieren, dass die Tabelle aufgrund von Konvertierungsfehlern nicht umgesetzt werden kann. Nach Änderung eines Tabellenfeldes wird der Dateninhalt auf eine Schattentabelle direkt auf der Datenbank kopiert, die Struktur der Original-Tabelle wird geändert und dann werden die Tabelleninhalte wieder zurückkopiert. Hierbei kann es zu Fehlern kommen. Wir zeigen Ihnen hier, wie Sie bei einem solchen Fehler Ihre Daten trotzdem retten können.
Achtung!
Dieser Tipp ist nur für Profis geeignet!!
Für Datenverluste oder Fehler übernehmen wir keine Haftung!
Hintergrund
Wenn Sie eine Tabellenstruktur ändern, so wird der Inhalt auf eine Schattentabelle kopiert. Diese Schattentabelle existiert nicht im R/3, sondern nur auf der Datenbank.
Danach wird die Struktur der Originaltabelle geändert und die Daten aus der Schattentabelle wieder — Feld für Feld — zurück kopiert.
Der Fehler
Bei dem Zurückkopieren der Daten kann es zu Fehlern kommen. Nämlich immer dann, wenn der Feldinhalt nicht in das neue Format konvertiert werden kann.
Beispiel:
Sie ändern das Feld Ihrer Tabelle vom Format “CHAR” auf das Format “NUMC”. Normalerweiser sollten dann in dem Feld nur numerische Werte stehen. Nun kann es aber sein, dass trotzdem Zeichen in diesem Feld stehen. Das Feld kann nun nicht konvertiert werden
Vorgehen
Geraten Sie nicht in Panik! Die Daten sind noch da! In der besagten Schattentabelle ist der gesamte Tabelleninhalt gespeichert.
Ihre Originaltabelle ist zwar im Status “inaktiv”, Sie können sie aber trozdem kopieren. Kopieren Sie also die Tabelle, zum Beispiel von “ZTAB1” auf “ZTAB2” und ändern Sie die Felder wieder auf den ursprünglichen Typ. Aktivieren Sie die neue Tabelle.
Bearbeiten Sie die Originaltabelle mit der Transaktion SE11. Gehen Sie in das Datenbankutility (Menü: Hilfsmittel – Datenbankutility) und rufen Sie das “Objektprotokoll” auf. Hier sehen Sie den Namen der Schattentabelle: QCMZTAB1. Wenn der Name der Originaltabelle sehr lang war, wird der Rest bei der Benamsung der QCM-Tabelle einfach abgeschnitten.
Rufen Sie nun mit der SE38 das Programm RADBTCPY auf. In das Feld “Quelltabelle” geben Sie den Namen der Schattentabelle ein, in das Feld “Zieltabelle” den Namen der kopierten Tabelle.
Führen Sie das Programm aus. Die Daten werden nun von der Schattentabelle in die kopierte Tabelle kopiert. Von da an sollte es kein Problem mehr sein, die Fehler in der Tabelle zu bereinigen…
Praxisbeispiel
Die Tabelle
Die Tabelle ZTEST1 hat die Felder MANDT, LAND und WERT und ist wie folgt gefüllt:
MANDT LAND WERT
—– —- —————–
030 DE 123.45
030 DK 134,23
030 ES 120.43
Wenn Sie nun den Datentyp des Feldes “WERT” von “CHAR” auf “DEC” ändern (Datenelement CHAR16 nach DEC8_2) ist die Aktivierung nicht möglich; Sie müssen den Tabellenumsetzer verwenden.
Gehen Sie hierzu im Menü auf “Hilfsmittel – Datenbank-Utility” und klicken Sie auf [Aktivieren und Datenbank anpassen] [X] Daten erhalten.
Sie erhalten nun einen Programmabbruch:
CONVT_NO_NUMBER: ” 134,23 ” nicht als Zahl interpretierbar
Sie können nun die Tabelle mit der Transaktion SE11 nicht mehr ändern, da sie gesperrt ist (Meldung “ZTEST ist gesperrt, da ein Aufsetzprotokoll existiert”).
Fehleranalyse
Gehen Sie erneut in das Datenbankutility (Transaktion SE14) und wählen Sie [Bearbeiten]. Sie sehen folgende Meldung:
Klicken Sie auf [Anpassung analysieren] und Sie erhalten die folgenden Informationen:
Unten sehen Sie den Punkt “Umbenannte Ausgangstabelle”. Hier steht der Name der Schattentabelle. Da diese Tabelle nur auf der Datenbank existiert, aber nicht im R/3-Dictionary angelegt ist, können Sie die Tabelleninhalte mit der Transaktion SE16 nicht anzeigen lassen!
Daten Retten
Um die Daten zu erhalten, kopieren Sie in der SE11 die Tabelle ZTEST1 auf ZTEST2. Ändern Sie den Typ des Feldes “WERT” wieder auf “CHAR16” und aktivieren Sie die Tabelle.
Führen Sie mit der Transaktion SE38 oder SA38 das Programm RADBTCPY aus. Geben Sie als Quelltabelle den Namen der Schattentabelle an: QCMZTEST1 und als Zieltabelle Ihre Tabellen-Kopie: ZTEST2.
Fehler beheben
Sie müssen nun die Daten der Schattentabelle QCMZTEST1 löschen, andernfalls können die Daten nicht zurück kopiert werden. Mit “normalem” ABAP kommen Sie hier nicht weiter, da die Tabelle ja im Dictionary nicht bekannt ist.
Wir müssen OPEN SQL verwenden. Gehen Sie in die Pflege der Funktionsbausteine (Transaktion SE37) und “Testen” Sie den Baustein DB_EXECUTE_SQL.
ACHTUNG! BEI FALSCHER ANWENDUNG KÖNNEN SIE DATEN UNWIDERRUFLICH LÖSCHEN!
Im Eingabebild des Funktionsbausteins geben Sie beim Parameter STMT den folgenden SQL-Befehl ein:
DELETE FROM QCMZTEST
Die Tabelle QCMTEST wurde nun geleert. Beheben Sie nun die Fehler in der Tabellenkopie ZTEST2, die zu dem Konvertierungsfehler führen. Hierzu müssen Sie einen Report schreiben, oder die Daten über die Tabellenpflege korrigieren.
Daten zurückkopieren
Verwenden Sie nun den Report RADBTCPY erneut, um die Daten von ZTEST2 nach QCMZTEST1 zu kopieren. Deaktivieren Sie das Häkchen “Tabelle exklusiv sperren”.
Sollten noch Werte vorhanden sein, die nicht umgesetzt werden können, so merken Sie es hier ebenfalls an einem Programmabbruch “CONVT_NO_NUMBER”…
Umsetzung fortsetzen
Sie können nun im Datenbank-Utility mit der Umsetzung fortfahren. Die Tabelle sollte danach wieder aktiv sein und alle Daten enthalten.
Hinweis
Mit dem Report ADBC_QUERY kann der Inhalt der Schattentabelle selektiert und angezeigt werden.
</p”>
- Meine Eclipse-Plugins - 22. November 2024
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024