47
© CGI Group Inc. & loopback.org Datenbankmigration nach Unicode mit dem DMU-Tool Erfahrungen bei der Migration für ein großes Logistikunternehmen

Oracle Datenbank Migration nach Unicode (DOAG 2013)

Embed Size (px)

DESCRIPTION

Vortrags-Slides der DOAG-Präsentation zur Datenbankmigration nach Unicode am Fallbeispiel eines großen europäischen Logistik-Unternehmens (Praxisbericht)

Citation preview

Page 1: Oracle Datenbank Migration nach Unicode (DOAG 2013)

© CGI Group Inc. & loopback.org

Datenbankmigration nach Unicode mit dem

DMU-ToolErfahrungen bei der Migration für ein großes Logistikunternehmen

Page 2: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&2

Wer sind wir?

– Hamburg

• IT-Consulting seit 2003

• Spezialist für individuelle

Lösungen

Jan Schreiber

• Senior Consultant

• Oracle DBA seit 1998

(Germany) GmbH & Co. KG

• Business & IT Consulting

• Systemintegration und

Outsourcing Services

Wolfgang Schick

• Senior Consultant

• Oracle Developer seit 1997

Page 3: Oracle Datenbank Migration nach Unicode (DOAG 2013)

Motivation

Warum Unicode?

Page 4: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Kunde und Anwendung

• International aufgestelltes Logistik-

Unternehmen mit Ländergesellschaften

im osteuropäischen Raum

• Mandantenfähiges Rechnungswesen mit

in Österreich

entwickelter Oracle Forms -basierter

Anwendung

• Verschiedene, heterogene Schnittstellen

• Datenbank im Zeichensatz

WE8ISO8859P15

4

Page 5: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Warum Unicode?

• Zukunftssichere Nutzung der Anwendung in allen

Ländergesellschaften, im besonderen in Osteuropa

• Kyrillischer Zeichensatz wird in Adressen, Waren, Firmennamen

verwendet

• Unicode ist Standard

• Für XML, Java und neue Oracle-Datenbanken

• Geeignetes Superset, mit dem alle gängigen Zeichensätze gespeichert

werden können

5

Page 6: Oracle Datenbank Migration nach Unicode (DOAG 2013)

Unicode und Oracle

Page 7: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Unicode-Characteristics

• Globaler Zeichensatz für das Internet

• Beinhaltet nahezu alle „lebendigen“

Sprachen

• Existiert seit 1987

• Unicode 4.0 verwendet zwei 16-bit

Datensätze pro Zeichen

• Mögliche Menge: 1.048.576 Zeichen

• 110.000 Zeichen definiert in Unicode 6.2

7

Page 8: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Unicode in Oracle

• Standard bei neuen Oracle-Datenbanken: AL32UTF8 (NCHAR

AL32UTF16) (UTF-8)

• Oracles „UTF8“ Zeichensatz ist etwas anderes!

• CESU-8 Legacy-Zeichensatz

• AL32UTF8 entspricht der Unicode-4.0 Konvention

• Unicode-Support seit Oracle 8.1

• AL32UTF8 seit Oracle 9i

• Probleme mit 8i-Clients – Oracle UTF8 besser

8

Page 9: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&9

MultiByte: Speicherbedarf pro Zeichen

• AL32UTF8 ist ein

dynamischer

MultiByte-Zeichensatz

• 1-4 Bytes pro

abzubildendem

Zeichen

Quelle: Oracle Globalization Support Guide 11.2

Page 10: Oracle Datenbank Migration nach Unicode (DOAG 2013)

Migrationspfade

Page 11: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Migrationspfade: Neuaufbau

• Neue Datenbank parallel neu aufbauen

• Daten mit DataPump importieren

• Daten werden automatisch konvertiert

• Erfordert doppelte Ressourcen für Zweitsystem (Server,

Storage)

• Paralleler Aufbau & Test, aber Downtime abhängig von:

• Datenvolumen

• IO- und CPU-Performance

11

Page 12: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Migrationspfade: CSSCAN/CSALTER

• Schnell

• In-Place-Umstellung

• CSSCAN prüft auf vorhandene Probleme

• Umstellung kann evtl. nicht erfolgen

• Evtl. partieller Re-Import nötig

• Tools wurden länger nicht mehr weiterentwickelt• Keine Data Dictionary Objekte

• Keine Änderung von Spaltenbreiten

• Nach 11.2 nicht mehr unterstützt

12

Page 13: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Migrationspfade: DMU

• Mit Release 11.1 verfügbar

• Java GUI-Tool, das Datenbank-Packages steuert

