Als PDF Downloaden!

Transcription

Als PDF Downloaden!
Tipps & Tricks: November 2010
Bereich:
DBA
Erstellung:
11/2010 bk
Versionsinfo:
10.2 11.2
Letzte Überarbeitung:
11/2010 bk
Characterset Migration
Standen Sie auch schon mal vor dem Problem, auf einer bestehenden Datenbank den Zeichensatz wechseln zu
müssen?
Eigentlich wird das Charset bei der Installation der Datenbank festgelegt. Es gibt aber drei Möglichkeiten es auch
noch nachträglich zu ändern. Oracle spricht an dieser Stelle von einer Characterset Migration.
Wir wollen in diesem Tipp die Möglichkeit den Zeichensatz, mithilfe des von Oracle gelieferten Skript CSALTER,
zu ändern näher beleuchten.
In den Datenbank Versionen 8i und 9i konnte über den Befehl ALTER DATABASE CHARACTER SET der
Zeichensatz geändert werden. Dieser Befehl wird ab Version 10g nicht mehr unterstützt. Seit der Version 10g gibt
es dafür das Skript CSALTER, das ohne eine vorherige Prüfung auf Fehler nicht läuft.
Bevor wir richtig starten sind noch einige Vorbereitungen bzw. Überlegungen notwendig:
Die erste und wichtigste Überlegung ist, welches Characterset soll verwendet werden.
Für die Migration ist entscheidend, ob das neue Charset ein Superset des alten ist.
Es gibt zwei Arten von Supersets:
Ein logisches Superset bedeutet, dass alle Zeichen in beiden Charactersets vorhanden sind, plus neue
Zeichen in einem der beiden.
Ein binäres Superset hat die gleichen Eigenschaften des logischen mit dem Zusatz, dass in beiden
Charactersets die Zeichen den gleichen Binärcode haben.
Mit dem CSALTER Skript kann nur dann ein Wechsel stattfinden, wenn es sich bei dem neuen Zeichensatz um
ein binäres Superset handelt oder keine Zeichen gespeichert sind die anders codiert sind. Mit dem Skript werden,
genau wie mit dem Befehl ALTER DATABASE CHARACTER SET, keine Änderungen an der Speicherung der
Zeichen vorgenommen.
Doch nun zu den Vorarbeiten. Als erstes muss ein Schema angelegt werden damit die Skripte funktionieren.
Dieses Schema und die benötigten Objekte werden mit dem CSMINST Skript angelegt. Verbinden Sie sich über
SQL*PLUS mit der Datenbank als SYSDBA und führen Sie das CMSINST Skript aus.
@?\rdbms\admin\CSMINST.SQL
Wenn das Schema installiert ist wird als nächster Schritt eine Prüfung durchgeführt, ob eine Migration möglich ist.
Das Skript kann interaktiv gestartet werden oder alternativ mit einem Parameterfile.
Hier die Interaktive Variante, der Aufruf aus der DOS Umgebung mit CSSCAN. Dann werden der Reihe nach
Username und Passwort, die Art des Scans, das neue Characterset, die Arraysize und die Anzahl an Prozessen
abgefragt.
C:\>csscan
Character Set Scanner v2.2 : Release 11.2.0.1.0 - Production on Fr Okt 22 11:06:16 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 1 von 4
Username: sys as sysdba
Password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
(1)Full database, (2)User, (3)Table, (4)Column: 1 > 1
Current database character set is WE8MSWIN1252.
Enter new database character set name: > WE8ISO8859P15
Enter array fetch buffer size: 1024000 >
Enter number of scan processes to utilize(1..64): 1 > 8
Enter number of scan processes to utilize(1..64): 1 > 8
Enumerating tables to scan...
. process 1 scanning SYS.SOURCE$[AAAADfAABAAAAXYAAA]
. process 2 scanning SYS.SOURCE$[AAAADfAABAAASOAAAA]
. process 3 scanning SYS.PARAMETER$[AAAAH3AABAAAAzgAAA]
.....
Von dem Scanskript werden drei Ausgabedateien angelegt:
scan.out
In dieser Datei werden alle Ausgaben des Scans mitprotokolliert.
scan.txt
Ist eine Auswertung der Scanergebnisse. Hier steht drin, ob und was sich ändert. Ob die Daten und das
Dictionary geändert werden können.
scan.err
In dieser Datei stehen alle Fehler, die behandelt werden müssen bevor eine Migration des Charactersets möglich
ist. Es gibt in der Oracle Doku bzw. auf der Oracle Support Seite viele Anweisungen wie auf unterschiedliche
Fehlermeldungen reagiert werden kann.
Das Skript CSSCAN muss nach Beseitigung eventueller Fehler nochmals ausgeführt werden sonst ist keine
Migration durch das CSALTER möglich.
Sind alle Fehler beseitigt kann mit der Migration begonnen werden. Dazu muss die Datenbank in den
RESTRICTED Modus gefahren werden.
Es wird dringend empfohlen spätestens an dieser Stelle eine komplette Datenbank Sicherung zu machen! Die
folgenden Änderungen können nicht rückgängig gemacht werden!
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup restrict
ORACLE instance started.
Total System Global Area 855982080 bytes
Fixed Size
2180544 bytes
Variable Size
587205184 bytes
Database Buffers
264241152 bytes
Redo Buffers
2355200 bytes
Database mounted.
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 2 von 4
Database opened.
SQL> @@?\rdbms\admin\csalter.plb
0 rows created.
Function created.
Function created.
Procedure created.
This script will update the content of the Oracle Data Dictionary.
Please ensure you have a full backup before initiating this procedure.
Would you like to proceed (Y/N)?Y
old 6:
if (UPPER('&conf') <> 'Y') then
new 6:
if (UPPER('Y') <> 'Y') then
Checking data validity...
begin converting system objects
PL/SQL procedure successfully completed.
Alter the database character set...
CSALTER operation completed, please restart database
PL/SQL procedure successfully completed.
0 rows deleted.
Function dropped.
Function dropped.
Procedure dropped.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 855982080 bytes
Fixed Size
2180544 bytes
Variable Size
587205184 bytes
Database Buffers
264241152 bytes
Redo Buffers
2355200 bytes
Database mounted.
Database opened.
SQL> select parameter, value from nls_database_parameters where
parameter='NLS_CHARACTERSET';
PARAMETER
VALUE
------------------- ---------------------------------------NLS_CHARACTERSET
WE8ISO8859P15
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 3 von 4
Damit wurde die Characterset Migration erfolgreich durchgeführt.
Das Ausführen des CSSCAN Skript ist auch für die anderen Migrationsarten ein wichtiger erster Schritt. Damit
wird z.B. auch festgestellt, ob Tabellenspalten vergrößert werden müssen, um Umlaute in einem Multibyte
Zeichensatz aufnehmen zu können.
Eine weitere Optionen, wann eine solche Migration durchzuführen ist, wäre:
Eine neue Datenbank mit dem richtigen Zeichensatz ist zu erstellen und die Daten werden mittels Export und
Import transportiert. Das ist notwendig wenn, z.B. von einem Singlebyte zu einem Multibyte Zeichensatz migriert
werden soll.
Als Mittelweg, wenn es sich nur um wenige Objekte handelt die nicht mit dem Skript migriert werden können, ist
es möglich, diese Objekte erst zu exportieren. Dann werden die Objekte gelöscht und die Migration mit dem Skript
durchgeführt. Im Anschluss daran werden die Objekte wieder importiert.
Diese und andere Fragen rund um Oracle werden natürlich auch in unseren Schulungen bzw. von unserem
Consulting- und Supportteam beantwortet.
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 4 von 4