Dieser Punkt ist am schwersten zu beherrschen, denn eigentlich hat die Datenbank alles richtig gemacht, und trotzdem sind die Daten falsch. Das kommt dann vor, wenn zwei Systeme Daten ohne Konvertierung übertragen. Wurde beispielsweise die Datenbank mit dem Zeichensatz »WE8MSWIN1252
«
erstellt und auf einem beliebigen Client (zum Beispiel auf der Kommandozeile unter DOS) die Variable »NLS_LANG=GERMAN_GERMANY.WE8MSWIN1252
«
eingestellt, dann geht die Datenbank davon aus, dass keine Zeichenkonvertierung notwendig ist, da ja beide Zeichensätze identisch sind. Für den DOS-Client sieht es jetzt bei der Abfrage so aus, als ob die Zeichen richtig dargestellt würden, denn auf dem Rückweg werden sie ja ebenfalls nicht konvertiert. Bei der Abfrage mit einem Windows-Client (etwa mit dem Tool DELL Toad for Oracle) stellen wir allerdings plötzlich fest, dass irgendwelche Hieroglyphen gespeichert wurden (Abbildung 1).
Dieser Fehler kann nur durch Entladen der Daten über eine entsprechende Schnittstelle und anschließendes erneutes Laden mit dem "richtigen" Zeichensatz behoben werden. Die Migration wird dadurch erheblich erschwert. Glücklicherweise sind diese Fehler heute eher selten anzutreffen, weil sie dank der grafischen Werkzeuge schnell erkennbar sind.
Die eigentliche Migration erfolgt in vier Schritten (Abbildung 2):
AL32UTF8
«
) aufgebaut. Als angenehmer Nebeneffekt ergibt sich dabei, dass sich die Datenbank komplett reorganisieren lässt, das heißt überflüssige Daten, die etwa durch die Installation von Beispielschemata in die Datenbank gelangten, kann man jetzt eliminieren.dbms_metadata
«
an. Der Autor hat sehr gute Erfahrungen mit Toad for Oracle gemacht, da das Tool über eine grafische Schnittstelle ganz einfach die komplette Definition auch mehrerer Schemata als ASCII-Datei erstellt und in den Editor kopiert. Über »find
«
und »replace
«
lassen sich dann gegebenenfalls Änderungen (zum Beispiel Umstellung von »NVARCHAR2
«
auf »VARCHAR2
«
) durchführen.NLS_LENGTH_SEMANTICS
«
:SQL> ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR;
Damit wird dafür gesorgt, dass allen Zeichen-Spalten (also »CHAR
«
, »VARCHAR2
«
, etc.), die keine explizite Längensemantik verwenden, »CHAR
«
als Längensemantik zugewiesen wird. Damit passen die Umlaute auch wieder in die Felder.