SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
Datenbankmigration nach Unicode mit dem
DMU-Tool
Erfahrungen bei der Migration für ein großes Logistikunternehmen

© CGI Group Inc. & loopback.org
Wer sind wir?
– Hamburg

(Germany) GmbH & Co. KG

• IT-Consulting seit 2003
• Spezialist für individuelle

• Business & IT Consulting
• Systemintegration und

Lösungen

Outsourcing Services

Jan Schreiber
• Senior Consultant
• Oracle DBA seit 1998

Wolfgang Schick
• Senior Consultant
• Oracle Developer seit 1997

2

&
Motivation
Warum Unicode?
Kunde und Anwendung
• International aufgestelltes LogistikUnternehmen 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

&
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

&
Unicode und Oracle
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

&
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

&
MultiByte: Speicherbedarf pro Zeichen
• AL32UTF8 ist ein
dynamischer
MultiByte-Zeichensatz

• 1-4 Bytes pro
abzubildendem
Zeichen

Quelle: Oracle Globalization Support Guide 11.2

9

&
Migrationspfade
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

&
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

&
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

&
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

&
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

&
Entscheidungsmatrix und Risiken
Methode / Risiko

Export / Import

CSALTER

DMU

Parallelumgebung

Aufwand und
Vorarbeiten

Mittel

Mittel

Mittel

Hoch

Dauer des DowntimeFensters

Lange

Mittel

Mittel

Sehr kurz

Kosten für HardwareRessourcen

Hoch

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 getestet

Mittel - Hoch

Gering

17