• Geführter Workflow für den gesamten Prozess:

• Scan, Reparatur, Konvertierung

• Anschauliche Berichte

• Abschließende Qualitätskontrolle

• Stabil ab 11.2.0.3 (vorher nur mit Patches)

• Java JDK 1.6

13

Page 14: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Migrationspfade:

Abgehängte Migration mit Streams

• Neuaufbau

• Streams-Replikation einrichten

• Anhalten & mit DMU konvertieren

• Replikation wieder aufnehmen & Änderungen übertragen:

Streams konvertiert

• Umschalten

Sehr gut testbar, geringe Umschaltzeit, fast keine Downtime

14

Page 15: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Methodenauswahl

• Constraints:

• Enge Lieferzyklen: Umstellung am Wochenende

• Neuaufbau Parallelumgebung nicht um Budget

• 800GB Datenvolumen: Data Pump Import

nicht im vorgesehenen Downtime Zeitfenster

machbar

• Recovery Zeitfenster muss berücksichtigt

werden

• => CSSCAN und DMU bleiben in der Auswahl

16

Page 16: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Entscheidungsmatrix und Risiken

17

Methode / Risiko Export / Import CSALTER DMU Parallelumgebung

Aufwand und

VorarbeitenMittel Mittel Mittel Hoch

Dauer des Downtime-

FenstersLange Mittel Mittel Sehr kurz

Kosten für Hardware-

RessourcenHoch Gering Gering Sehr hoch

Risiko des nicht

Erreichens von

Meilensteinen vor der

Migration

Mittel Groß Mittel Mittel

Risiko, das ein

Abbruch der

Migration während

Downtime

durchgeführt werden

muss

Mittel, wenn vorher

ausreichend getestet

Mittel, wenn vorher

ausreichend getestetMittel - Hoch Gering

Page 17: Oracle Datenbank Migration nach Unicode (DOAG 2013)

Analyse und

Durchführung der Migration

Page 18: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Analyse der Ausgangsdaten

• Analyse mittels CSSCAN

• Ausgangs-Datensatz: WE8ISO8859P15

• Sonderzeichen in der Anwendung

• Sonderzeichen im Data Dictionary

19

[Scan Summary]

All character type data in the data dictionary are convertible to the new character set

Some character type application data are not convertible to the new character set

[Data Dictionary Conversion Summary]

Data Dictionary Tables:

Datatype Changeless Convertible Truncation Lossy

--------------------- ---------------- ---------------- ---------------- ----------------

Total 15,950,631 30,761 0 0

Total in percentage 99.808% 0.192% 0.000% 0.000%

The data dictionary can not be safely migrated using the CSALTER script

Page 19: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Analyse der Ausgangsdaten

• Spaltenbreiten reichen nicht aus, um

MultiByte-Zeichen aufzunehmen

• Definition erfolgte in BYTE

20

[Application Data Conversion Summary]

Datatype Changeless Convertible Truncation Lossy

--------------------- ---------------- ---------------- ---------------- ----------------

VARCHAR2 14,023,323,258 210,956,840 41,156,679 0

CHAR 39,497,365 0 0 0

LONG 0 0 0 0

CLOB 240,622 27,185 0 0

VARRAY 0 0 0 0

--------------------- ---------------- ---------------- ---------------- ----------------

Total 14,063,061,245 210,984,025 41,156,679 0

Total in percentage 98.239% 1.474% 0.288% 0.000%

Page 20: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Analyse mit DMU

• Database Scan Results - Current Data

21

Need No

ConversionNeed Conversion

Exceed Column

Limit

Exceed Data Type

Limit

Invalid Binary

RepresentationTotal

LONG 623467 cells 186 cells 0 cells 0 cells 0 cells 623653 cells

ANYDATA 362 cells 0 cells 0 cells 0 cells 0 cells 362 cells

VARRAY 23 cells 0 cells 0 cells 0 cells 0 cells 23 cells

VARCHAR2 25325470111 cells 235070069 cells 41143109 cells 72 cells 563 cells 25601683924 cells

CHAR 87276395 cells 0 cells 0 cells 0 cells 0 cells 87276395 cells

CLOB 1307377 cells 43758 cells 0 cells 0 cells 0 cells 1351135 cells

Total 25414677735 cells 235114013 cells 41143109 cells 72 cells 563 cells 25690935492 cells

Total % 98.925% 0.915% 0.160% 0.000% 0.000% 100%

Name

Need No Change

(Scheduled)

Need Conversion

(Scheduled)

Invalid Representation

(Scheduled)

Over Column Limit

(Scheduled)

Over Type Limit

