downtime-minimierung für sap-schema-migrationen mit oracle … · an der leiten 37 d-91177...

48
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]

Upload: others

Post on 17-Mar-2020

3 views

Category:

Documents


0 download

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   |      4  

Warum? Blick auf die Daten

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   |      13  

Datentransfer – Extents – Mig-Ext

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   |      22  

Indexaufbau

§  Natürlich nologging

04.12.14   |      23  

Constraints

§  Enable Novalidate §  Was kümmert uns die Datenkonsistenz

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   |      26  

Downtime Minimierung Changetracking - HiPAS

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   |      30  

Datenbank Tuning LGWR (Normal)

04.12.14   |      31  

Datenbank Tuning LGWR (NOWAIT-BATCH)

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   |      39  

Generelles Datenbank Tuning

§  recyclebin='off' §  resource_manager_plan=''

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   |      45  

HiPAS

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);

04.12.14   |      47  

HiPAS minimal Downtime

04.12.14   |      48  

§  Fragen? Keine? §  Vielen Dank!