downtime-minimierung für sap-schema-migrationen mit oracle … · an der leiten 37 d-91177...
TRANSCRIPT
An der Leiten 37 D-91177 Thalmässing
www.pasolfora.com
pasolfora GmbH
05.12.14
Downtime-Minimierung für SAP-Schema-Migrationen mit
Oracle Features
Andreas Prusch [email protected] Benjamin Gampert [email protected]
04.12.14 | 2
Wer sind wir?
§ pasolfora GmbH § Gründungsjahr 2013 => junge Firma § Trotzdem: Mitarbeiter mit fast 100 Jahren Oracle
Erfahrung J § pasolfora beschäftigt sich mit:
§ Datenbank-Migration § Automatisierung § Storage-Architekturen § IT-Architektur-Beratung § Lizenzoptimierung
04.12.14 | 3
Agenda (Logischer Transfer)
§ Warum? RMAN ist doch super schnell § Ist das denn „supported“ ? § Grundsätzlicher Migrationsablauf bei logischem Transfer § Datentransfer Tuning
§ Standard Tabellen § Partitionierte Tabellen § Blob Tabellen § Long Spalten
§ Characterset Migrationen (Unicode) § Indexaufbau Tuning
§ Auto DOP § Constraints § Datenbank Tuning
§ Redo § Undo § Tablespaces Temp/Undo § Generell
§ Migrationstools § O2O, Data Pump
§ HiPAS § Fragen
04.12.14 | 5
Support bei SAP
§ SAP Note 1848918 § The SAP migration from Oracle Solaris SPARC to
Oracle Solaris X64 or vice versa is treated as a homogeneous system copy. From SAP's side no migration service (nor SAP certified migration consultant) is required....
... In addition to the R3load based system copy procedure several other Oracle specific methods... can be used
04.12.14 | 6
Support bei SAP
§ SAP Note 819826 § therefore, this Integration Assessment will not give
Vendor any rights to claim an SAP-certified integration for the Third-Party Product or any recommendation by SAP. i.a Jürgen Becker SAP ICC (Senior Technical Consultant) NOTE: SAP implementations can vary from customer to customer and are dependant on the specific scenarios at customer site. Only the generic scenarios in the above mentioned test environment were investigated during this Integration Assessment. Any data consistency, performance, support, functionality of the Third-Party Product is the sole responsibility of Vendor.
04.12.14 | 7
Grundsätzlicher Migrationsablauf
§ Analyse Quellsystem § Metadata § Tabellenanalyse
§ Datentransfer § DB-Link Tabellen Transfer § Entladen, Beladen
§ Metadaten Aufbau § Constraints
04.12.14 | 8
Analyse Quellsystem
§ Statistiken, immer eine gute Idee. Kann man später mit „rübernehmen“ § dbms_stats.gather_dictionary_stats § dbms_stats.gather_schema_stats
§ Struktur der Schema Objekte § dbms_metadata.get_ddl
04.12.14 | 9
Analyse Quellsystem
1* select dbms_metadata.get_ddl('TABLE', 'APR$LD$TAB0', 'APR') ddl from dual DDL -------------------------------------------------------------------------------------------------------- CREATE TABLE "APR"."APR$LD$TAB0" ( "PK" NUMBER(*,0),
"FK" NUMBER(*,0), "KEY1" NUMBER(*,0), "KEY2" NUMBER(*,0), "KEY3" NUMBER(*,0), "PAYLOAD1" VARCHAR2(4000), "PAYLOAD2" VARCHAR2(4000), "PAYLOAD3" VARCHAR2(4000), CONSTRAINT "APR$LD$TAB0$PK" PRIMARY KEY ("PK")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "APR3" ENABLE ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "APR3"
04.12.14 | 10
Analyse Quellsystem
1* select dbms_metadata.get_ddl('INDEX', 'APR$LD$TAB0$PAYLOAD1', 'APR') ddl from dual DDL --------------------------------------------------------------------------------------------------- CREATE INDEX "APR"."APR$LD$TAB0$PAYLOAD1" ON "APR"."APR$LD$TAB0" ("APR"."INDEXPAYLOAD"("PAYLOAD1")) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "APR3"
04.12.14 | 11
Datentransfer
§ Standard Tabellen § Extent-basiertes Kopieren auf Basis von dba/
user_extents und Tabellengrößen § Partitionierte Tabellen
§ pro Partition § Blobs
§ Extent-basiertes Kopieren auf Basis von user_extents und Größen aller Segmente
§ Longs § Vorher konvertieren mit dbms_redefinition § Oder während der Migration mit z.B. HiPAS
04.12.14 | 12
Datentransfer - Redefinition
set serveroutput on size unl exec dbms_redefinition.can_redef_table('APR2','APR$LD$LONG1',dbms_redefinition.cons_use_pk); exec dbms_redefinition.start_redef_table('APR2','APR$LD$LONG1','APR$LD$LONG1_REDEF', 'pk,fk, key1, key2, key3, payload1, payload2, to_lob(payload3) payload3', orderby_cols=>'PK'); exec dbms_redefinition.sync_interim_table('APR2', 'APR$LD$LONG1', 'APR$LD$LONG1_REDEF'); exec dbms_redefinition.finish_redef_table('APR2', 'APR$LD$LONG1', 'APR$LD$LONG1_REDEF');
04.12.14 | 14
Datentransfer
GRP MIN_RID MAX_RID ---------- ------------------ ------------------ 6 AANGE+AAJAAAjCAAAA AANGE+AAJAAAjD/CcQ 9 AANGE+AAJAAAjIAAAA AANGE+AAJAAAjJ/CcQ 20 AANGE+AAJAAAjuAAAA AANGE+AAJAAAjv/CcQ 28 AANGE+AAJAAAkGAAAA AANGE+AAJAAAkH/CcQ 37 AANGE+AAJAAAkiAAAA AANGE+AAJAAAkj/CcQ 41 AANGE+AAJAAAk2AAAA AANGE+AAJAAAk3/CcQ 42 AANGE+AAJAAAk6AAAA AANGE+AAJAAAk7/CcQ 64 AANGE+AAJAAAlyAAAA AANGE+AAJAAAlz/CcQ 69 AANGE+AAJAAAmQAAAA AANGE+AAJAAAmR/CcQ 70 AANGE+AAJAAAmiAAAA AANGE+AAJAAAmj/CcQ 92 AANGE+AAJAAAnWAAAA AANGE+AAJAAAnl/CcQ 5 AANGE+AAJAAAi+AAAA AANGE+AAJAAAi//CcQ 12 AANGE+AAJAAAjUAAAA AANGE+AAJAAAjV/CcQ 15 AANGE+AAJAAAjcAAAA AANGE+AAJAAAjd/CcQ 24 AANGE+AAJAAAj6AAAA AANGE+AAJAAAj7/CcQ 25 AANGE+AAJAAAj+AAAA AANGE+AAJAAAj//CcQ 29 AANGE+AAJAAAkIAAAA AANGE+AAJAAAkJ/CcQ 30 AANGE+AAJAAAkKAAAA AANGE+AAJAAAkL/CcQ 35 AANGE+AAJAAAkeAAAA AANGE+AAJAAAkf/CcQ 55 AANGE+AAJAAAlYAAAA AANGE+AAJAAAlZ/CcQ 62 AANGE+AAJAAAlwAAAA AANGE+AAJAAAlx/CcQ
04.12.14 | 15
Datentransfer
§ Tabellen mit LOB Spalten § LOB-Spalte normalerweise eigenes Segment § Addieren aller Lob Segments und addieren der
Segmente § „Maßstabsgerechte“ Aufteilung des Hauptsegments.
04.12.14 | 16
Datentransfer
§ HWM Contention § Table Extent Allocation
§ event='44951 TRACE NAME CONTEXT FOREVER, LEVEL 1024'
§ Definieren der Tabellen mit „allocate extent“ § select ALLOCATION_TYPE, tablespace_name from
dba_tablespaces; § AUTO in 11g/12c: 8, 128, 1024 ...
04.12.14 | 17
Datentransfer DB-LINK!
§ DB-Link = verteilte Transaktion § Quelle: commit_point_strength = 10 § damit die Produktion immer Koordinator ist und
deshalb nicht stehen bleibt § Problem ist ernster als erwartet. Leseoperationen
werden auf der nicht Koordinatorseite blockiert TX-Enqueue
04.12.14 | 18
Unicode
§ nls_length_semantics='CHAR' (geht nicht bei Data Pump)
§ DB-Links konvertieren Zeichen automatisch § Oracle Locale Builder erlaubt allerhöchste
Flexibilität
04.12.14 | 19
Indexaufbau – Auto DOP
§ DOP=Degree of Parallelism § dbms_resource_manager.calibrate_io
§ pmbps , mbps
§ Export/Import Statistiken § parallel_degree_policy=auto § parallel_min_time_threshold=30 § parallel_degree_limit § parallel_servers_target § parallel_max_servers § parallel_force_local § optimizer_dynamic_sampling=6
04.12.14 | 20
Indexaufbau – Auto DOP
§ Statement dauert länger als parallel_min_time_threshold
§ => der ausgeführte DOP ist das Minimum von parallel_degree_limit und dem errechneten DOP
§ Statement wird verzögert, bis aktuelle Anzahl > parallel_servers_target < parallel_max_servers
§ Besser nur lokal => parallel_force_local § Wenn keine guten Statistiken dann
dynamic_sampling einsetzen
04.12.14 | 21
Indexaufbau Beispiel
SQL> alter session set PARALLEL_DEGREE_POLICY=auto; Session altered. SQL> alter session set PARALLEL_MIN_TIME_THRESHOLD=1; Session altered. SQL> alter session set PARALLEL_DEGREE_LIMIT=10; Session altered. create index px_test on APR$LD$TAB12 (payload1) call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 2 0 0 Execute 1 0.33 9.65 46 33 3267 0 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 2 0.33 9.66 46 35 3267 0 Misses in library cache during parse: 1 Optimizer mode: ALL_ROWS Parsing user id: 229 Number of plan statistics captured: 1 Rows (1st) Rows (avg) Rows (max) Row Source Operation ---------- ---------- ---------- --------------------------------------------------- 10 10 10 PX COORDINATOR (cr=5 pr=0 pw=0 time=8953516 us) 0 0 0 PX SEND QC (ORDER) :TQ10001 (cr=0 pr=0 pw=0 time=0 us) 0 0 0 INDEX BUILD NON UNIQUE PX_TEST (cr=0 pr=0 pw=0 time=0 us)(object id 0) 0 0 0 SORT CREATE INDEX (cr=0 pr=0 pw=0 time=0 us) 0 0 0 PX RECEIVE (cr=0 pr=0 pw=0 time=0 us cost=3282 size=198800000 card=100000) 0 0 0 PX SEND RANGE :TQ10000 (cr=0 pr=0 pw=0 time=0 us cost=3282 size=198800000 card=100000) 0 0 0 PX BLOCK ITERATOR (cr=0 pr=0 pw=0 time=0 us cost=3282 size=198800000 card=100000) 0 0 0 TABLE ACCESS FULL APR$LD$TAB12 (cr=0 pr=0 pw=0 time=0 us cost=3282 size=198800000 card=100000)
04.12.14 | 24
Downtime Minimierung Changetracking
§ Downtime Minimierung durch Nachfahren § Golden Gate (Log Stream) § HiPAS (Trigger Replikation) § Streams/CDC (Log Stream) (zur Abkündigung
angekündigt)
04.12.14 | 25
Downtime Minimierung Changetracking - GoldenGate
Quelle: hPp://www.oracle.com/us/products/middleware/data-‐integraXon/oracle-‐goldengate-‐ds-‐2030490.pdf
04.12.14 | 27
Downtime Minimierung Changetracking
§ Data Pump/HiPAS § Konistenter Abzug mit prinzipiell folgendem
Mechanismus § select * from table as of scn;
§ O2O § Inkonsistent. Braucht handle Collisions in GoldenGate
04.12.14 | 28
Datenbank Tuning
§ Ruf nach dem DBA
§ DB_FAST = true § besser DB_FAST=extraordinary_performance
§ Leider NEIN. Sondern im Normalfall Detailtuning mit eher geringem Einfluss!
04.12.14 | 29
Datenbank Tuning
§ Tuning I/O Verhalten § db_writer_processes=20 § Redo
§ Grosse Redos wegen Checkpoints (>10g) § commit_logging = batch § commit_wait = nowait § Aber : Keine Inkonsistenzen innerhalb der DB
04.12.14 | 32
UNDO & Migration
§ UNDO Engpässe und Abbrüche vermeiden § Alle logischen Migrationsmethoden sind
abhängig von UNDO § Contention verlängert Downtime!
04.12.14 | 33
UNDO - Retention
§ Beeinflussung durch: Tablespace-Definition § Fixed Size Tablespace: undo_retention wird
ignoriert § Beste Einstellung für Systemlast und Tablespace-
Größe wird getroffen § Autoextensible Tablespace: Hinzufügen von
UNDO-Segmenten möglich § Längere Erhaltung von „alten“ Segmenten § undo_retention ist ein Richtwert!
04.12.14 | 34
UNDO Auto-Tuning
§ Auto-Tuning Mechanismus funktioniert meist sehr gut
§ Probleme bei hohem und wechselnden Workload
§ Contention äußert sich in Wait-Events § latch: row cache objects (dc_rollback_segments)
§ enq: US – contention
04.12.14 | 35
UNDO Auto-Tuning
§ Langlaufende Queries können „getunte“ Retention in die Höhe treiben § UNDO Segmente können wegen hoher Autotuning-
Einstellung nicht überschrieben werden § => Speicherengpass im UNDO! § Wechsel des Workloads erfordert aber viele
Segmente für aktive Transaktionen § => Contention - Undo GC vs. Undo
Anforderungen § Beim Zuschalten zusätzlicher Segmente in kurzer Zeit § Beim „Korrigieren“ der Auto-Tuning Einstellung
04.12.14 | 36
UNDO Parameter
Parameter Beschreibung
_highthreshold_undoretenXon Definiert max. Undo-‐RetenXon, nach der inakXve Segmente zum Überschreiben freigegeben werden
_undo_autotune = false Schaltet das automaXsche Undo-‐Tuning ab
_smu_debug_mode (Version < 10.2.0.5) Ändert die Berechnungsart der tuned_undoreten)on bei Fixed Size Undo Tablespaces
_rollback_segment_count Definiert die Anzahl der Undo-‐Segmente an, die online gehalten werden sollen
04.12.14 | 37
Tablespaces „Best Practices“
§ TEMP/UNDO § Anlegen von mehreren kleinen Temp/Undo
Tablespaces mit autoextend on und maxsize § Dann einmal Testen § => TEMP und UNDO haben die richtige Grösse
04.12.14 | 38
Datenbank Tuning
§ Cache Size § SGA_TARGET statt MEMORY_TARGET
§ use_large_pages (Locked Kernel Memory)
§ _PGA_MAX_SIZE § Weil pga_aggregate_target eigene MAX Werte
propagiert § vm.max_map_count (def 65536)
§ Erhöhung der Memory Map Areas auf vm.max_map_count = 262144 (ORA-4030)
04.12.14 | 40
Die Frage nach RAC Support
§ O2O => nein § Data Pump => Ja
§ http://www.oracle.com/technetwork/database/datapump11gr2-twp-rac-132795.pdf
§ HiPAS skaliert mit RAC, kennt Instance Affinity
04.12.14 | 41
Migrationstools
§ O2O § Analyse § Spezialbehandlungen § Analyse § Skriptverteilung § Transfer/Transfertuning § Kontrollen
§ Fazit: Alles machbar, aber teilweise sehr kompliziert, manuelles Tuning erforderlich
04.12.14 | 42
Migrationstools
§ Data Pump § mächtiges Tool § unterstützt die meisten Datentypen § Unterstützt DB-Links § Parallelisiert beim Ent- und Beladen § Oft langsam bei großen BLOB Segmenten
04.12.14 | 43
Migrationstools
§ HiPAS (reines PL/SQL Tool) § Setzt alle vorgestellten Tuningmaßnahmen ein § Optimiert automatisch § Einfaches Handling
§ HiPAS inkl. HiPAS-Replikation § Minimal Downtime möglich
04.12.14 | 44
HiPAS
§ Install § Tablespace auf Quelle und Ziel anlegen § @install-source § @install-dest
§ Migration (vollautomatisches Tuning) § exec migrate(‘<username>‘);
04.12.14 | 46
HiPAS
§ Minimal Downtime Migration § Tabellen für die Replikation bestimmen § exec apr$r$$replication.prepare_replication;
§ Migration mit SCN starten § select current_scn into select_scn from v$database@apr$miglink; § update param set param_value = select_scn where param_name =
'SCN'; § exec migrate(‘<username>‘);
§ Änderungen die während der Migration angefallen sind nachfahren § exec apr$r$$replication.start_apply(applySartSCN => 10757070853);