(Scheduled)

CPI SIT 25414677735 235114013 563 41143109 72

563 Fälle „invalid

binary representation“

72 Fälle passen nicht

in die Spalten

Page 21: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Datentypen und Konvertierung

• Nicht zu konvertierende Daten

• Zahlen oder Zeichen, die im Ausgangs- und Ziel-Zeichensatz identisch

abgebildet werden

• 98,93%

• Konvertierbare Daten

• Eindeutige Konvertierung möglich

• VARCHAR2, LONG und CLOB

• 1%, 235 Mio. Zellen

• Invalid Binary Representation

• Over Type Limit

• Over Column Limit

22

Page 22: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Invalid Binary Representation

• Text entspricht keiner Repräsentation

• Binärer Wert macht weder im Ausgangs (-P15) noch Ziel-

Zeichensatz (AL32UTF8) Sinn

• Detektivarbeit nötig

23

Decimal-Wert Hex-Wert Win 8859-15 Erläuterung, wenn ersichtlich

142 8E Ä Ž A accent grave, oder Z mit Umlauten

145, 146 91,92 æ,Æ `, ´ Einfache Hochkommata oder skandinavisches AE

159 9F ƒ Y Florin oder gespiegeltes Y mit Umlauten, oder „-„

133 85 à … Ellipsis (…) als Zeichen, oder a accent grave

149 95 ò • o accent grave oder Bullit Point °

151 97 ù — Doppeler Unterstrich (mdash) „__“, oder u accent grave

138 8A è Š S mit Umlauten, oder e accent grave

130 82 é , Komma, oder e accent aigu

Page 23: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Sinnsuche bei invaliden Sonderzeichen

24

Tabelle Erklärung Offset Beispiel

AR_UIC_MAN_AUSGL Nur eine Zeile betroffen 8E RDE-H�,11/11

KR_PROMPT_FRMNur eine Zeile betroffen 91,92

ortabhängig; �Y� bedeutet das das LOV

in Abhängigkeit von LAND, BHF_NR bzw.

TRADOTTA_ORTE im Kopfsatz zu füllen

ist. Hinweis: Mit CPI 2.0Q (WL09)

korrigiert

LS_GUETER 62 Zeilen in Bemerkungen

und Beschreibungen betroffen9F

Schrottsorte:� Pakete Sorte 6, Oriented

strand board�-Platten "OSB", aus Holz

LS_REFERENZEN 60 Zeilen in „Ref-Nr“ 9F, 85 Passau � Nickelsdorf

LS_TEXTE130 Text-Zeilen 9F, 85 Frachtzahler: ZRS � Schenker Sarajevo

ST_PA_ADRESSEN_JNStraßennamen in 8 Zeilen

95, 97, 8A,

82

�CSAI �T, 137 RUE DE

L`UNIVERSIT�

ST_PA_PARTNER_JNKurznamen in 17 Zeilen 97, 8D EVRAZ V�TKOVICE STEEL, A.S

ST_PA_STANDORTEBemerkung in 1 Zeile 82 TRINEC - STAR� M�STO

ST_PA_STANDORTE_JN 9 Zeilen, Bemerkungen und

Bezeichnung8A, 82, 85

KUMMERL�STR. 1, 18, RUE DES

R�SINIERS, HOJE T�STRUP

Page 24: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Over Column Limit

• Größtenteils BYTE-definierte Spalten

• Mit DMU automatisch konvertierbar

• Alternativ über ALTER TABLE MODIFY COLUMN Skript-basiert

ändern

• Für die Zukunft NLS_LENGTH_SEMANTICS=CHAR

• Oracle empfiehlt neuerdings Session-Parameter

25

Page 25: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Over Type Limit

• Inhalt passt im Multibyte-Zeichensatz nicht

mehr in Typ-Limit

• Zum Beispiel VARCHAR2 mit mehr als 4000 Byte

• Lösung erfordert Datenmodell-Änderung

• Aufteilung in zwei Felder

• Umwandlung in CLOB

• Meist Anpassung der Applikation erforderlich

26

Page 26: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Bereinigung durch Skripte

27

Page 27: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Sonderzeichen im Data Dictionary

• müssen separat behandelt werden

• Im PL/SQL Source Code

• In Triggern

28

Objekt Problem Beschreibung

SYS.SOURCE$ -Invalid binary representation

-Requiring conversion

(PL/SQL-)Quelltexte

SYS.TRIGGER$ -Requiring conversion (17 Zeilen) Quelltexte der Datenbank-Trigger

1--st20110902 #12468 � CPI: Änderung der Zuordnung des GNRMB und ERLMB über die 6-

