Zurück

Wechseln des Zeichensatzes in einer Oracle-DB

Die Definition des Zeichensatzes wird beim Erstellen der Oracle Datenbank festgelegt. Stellt man nach der Produktionsaufnahme fest, dass der Zeichensatz geändert werden sollte, so kann dies nicht mehr ohne Weiteres durchgeführt werden. Die bereits gespeicherten Daten müssen konvertiert werden. Folgendes Vorgehen hat sich bewährt um diese Aufgabe zu lösen.

1). Schema exportieren

Das Schema muss unter dem Zeichensatz exportiert werden unter dem dieses kreiert wurde, dies ist im Beispiel NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1.

2). Datenbank komplett neu kreieren mit Characterset: EE8ISO8859P2

        CREATE DATABASE PPB
        CONTROLFILE     REUSE
        MAXDATAFILES    256
        MAXINSTANCES    4
        MAXLOGFILES     62
        MAXLOGMEMBERS   3
        MAXLOGHISTORY   1600
        CHARACTER SET   "EE8ISO8859P2"
        DATAFILE  '/data/ppb/db1/PPB_sys_1.dbf' SIZE 100M REUSE
        AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
   LOGFILE GROUP 1 ('/data/ppb/db1/PPB_log1A.rdo',
                    '/data/ppb/db1/PPB_log1B.rdo') SIZE 5M REUSE,
           GROUP 2 ('/data/ppb/db1/PPB_log2A.rdo',
                    '/data/ppb/db1/PPB_log2B.rdo') SIZE 5M REUSE;

3). Schema PPP importieren

Das Schema muss unter dem Zeichensatz importiert werden, welches im Exportfile vorhanden ist. Dies ist im Beispiel NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

4). Sämtliche PUBLIC Synonyme neu erstellen

Die PUBLIC Synonyme werden nicht exportiert / importiert und müssen deshalb neu erstellt werden.

5). Umgebungsvariable umsetzen

Die Umgebungsvariable wird nun auf den "richtigen" Zeichensatz gestellt, dies ist im Beispiel NLS_LANG=POLISH_POLAND.EE8ISO8859P2.

6). Testen

Die aktuellen Settings können mit folgendem Query ermittelt werden:

SQL> select name,substr(VALUE$,1,20) from sys.props$;
NAME                           SUBSTR(VALUE$,1,20)
------------------------------ --------------------
DICT.BASE                      2
NLS_LANGUAGE                   POLISH
NLS_TERRITORY                  POLAND
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               POLAND
NLS_NUMERIC_CHARACTERS         .,
NLS_DATE_FORMAT                DD-MON-YY
NLS_DATE_LANGUAGE              AMERICAN
NLS_CHARACTERSET               EE8ISO8859P2
NLS_SORT                       BINARY
NLS_CALENDAR                   GREGORIAN
NLS_RDBMS_VERSION              7.3.3.0.0
GLOBAL_DB_NAME                 PPB.WORLD
EXPORT_VIEWS_VERSION           3