&
Analyse und
Durchführung der Migration
Analyse der Ausgangsdaten
• Analyse mittels CSSCAN
• Ausgangs-Datensatz: WE8ISO8859P15
• Sonderzeichen in der Anwendung
• Sonderzeichen im Data Dictionary
[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

19

&
Analyse der Ausgangsdaten
• Spaltenbreiten reichen nicht aus, um
MultiByte-Zeichen aufzunehmen
• Definition erfolgte in BYTE

[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%

20

&
Analyse mit DMU
• Database Scan Results - Current Data
Need No
Conversion

Need Conversion

Exceed Column
Limit

Exceed Data Type
Limit

Invalid Binary
Representation

Total

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
CPI SIT

Need No Change
(Scheduled)
25414677735

Need Conversion
(Scheduled)
235114013

Invalid Representation
(Scheduled)
563

Over Column Limit
(Scheduled)
41143109

563 Fälle „invalid
binary representation“

Over Type Limit
(Scheduled)
72

72 Fälle passen nicht
in die Spalten

21

&
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

&
Invalid Binary Representation
• Text entspricht keiner Repräsentation
• Binärer Wert macht weder im Ausgangs (-P15) noch ZielZeichensatz (AL32UTF8) Sinn
• Detektivarbeit nötig
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

23

&
Sinnsuche bei invaliden Sonderzeichen
Tabelle
AR_UIC_MAN_AUSGL
KR_PROMPT_FRM

Erklärung
Nur eine Zeile betroffen

Offset
8E

Nur eine Zeile betroffen

91,92

Beispiel
RDE-H�,11/11
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
9F
und Beschreibungen betroffen

Schrottsorte:� Pakete Sorte 6, Oriented
strand board�-Platten "OSB", aus Holz

LS_REFERENZEN
LS_TEXTE

60 Zeilen in „Ref-Nr“

9F, 85

Passau � Nickelsdorf

130 Text-Zeilen

9F, 85

Frachtzahler: ZRS � Schenker Sarajevo

Straßennamen in 8 Zeilen

95, 97, 8A,
82

�CSAI �T, 137 RUE DE
L`UNIVERSIT�

Kurznamen in 17 Zeilen

97, 8D

EVRAZ V�TKOVICE STEEL, A.S

Bemerkung in 1 Zeile

82

TRINEC - STAR� M�STO

9 Zeilen, Bemerkungen und
Bezeichnung

8A, 82, 85

KUMMERL�STR. 1, 18, RUE DES
R�SINIERS, HOJE T�STRUP

ST_PA_ADRESSEN_JN
ST_PA_PARTNER_JN
ST_PA_STANDORTE
ST_PA_STANDORTE_JN

24

&
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

&
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

&
Bereinigung durch Skripte

27

&
Sonderzeichen im Data Dictionary
Objekt
SYS.SOURCE$

Problem
-Invalid binary representation

Beschreibung
(PL/SQL-)Quelltexte

-Requiring conversion

SYS.TRIGGER$

-Requiring conversion (17 Zeilen)

Quelltexte der Datenbank-Trigger

• müssen separat behandelt werden
• Im PL/SQL Source Code
• In Triggern
1

--st20110902 #12468 � CPI: Änderung der Zuordnung des GNRMB und ERLMB über die 6steligge 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

28

&
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

&
Datenbankwachstum
Tablespace

Used

Free

Total

AUTOEXTEND

SYSTEM

5,515.69 MB

4,634.31 MB

10,150 MB

Yes

XDB

0.06 MB

104.94 MB

105 MB

96.94 MB

53.06 MB

150 MB

Yes

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

Maximum
Extension

Yes

K064_T_ST

Minimum
Extension
0 MB

0 MB

0 MB

0 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

Insgesamt 60GB zusätzlich, < 10%

30

&
Scan mit DMU
• 16 Prozesse
• Dauer 3h

• Kann abstürzen
• Drop_repository.sql

31

&
Status

32

&
Bereinigung in der DMU GUI

33

&
Abschluss der Bereinigungsphase

34

&
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

&
Konvertierungsphase
• 17 Stunden Laufzeit

• DMU setzt bei voller FRA oder fehlendem AUTOEXTEND sauber
wieder auf

36

&
Nachbereitung der Migration
Nacharbeiten: SQL Developer

38

&
Umschreiben von Packages
• XML-Ausgabe mit UTL_FILE.PUT_RAW anpassen
/* 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;

• Inkompatible Clients auf WE8ISO8859P15 belassen

39

&
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

&
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

&
Anpassungen in Oracle Forms
• Alle Forms-Module neu übersetzen
• Signatur der Datenbank-Objekte hat sich geändert

42

&
Fazit
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 Ausgangsdatenbank 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

&
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

&
Vielen Dank für Ihre Aufmerksamkeit!

Jan Schreiber

Wolfgang Schick

Position

Geschäftsführer

Position

Unit Manager

Straße
PLZ Ort

An der Alster 83
D-20099 Hamburg

Straße
PLZ Ort

Am Limespark 2
D-65843 Sulzbach

Telefon
Telefax

+49 (0) 40-2263236 0
+49 (0) 40-2263236 99

Telefon
Telefax

+49 178 9277 807
+49 (0) 6196 7742 555

E-Mail

jans@loopback.org

E-Mail

wolfgang.schick@cgi.de

46

&
Backup Folien

© CGI Group Inc. & loopback.org
Oracle Unicode
Support

48

&

Mais conteúdo relacionado

Destaque

Programa de rutas científicas
Programa de rutas científicasPrograma de rutas científicas
Programa de rutas científicas
mdelmarbio
 
Tormenta rpg manual do combate - taverna do elfo e do arcanios
Tormenta rpg   manual do combate - taverna do elfo e do arcaniosTormenta rpg   manual do combate - taverna do elfo e do arcanios
Tormenta rpg manual do combate - taverna do elfo e do arcanios
OlinoBoz
 
Master Dan Hegelund
Master Dan HegelundMaster Dan Hegelund
Master Dan Hegelund
Dan Hegelund
 
Studie #Xununu14: Reichweiten der Mitarbeiterprofile vs. Corporate Profile
Studie #Xununu14: Reichweiten der Mitarbeiterprofile vs. Corporate ProfileStudie #Xununu14: Reichweiten der Mitarbeiterprofile vs. Corporate Profile
Studie #Xununu14: Reichweiten der Mitarbeiterprofile vs. Corporate Profile
Michael Rajiv Shah
 

Destaque (18)

Programa de rutas científicas
Programa de rutas científicasPrograma de rutas científicas
Programa de rutas científicas
 
Intro to Scaling your Web App on the Cloud with AWS (for frontend developers)...
Intro to Scaling your Web App on the Cloud with AWS (for frontend developers)...Intro to Scaling your Web App on the Cloud with AWS (for frontend developers)...
Intro to Scaling your Web App on the Cloud with AWS (for frontend developers)...
 
Presentación Protección de datos como estrategia empresarial: Un reto y una o...
Presentación Protección de datos como estrategia empresarial: Un reto y una o...Presentación Protección de datos como estrategia empresarial: Un reto y una o...
Presentación Protección de datos como estrategia empresarial: Un reto y una o...
 
Cap 5 minerales_industriales
Cap 5 minerales_industrialesCap 5 minerales_industriales
Cap 5 minerales_industriales
 
weißBLAU 02/16 - Das Magazin des Marketing Club München
weißBLAU 02/16 - Das Magazin des Marketing Club MünchenweißBLAU 02/16 - Das Magazin des Marketing Club München
weißBLAU 02/16 - Das Magazin des Marketing Club München
 
BABAHOYO
BABAHOYOBABAHOYO
BABAHOYO
 
Tormenta rpg manual do combate - taverna do elfo e do arcanios
Tormenta rpg   manual do combate - taverna do elfo e do arcaniosTormenta rpg   manual do combate - taverna do elfo e do arcanios
Tormenta rpg manual do combate - taverna do elfo e do arcanios
 
E metales 2011
E metales 2011E metales 2011
E metales 2011
 
Actividadpequera
ActividadpequeraActividadpequera
Actividadpequera
 
Rolling stones
Rolling stonesRolling stones
Rolling stones
 
"Ma dove vai se il contenuto non ce l'hai? Il ciclo di vita di un buon conten...
"Ma dove vai se il contenuto non ce l'hai? Il ciclo di vita di un buon conten..."Ma dove vai se il contenuto non ce l'hai? Il ciclo di vita di un buon conten...
"Ma dove vai se il contenuto non ce l'hai? Il ciclo di vita di un buon conten...
 
Procesos Constructivos - Sistema estructural de losas: Vigueta y Bovedillas
Procesos Constructivos - Sistema estructural de losas: Vigueta y BovedillasProcesos Constructivos - Sistema estructural de losas: Vigueta y Bovedillas
Procesos Constructivos - Sistema estructural de losas: Vigueta y Bovedillas
 
Hernia inguinal e hidrocele
Hernia inguinal e hidroceleHernia inguinal e hidrocele
Hernia inguinal e hidrocele
 
Mükemmel İngilizce Dersi Geniş Zaman. Ücretsizdir.
Mükemmel İngilizce Dersi Geniş Zaman. Ücretsizdir. Mükemmel İngilizce Dersi Geniş Zaman. Ücretsizdir.
Mükemmel İngilizce Dersi Geniş Zaman. Ücretsizdir.
 
Master Dan Hegelund
Master Dan HegelundMaster Dan Hegelund
Master Dan Hegelund
 
Deber 1
Deber 1Deber 1
Deber 1
 
Studie #Xununu14: Reichweiten der Mitarbeiterprofile vs. Corporate Profile
Studie #Xununu14: Reichweiten der Mitarbeiterprofile vs. Corporate ProfileStudie #Xununu14: Reichweiten der Mitarbeiterprofile vs. Corporate Profile
Studie #Xununu14: Reichweiten der Mitarbeiterprofile vs. Corporate Profile
 
ESTRATEGIAS Y RECURSOS DIDÁCTICOS
ESTRATEGIAS Y RECURSOS DIDÁCTICOSESTRATEGIAS Y RECURSOS DIDÁCTICOS
ESTRATEGIAS Y RECURSOS DIDÁCTICOS
 

Oracle Datenbank Migration nach Unicode (DOAG 2013)

  • 1. Datenbankmigration nach Unicode mit dem DMU-Tool Erfahrungen bei der Migration für ein großes Logistikunternehmen © CGI Group Inc. & loopback.org
  • 2. Wer sind wir? – Hamburg (Germany) GmbH & Co. KG • IT-Consulting seit 2003 • Spezialist für individuelle • Business & IT Consulting • Systemintegration und Lösungen Outsourcing Services Jan Schreiber • Senior Consultant • Oracle DBA seit 1998 Wolfgang Schick • Senior Consultant • Oracle Developer seit 1997 2 &
  • 4. Kunde und Anwendung • International aufgestelltes LogistikUnternehmen 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 &
  • 5. 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 &
  • 7. 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 &
  • 8. 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 &
  • 9. MultiByte: Speicherbedarf pro Zeichen • AL32UTF8 ist ein dynamischer MultiByte-Zeichensatz • 1-4 Bytes pro abzubildendem Zeichen Quelle: Oracle Globalization Support Guide 11.2 9 &
  • 11. 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 &
  • 12. 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 &
  • 13. 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 &
  • 14. 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 &
  • 15. 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 &
  • 16. Entscheidungsmatrix und Risiken Methode / Risiko Export / Import CSALTER DMU Parallelumgebung Aufwand und Vorarbeiten Mittel Mittel Mittel Hoch Dauer des DowntimeFensters Lange Mittel Mittel Sehr kurz Kosten für HardwareRessourcen Hoch 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 getestet Mittel - Hoch Gering 17 &
  • 18. Analyse der Ausgangsdaten • Analyse mittels CSSCAN • Ausgangs-Datensatz: WE8ISO8859P15 • Sonderzeichen in der Anwendung • Sonderzeichen im Data Dictionary [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 19 &
  • 19. Analyse der Ausgangsdaten • Spaltenbreiten reichen nicht aus, um MultiByte-Zeichen aufzunehmen • Definition erfolgte in BYTE [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% 20 &
  • 20. Analyse mit DMU • Database Scan Results - Current Data Need No Conversion Need Conversion Exceed Column Limit Exceed Data Type Limit Invalid Binary Representation Total 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 CPI SIT Need No Change (Scheduled) 25414677735 Need Conversion (Scheduled) 235114013 Invalid Representation (Scheduled) 563 Over Column Limit (Scheduled) 41143109 563 Fälle „invalid binary representation“ Over Type Limit (Scheduled) 72 72 Fälle passen nicht in die Spalten 21 &
  • 21. 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 &
  • 22. Invalid Binary Representation • Text entspricht keiner Repräsentation • Binärer Wert macht weder im Ausgangs (-P15) noch ZielZeichensatz (AL32UTF8) Sinn • Detektivarbeit nötig 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 23 &
  • 23. Sinnsuche bei invaliden Sonderzeichen Tabelle AR_UIC_MAN_AUSGL KR_PROMPT_FRM Erklärung Nur eine Zeile betroffen Offset 8E Nur eine Zeile betroffen 91,92 Beispiel RDE-H�,11/11 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 9F und Beschreibungen betroffen Schrottsorte:� Pakete Sorte 6, Oriented strand board�-Platten "OSB", aus Holz LS_REFERENZEN LS_TEXTE 60 Zeilen in „Ref-Nr“ 9F, 85 Passau � Nickelsdorf 130 Text-Zeilen 9F, 85 Frachtzahler: ZRS � Schenker Sarajevo Straßennamen in 8 Zeilen 95, 97, 8A, 82 �CSAI �T, 137 RUE DE L`UNIVERSIT� Kurznamen in 17 Zeilen 97, 8D EVRAZ V�TKOVICE STEEL, A.S Bemerkung in 1 Zeile 82 TRINEC - STAR� M�STO 9 Zeilen, Bemerkungen und Bezeichnung 8A, 82, 85 KUMMERL�STR. 1, 18, RUE DES R�SINIERS, HOJE T�STRUP ST_PA_ADRESSEN_JN ST_PA_PARTNER_JN ST_PA_STANDORTE ST_PA_STANDORTE_JN 24 &
  • 24. 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 &
  • 25. 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 &
  • 27. Sonderzeichen im Data Dictionary Objekt SYS.SOURCE$ Problem -Invalid binary representation Beschreibung (PL/SQL-)Quelltexte -Requiring conversion SYS.TRIGGER$ -Requiring conversion (17 Zeilen) Quelltexte der Datenbank-Trigger • müssen separat behandelt werden • Im PL/SQL Source Code • In Triggern 1 --st20110902 #12468 � CPI: Änderung der Zuordnung des GNRMB und ERLMB über die 6steligge 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 28 &
  • 28. 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 &
  • 29. Datenbankwachstum Tablespace Used Free Total AUTOEXTEND SYSTEM 5,515.69 MB 4,634.31 MB 10,150 MB Yes XDB 0.06 MB 104.94 MB 105 MB 96.94 MB 53.06 MB 150 MB Yes 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 Maximum Extension Yes K064_T_ST Minimum Extension 0 MB 0 MB 0 MB 0 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 Insgesamt 60GB zusätzlich, < 10% 30 &
  • 30. Scan mit DMU • 16 Prozesse • Dauer 3h • Kann abstürzen • Drop_repository.sql 31 &
  • 32. Bereinigung in der DMU GUI 33 &
  • 34. 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 &
  • 35. Konvertierungsphase • 17 Stunden Laufzeit • DMU setzt bei voller FRA oder fehlendem AUTOEXTEND sauber wieder auf 36 &
  • 38. Umschreiben von Packages • XML-Ausgabe mit UTL_FILE.PUT_RAW anpassen /* 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; • Inkompatible Clients auf WE8ISO8859P15 belassen 39 &
  • 39. 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 &
  • 40. 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 &
  • 41. Anpassungen in Oracle Forms • Alle Forms-Module neu übersetzen • Signatur der Datenbank-Objekte hat sich geändert 42 &
  • 42. Fazit
  • 43. 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 Ausgangsdatenbank 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 &
  • 44. 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 &
  • 45. Vielen Dank für Ihre Aufmerksamkeit! Jan Schreiber Wolfgang Schick Position Geschäftsführer Position Unit Manager Straße PLZ Ort An der Alster 83 D-20099 Hamburg Straße PLZ Ort Am Limespark 2 D-65843 Sulzbach Telefon Telefax +49 (0) 40-2263236 0 +49 (0) 40-2263236 99 Telefon Telefax +49 178 9277 807 +49 (0) 6196 7742 555 E-Mail jans@loopback.org E-Mail wolfgang.schick@cgi.de 46 &
  • 46. Backup Folien © CGI Group Inc. & loopback.org