steligge NHM Nr

AR$LS_UTILS

2 /* �ber die VAL_NUMBER_LOW (1..n) die SATZ-ID fÿr das jeweilige Kennzeichen ST$IO_DIUM_DELTA_EXPORT

3 SELECT REPLACE (p_bezeichnung, '�', 'ö') ST$IO_DIUM_DELTA_EXPORT

4 SELECT REPLACE (v_convert_name, '�', 'L') ST$IO_DIUM_DELTA_EXPORT

5 SELECT REPLACE (v_convert_name, '�', 'l') INTO v_convert_name FROM DUAL; ST$IO_DIUM_DELTA_EXPORT

6 SELECT REPLACE (v_convert_name, '�', 'e') INTO v_convert_name FROM DUAL; ST$IO_DIUM_DELTA_EXPORT

7 SELECT REPLACE (v_convert_name, '�', 'E') INTO v_convert_name FROM DUAL; ST$IO_DIUM_DELTA_EXPORT

8 SELECT REPLACE (v_convert_name, '�', 'S') INTO v_convert_name FROM DUAL; ST$IO_DIUM_DELTA_EXPORT

Page 28: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Sonderzeichen im Data Dictionary

• Sonderzeichen im Dictionary kann auch der DMU nicht heilen

• Umlaute in den PL/SQL-Kommentaren reichen

• Anpassung per Hand wäre möglich

• …wenn nicht zu viele Stellen betroffen sind

• Deinstallation der Software wäre gut

• Wenn es einen Installer gäbe

• Export-, Import wäre gut

• Wenn es ein Applikations-Schema gäbe

• Lösung:

• Auslesen der Trigger und Packages mit DBMS_METADATA.GET_DDL

29

Page 29: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Datenbankwachstum

Insgesamt 60GB zusätzlich, < 10%

30

Tablespace Used Free Total AUTOEXTEND

Minimum

Extension

Maximum

Extension

SYSTEM 5,515.69 MB 4,634.31 MB 10,150 MB Yes 0 MB 0 MB

XDB 0.06 MB 104.94 MB 105 MB Yes

K064_T_ST 96.94 MB 53.06 MB 150 MB Yes 0 MB 0 MB

K256_I_AR_MIG 0.06 MB 13.94 MB 14 MB Yes

K256_I_DEFAULT 0.12 MB 3.88 MB 4 MB Yes

M004_I_BW 14,609.19 MB 654.81 MB 15,264 MB Yes

M004_I_LS 33,212.12 MB 1,237.88 MB 34,450 MB Yes

M004_I_ST 83 MB 46 MB 129 MB Yes

M004_I_TW 1,736.06 MB 563.94 MB 2,300 MB Yes

M004_J_TW 3,399.12 MB 216.88 MB 3,616 MB Yes 205.99 MB 205.99 MB

M004_T_ST_WDP 0.62 MB 69.38 MB 70 MB Yes 0 MB 0 MB

M004_T_TW 3,387.38 MB 212.62 MB 3,600 MB Yes 482.99 MB 482.99 MB

M008_I_RK_SEER 1,952.12 MB 247.88 MB 2,200 MB Yes

M016_J_TW 7,208.06 MB 361.94 MB 7,570 MB Yes 967.17 MB 967.17 MB

M064_I_KR_LOG 26,495.12 MB 83.88 MB 26,579 MB Yes

TOOLS 0.38 MB 3,999.62 MB 4,000 MB Yes 0 MB 0 MB

Page 30: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Scan mit DMU

• 16 Prozesse

• Dauer 3h

• Kann abstürzen

• Drop_repository.sql

31

Page 31: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Status

32

Page 32: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&33

Bereinigung in der DMU GUI

Page 33: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&34

Abschluss der Bereinigungsphase

Page 34: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Konvertierungsphase

• Konvertierung nicht per Skript lieferbar

• DMU erfordert SYSDBA-Rechte

• wurden in diesem Fall temporär eingeräumt

• Bereinigung war zu 90% per Skript machbar

• ARCHIVELOG abschalten

• AUTOEXTEND ON

• alter system set job_queue_processes=0

• alter system set events ’22838 TRACENAME CONTEXT LEVEL 1,

FOREVER’

• …sonst ORA-22839: Direct updates on SYS_NC columns are disallowed

35

Page 35: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Konvertierungsphase

• 17 Stunden Laufzeit

• DMU setzt bei voller FRA oder fehlendem AUTOEXTEND sauber

wieder auf

36

Page 36: Oracle Datenbank Migration nach Unicode (DOAG 2013)

Nachbereitung der Migration

Page 37: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&38

Nacharbeiten: SQL Developer

Page 38: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Umschreiben von Packages

• XML-Ausgabe mit UTL_FILE.PUT_RAW anpassen

• Inkompatible Clients auf WE8ISO8859P15 belassen

39

/* n/a Test fur UTF8-XML-Erzeugung 20120518 Jan Schreiber */

vv_xml_kopf CONSTANT VARCHAR2(200) := '<?xml version="1.0" ' ||

'encoding="UTF-8"?>'; --> Header vom XML-Datei

-- Angepasst an UTF8 Ausgabe jschreib 20120508

WHILE v_pos < v_clob_len

LOOP

BEGIN

dbms_lob.read(lclob_xml_file, v_amount, v_pos, v_buffer);

utl_file.put_raw(v_file

,utl_i18n.string_to_raw(v_buffer, 'AL32UTF8'));

utl_file.fflush(v_file);

v_pos := v_pos + v_amount;

Page 39: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Probleme im Mischbetrieb Unicode / -P15

• Sobald kyrillische Zeichen in die Datenbank gelangen, ist eine

Abwärtskonvertierung in –P15 nicht mehr möglich

• Nicht im Zeichensatz enthaltene Zeichen werden

standardmäßig mit einem „¿“ dargestellt.

40

Page 40: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Rekompilieren aller Packages

• Unbedingt alle Software mit NLS_SEMANTICS=CHAR

rekompilieren

• Vorher auf noch vorhandene Spalten in BYTE-Syntax prüfen:

CHAR_USED=C in DBA_TAB_COLUMNS und

dba_plsql_object_settings (nls_length_semantics)

• Views und Materialized Views kompilieren

41

Page 41: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Anpassungen in Oracle Forms

• Alle Forms-Module neu übersetzen

• Signatur der Datenbank-Objekte hat sich geändert

42

Page 42: Oracle Datenbank Migration nach Unicode (DOAG 2013)

Fazit

Page 43: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Fazit zur Migration nach Unicode

• Die Unicode-Konvertierung mit schlankem Budget und engem Downtime-Fenster konnte mit dem Oracle DMU-Tool erfolgreiches abgeschlossen werden.

• Die Datenbereinigung wurde gut unterstützt und die Konvertierung lief bei allen Datenbanken zuverlässig und schnell ab.

• Wir empfehlen die mit der Migration betrauten Personen und deren Vertreter von Anfang bis Ende in das Projekt einzubinden, weil die Einarbeitung in das Tool umfangreich und aufwendig ist.

• Besonders aufwändig ist die Bereinigung von in der Ausgangs-datenbank vorhandenen Zeichen, die nicht zum Zeichensatz passen.

• Bei Schnittstellen lohnt sich ein Blick auf selbst erstellte dateibasierte Verfahren, die sich bzgl. Zeichensatz als problematisch erweisen könnten.

44

Page 44: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Weiterführende Links

• Blogpost zu dieser Migration

http://blogs.loopback.org/2013/02/datenbankmigration-nach-unicode-2/

• Oracle® Database Globalization Support Guide

http://docs.oracle.com/cd/E11882_01/server.112/e10729/toc.htm

• Oracle® Database PL/SQL Packages and Types Reference

• Oracle Database Migration Assistant for Unicode:

• http://docs.oracle.com/cd/E26101_01/doc/doc.11/e26097/ch4scenarios.htm#BACC

EDBH

• Changing the NLS_CHARACTERSET to AL32UTF8 / UTF8 (Unicode) (MOS Note:

260192.1)

• CSSCAN output explained (MOS Note: 444701.1)

• Wikipedia: Anführungszeichen

• Oracle Database Migration Assistant for Unicode:

• Near-Zero Downtime Migration Model

45

Page 45: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Wolfgang Schick

Position Unit Manager

Straße Am Limespark 2

PLZ Ort D-65843 Sulzbach

Telefon +49 178 9277 807

Telefax +49 (0) 6196 7742 555

E-Mail [email protected]

46

Vielen Dank für Ihre Aufmerksamkeit!

Jan Schreiber

Position Geschäftsführer

Straße An der Alster 83

PLZ Ort D-20099 Hamburg

Telefon +49 (0) 40-2263236 0

Telefax +49 (0) 40-2263236 99

E-Mail [email protected]

Page 46: Oracle Datenbank Migration nach Unicode (DOAG 2013)

© CGI Group Inc. & loopback.org

Backup Folien

Page 47: Oracle Datenbank Migration nach Unicode (DOAG 2013)

&

Oracle Unicode

Support

48