Replikation mit ORACLE Streams 11g DOAG - SIG Database - München – 07.10.2009 Joachim Jaensch Principal Sales Consultant BU ST & PCM Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Oracle Streams - Allgemeines  Stream = Strom, Fluß Â Stream von Informationen innerhalb einer oder verschiedener Datenbanken  Informationen können sein: DML- oder DDL Operationen, Nachrichten, ...  Informationseinheit im Stream wird als „EVENT“ bezeichnet  Implizite Events: DDL und DML Æ LCR‘s (Logical Change Records)  Explizite Events: User-created Information  Realisiert durch Datenbankstruktur und Hintergrundprozesse  Genutzt für Replikation (Replication) und Informationsverteilung (Advanced Queuing)  Oracle und Nicht-Oracle Datenbanken  Es wird Oracle LogMiner Technologie genutzt  Realisiert durch Basis-Elemente: Capture, Staging, Propagation und Apply  Capture nicht für Schemas: SYS, SYSTEM, CTXSYS joachim.jaensch@oracle.com Einsatz von Oracle Streams  Laden von Data Warehouses  Messaging und Benachrichtigungen  Logical Standby Datenbanken  Replication  Minimierung der Downtime bei Upgrades joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Replication mit Oracle Streams  Automatisches Erfassen (Capture), Ablegen (Staging), Weiterleiten (Propagation) und Anwenden (Apply) von DML- und DDL-Operationen  Asynchron  Identische Objekte  Objekte, die durch eine Transformation oder Funktion miteinander verbunden sind  Unterstützt flexibles Verschieben von Daten oder Teilmengen von Daten  Gateways und APIs zur Unterstützung heterogener Umgebungen  Niedrige Belastung für das Produktionssystem joachim.jaensch@oracle.com Oracle Replication - Entwicklung  Oracle 7.1 – Advanced Replication (Snapshots, Multimaster Replication)  Oracle 8.1 – Materialized Views ersetzen Snapshots  Oracle 9.2 – Oracle Streams (Replication, Message Queuing)  Oracle 10.2 – Autotuning Streams Pool, Buffered Messaging, EM Support Simplified APIs, Deklarative Transformation  Oracle 11.1 – Combined Capture & Apply, Streams Advisor & Topology Sychronous Capture, Transparent Data Encryption Support, Split and Merge of a Streams Destination, LCR Tracking  Oracle 11.2 – Compressed Tables, Capture & Apply SecureFile LOBs, Statement DML Handlers, Keep Column Declarative RuleBased Transformation, Automatic Split and Merge of a Streams Destination joachim.jaensch@oracle.com Advanced Replication vs. Oracle Streams Advanced Replication Implementierung Log-Tables based Oracle Streams Queue based Streams Processes Streams Pool DML Änderungen yes yes DDL Änderungen no yes Schema Änderungen no Non-Oracle DBs yes yes (DML only) yes no yes Parallelisierung no yes Flexibilität low high Permanente Verbindungen joachim.jaensch@oracle.com Oracle Streams – Begriffe Source DB, Primary DB, Origine DB, Master DB Quell-Datenbank, deren Daten teilweise oder vollständig propagiert (weiterverteilt) werden Destination DB, Secondary DB, Target DB, Slave DB Ziel-Datenbank, die Daten von einer Source DB empfängt Intermediate DB Verteiler-Datenbank, die Daten erhält und dann weiter propagiert. Single Source Replication (Hub & Spoke) Eine Source DB – ein oder mehrere Destination DB‘s Multiple Source Replication (Hub & Spoke) Mehrere Source DB‘s – ein oder mehrere Destination DB‘s Multimaster Replication, N-Way Replication Mehrere DB‘s sind gleichzeitig Source DB und Destination DB Homogeneous Replication Replication zwischen Oracle DB‘s Heterogeneous Replication Replication zwischen Oracle DB‘s und Fremddatenbanken (z.B.: IBM DB2) joachim.jaensch@oracle.com Oracle Streams – Umgebungen ! Primary Database Primary Secondary Database Database Primary 1 Database ! Single Source Replication ! Secondary Secondary Database Database Hub & Spoke Primary Intermediate Secondary Database Database Database Single Source with Forwarding or Downstream Capture ! ! Primary 2 Primary 3 Database Database ! Multiple Source Replication Multimaster Replication ! = Konflikte joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Oracle Streams – Basis-Elemente Log-based Capture Staging Default Apply Propagation Log-based Capture Staging Default Apply joachim.jaensch@oracle.com Oracle Streams – Server Prozesse Capture CP01, CP02, ... Capture Preparer LogMiner MS00 LogMiner Reader MS01 LogMiner Builder MS02 LogMiner Preparer CJQ0 Job Queue Coordinator J000, J001, ... Job Queue Slaves AP01, AP02, ... Apply Preparer AS01 Apply Reader AS02 Apply Server Propagation Apply joachim.jaensch@oracle.com Oracle Streams – Prozesse Quell-DB Ziel-DB (Source) (Destination) P Queue ------ Propagation LCRs Redolog C Queue ----LCRs Staging Capture A Apply  Verbindung der Datenbanken über Database Link(s)  In der Regel ein Link (Multiple Links möglich) Oracle Streams Prozess joachim.jaensch@oracle.com Multiple Links to same Destination  With GLOBAL_NAMES = TRUE, a database link must be named the same as the global name of the database it connects to. Æ Limits you to one database link per remote server  Connect qualifiers provide a way to create multiple database links to a remote server even with GLOBAL_NAMES = TRUE. CREATE DATABASE LINK sales.acme.com@sales_1 USING ‘pgh_sales’; CREATE DATABASE LINK sales.acme.com@sales_2 USING ‘pgh_sales’; SELECT * FROM hr.jobs@sales.acme.com@sales_1; joachim.jaensch@oracle.com 16 Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Capture Process & Synchronous Capture Oracle Streams Capture Process SE1 SE EE1 NO NO YES YES YES YES Propagation Process YES YES YES Apply Process YES YES YES (Asynchronous, Redolog based) Synchronous Capture * ab: O11gR1 * nur DML joachim.jaensch@oracle.com Capture Process vs. Synchronous Capture (1)  Capture Processes Capture Prozesse erhalten Änderungen über die RedoLog Files (online Redologs, archived Redologs) und erstellen daraus LCRs, die für die Weiterverarbeitung in eine Capture Queue gestellt werden.  Synchronous Captures ab: O11gR1 Synchronous Capture nutzt einen internen Mechanismus zum Erkennen und verarbeiten von DML Änderungen. Es werden auch LCRs aufgebaut, die für die Weiterverarbeitung aber immer in eine Persistent Queue (Platte!) gestellt werden. Es werden keine DDL Änderungen verarbeitet! joachim.jaensch@oracle.com Capture Process vs. Synchronous Capture (2)  Capture Processes werden genutzt:  wenn relativ viele Tabellen-Änderungen verarbeitet werden müssen  bei Replikation ganzer Schematas oder der gesamten Datenbank  wenn DDL-Änderungen verarbeitet werden müssen.  bei Downstream Capture  Synchronous Captures ab: O11gR1  bei nur wenigen Tabellen  wenn nur DML-Änderungen verarbeitet werden müssen. joachim.jaensch@oracle.com Capture Prozess read DML + DDL Capture Reader Server Onlinelog/Archivelog Prefiltering of Changes Capture Preparer Server Capture Preparer Server Capture Preparer Server Merge Redo Records Capture Builder Server Buffered / Persistent Capture Queue joachim.jaensch@oracle.com Implizites und explizites Capture Capture  Oracle Streams erfaßt Events:  Implizit: Log-basierende Erfassung der DML und DDL Statements Replication  Explizit: direktes Schreiben von Nachrichten in eine Queue joachim.jaensch@oracle.com Implizit: Log-basiertes Change Capture  Niedriger Overhead, geringe Wartezeiten der Änderungserfassung  Änderungen in der Datenbank werden ins Online Redolog geschrieben  Oracle Streams verwendet LogMiner zum Auslesen der Änderungen aus dem aktiven Online Redolog oder aus den archivierten Redologs  Supplemental Logging beachten Automatisch für PK, FK und Unique Constraints Spalten bei Prepare ab Version 10.2.  Einschränkungen  nicht erfasste Datentypen:  BFILE, ROWID, UROWID und user-defined types (Object Types, REFs, Varrays, Nested Tables, Oracle Spatial)  nicht erfasste DML-Statements:  CALL, EXPLAIN PLAN, LOCK TABLE  Veränderungen an index-organized tables und object tables joachim.jaensch@oracle.com Downstream Capture Quell-DB (Source) Ziel- (Target) oder Verteiler (Intermediate) DB P Queue ----LCRs Redolog Files      Remote Archiving C A Capture läuft nicht auf der Source Database Standby Redologs auf Ziel-DB Æ Real-Time-Capture (siehe oben!) Archivelog Transport zur Ziel-DB Æ Archivelog-Based Capture Entlastung der Source Database vom Capture Overhead Abhängigkeiten zwischen Source DB und Capture DB wie bei DataGuard (Plattform, Version usw.) joachim.jaensch@oracle.com Downstream Capture – Archived-Log Capture Source DB Target DB C Redolog Archived-Log File Shipping A Queue ----LCRs Archived Redolog Archived-Log Capture joachim.jaensch@oracle.com Downstream Capture – Real-Time Capture Source DB Target DB Standby Redolog C Remote Redolog A Archiving Queue ----LCRs Archived Redolog Archived Standby Redolog Real-Time Capture Zusätzliche LOG_ARCHIVE_DEST_x notwendig! joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Staging Area (Queue) Staging  Staging Area ist als Queue in der DB implementiert  Queue kann gefüllt werden  vom Capture-Prozeß Â direkt von Anwendungen  Queue hat den Datentyp SYS.AnyData  Informationen bleiben in der Queue, bis alle Adressaten sie erhalten haben  Views erlauben das Lesen der Queue mittels SQL  vom Capture-Prozeß erfaßte Änderungen werden als Logical Change Record (LCR) formatiert und in die Staging Area geschrieben  Capture-Prozeß ist immer einer und nur einer Staging Area zugeordnet  LCR hat ein spezifisches Format  LCR enthält immer nur die Informationen zu 1 Row joachim.jaensch@oracle.com Logical Change Record (LCR)  Database Change = LCR  DML  Row change = LCR  Object name, Owner, Type of DML, SCN  OLD, NEW values  Optional attributes: Username, Session, Thread,…  DDL  Object name, owner, Type of DDL, SCN  DDL text  Optional attributes: username, session, thread,…  LOB and LONG  Multiple LCRs per LOB or LONG column  Piecewise chunks joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Propagation: Src Queue Æ Dest Queue Queue -----LCRs Staging Propagation Queue ----LCRs Staging . . . Queue -----LCRs  Nutzt Infrastruktur von AQ  Events können über mehrere Staging Areas “geroutet” werden  Andere Staging Areas können Events anfordern   aus gleicher DB aus anderer DB joachim.jaensch@oracle.com Queue_to_Queue Propagation ab Version 10.2.  Fine-grained control of propagation  Service based in RAC environments  CONNECT_DATA Service_name=GLOBAL_NAME  Connects to specific queue:  SYS$SCHEMA.QNAME.GLOBAL_NAME  GV$ACTIVE_SERVICES  Buffered_queues only joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Apply Prozess Dequeue Apply Reader Server computes dependencies between LCR‘s and Assembling into transaction Apply Preparer Server Check Rules Apply Handler Table A Read Buffered / Persistent Apply Queue Apply Reader Server Apply Reader Server Apply Coordinator Apply Preparer Server Apply Handler Table B Apply Preparer Server Apply Handler Table C Apply Handler Table D joachim.jaensch@oracle.com Apply (Consumption) Apply Replication  Implizit:  Default Apply  Benutzer-definiertes Apply  Explizit: Aus der Queue lesen und verarbeiten  JMS, C, C++, PLSQL, SOAP (XML/HTTP), SMTP  Separate Prozesse für implizites und explizites Apply joachim.jaensch@oracle.com Implizit: Default Apply  Apply Prozeß führt das DML- oder DDL- Statement aus dem gelieferten LCR direkt aus  Prozeß ist einer Source-Datenbank, einer Queue und einem Capture-Prozeß dediziert zugeordnet  Ausführen in/an der lokalen Oracle-Tabelle  Ausführen via DB-Link in/an einer Nicht-Oracle-Tabelle  Einschränkungen bei Datentypen (analog Capture)  Weitergehende Einschränkungen bei DDL  Starten eines angelegten Apply-Prozesses  im Alert – File: AP01 started with pid=15 Owner ist derjenige, der den Prozeß startet  In der Datenbank ist festzulegen, was zu erfassen ist  Beispiel : Apply für Schema HR von DB mas01.world joachim.jaensch@oracle.com Implizit: Benutzer-definiertes Apply  selbst geschriebene Apply-Prozeduren  In PL/SQL, Java, C, C++  Anwendungsmöglichkeiten  Normalisieren oder Denormalisieren von Daten  zusätzliche Felder oder Tabellen mit Daten füllen  Transformationen joachim.jaensch@oracle.com Apply Handlers für LCRs  Ein DDL Handler pro Apply Prozeß Â Mehrere DML Handler   pro Tabelle (DELETE, UPDATE, INSERT, LOB_UPDATE) pro Apply Prozeß Â PreCommit Handler (User-Defined PL/SQL Prozedur)   In Verbindung mit DML Handler In Verbindung mit Message Handler DML Handler Execute LCR Queue ----LCRs Apply LCR DML Handler PreCommit H. Target Table DDL Handler ... joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Rule-based Transformations Capture Staging Apply  Eine regel-basierende Transformation   ist jede Modifikation eines LCRs auf Grundlage einer definierten Regel wird ausgeführt, wenn die Regel mit TRUE evaluiert wurde  Es gibt zwei Typen regel-basierender Transformationen   Declarative rule-based (for LCRs) Custom rule-based: one-to-one, one-to-many (Capture only)  Beispiele für Regeln:   Aktionen abhängig von Änderungsoperation (z.B. Delete) Auswahl von Zeilen auf Basis von Spaltenwerten (Subset Rules) joachim.jaensch@oracle.com Rule Sets (inclusion_rule => FALSE) -- Negative - Rule Set ++ Positive + Rule Set Rules werden zuerst geprüft, Nicht wirksam, wenn eine wenn vorhanden Negative Rule TRUE ist HR.JOB_HISTORY LCR (inclusion_rule => TRUE) - FALSE HR Schema (alle HR Tabellen) LCR + Discard TRUE Rule Engine joachim.jaensch@oracle.com Subset Rules (Column Subsetting)  Regeln können auf Capture, Propagation und Apply angewendet werden  Subset Rules sind Prüfbedingungen, bei denen ein bestimmter Inhalt des LCRs (table columns values) mit einem festen Wert verglichen wird. Publish Rules Engine UPDATE EMP... Subscribe WHERE OBJECT = ‘EMP’ UPDATE EMP... Staging Area joachim.jaensch@oracle.com Declarative LCR Transformations ab Version 10.2.     Schneller als Custom rule-based, weil intern ausgeführt (kein PL/SQL) Nur für LCRs möglich ab Version 11.2. Keep Columns rule-based Transformationen Ausführung vor Custom rule-based Transformationen ADD_COLUMN DELETE COLUMN Source LCR RENAME_COLUMN RENAME_TABLE Modified LCR Target Table RENAME_SCHEMA joachim.jaensch@oracle.com Declarative Transformation - Beispiel BEGIN DBMS_STREAMS_ADM.RENAME_SCHEMA( rule_name => 'CH_SCH_HR_JJ', from_schema_name => 'HR', to_schema_name => 'JJ', step_number => 0); END; /  Schema Wechsel von ‘HR‘ -> ‘JJ‘  step_number legt Ausführungsreihenfolge fest  Nur für DML joachim.jaensch@oracle.com Konflikte und Konfliktlösung  Automatische Konflikterkennung beim Update  Vorgehensweise: Vergleich des aktuellen Wertes am Bestimmungsort mit dem alten Wert der ver-änderten Zeile am Quellort (befindet sich im LCR) 1. Identisch Æ Übernahme der „neuen Werte“ 2. Nicht identisch Æ Konfliktlösungsroutine 3. Konflikt nicht lösbar Æ Transaktion in Exception Queue stellen  Konfliktlösung Routinen zur Konfliktlösung (mitgeliefert): 1. Maximum 2. Minimum 3. Discard 4. Overwrite Benutzerdefinierte Konfliktlösungsroutinen: PL/SQL-Routinen (sind selbst zu erstellen) joachim.jaensch@oracle.com Default Apply mit Error Handler Target Table Queue ----LCRs LCR Apply LCR Apply Changes Conflict Handler resolved resolved LCR Error Queue Error Handler Unresolved Errors  Apply Prozess stellt Fehler fest  Conflict und/oder Error Handlers versuchen den Konflikt zu lösen  Konflikt gelöst Æ Apply  Nichtlösbare Fehler Æ Rollback und Eintrag in die Error Queue joachim.jaensch@oracle.com Konfliktlösung – OSC, Heartbeat-Table DECLARE cols DBMS_UTILITY.NAME_ARRAY; BEGIN cols(1) := 'TNSALIAS'; cols(2) := 'TIMES'; cols(3) := 'GREENWICH_TIME'; DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER( object_name => '&&sample_user..OSC_HEARTBEAT', method_name => 'OVERWRITE', resolution_column => 'TNSALIAS', column_list => cols); END; / joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Oracle Streams - INITORA Parameter GLOBAL_NAMES = TRUE COMPATIBLE = 11.1.0.0 Mandatory! Sollte so hoch wie möglich sein (Enable Features!) LOG_ARCHIVE_DEST_n = Bis zu 10 Archivierungsziele (Log Transport Service bei Downstream Capture) LOG_ARCHIVE_DEST_STATE_n = Status des Archivierungszieles (z.B.: ENABLE) REMOTE_ARCHIVE_ENABLE = Senden von Redologs (Downstream Capture: RECEIVE oder SEND) OPEN_LINKS = Maximale Zahl gleichzeit geöffneter Datenbank-Links (>= 4) JOB_QUEUE_PROCESSES = Maximale Anzahl gleichzeitig laufender Jobs (>= 2, OSC!)) PARALLEL_MAX_SERVERS = Maximale Anzahl gleichzeitiger Serverprozesse UNDO_RETENTION = seconds Zeitraum bis zum Löschen der UNDO Informationen (Korrelation zur Größe des UNDO Tabelspace beachten!, Default: 900 Sec) STREAMS_POOL_SIZE = kB|MB|GB Größe des Streams Pool (>= 200 MB) (Angabe auch bei SGA_TARGET = ... MB|GB empfohlen!) (Auch PROCESSES und SESSIONS beachten!) joachim.jaensch@oracle.com Konfigurieren von Oracle Streams 1. Benutzung von DBMS-Packages (Oracle Streams API) DBMS_STREAMS_ADM DBMS_xxx_ADM oder (xxx = Capture, Propagation, Apply, Rule) 2. Benutzung des Oracle Enterprise Managers (Einschränkungen) Database Control oder Grid Control GUI Two-sites, One-way 3. Über Oracle Streams Commander (einfach & schnell) 00_define.sql Æ 00_install.sql joachim.jaensch@oracle.com Streams DBMS Packages – High-Level DBMS_STREAMS_ADM Configuring Oracle Streams replication environment MAINTAIN_GLOBAL „Simplified MAINTAIN_SCHEMAS MAINTAIN_SIMPLE-TTS Configuration MAINTAIN_TABLES MAINTAIN_CHANGE_TABLE ab Version 11.2. Procedures“ MAINTAIN_TTS ab Version 10.2. Configuration Parameters: source_directory_object destination_directory_object source_database destination_database schema_name tablespace_name table_names source_table_name tablespace_names All Procedures Æ Æ Æ Æ Æ MAINTAIN_SCHEMAS MAINTAIN_SIMPLE_TTS MAINTAIN_TABLES MAINTAIN_CHANGE_TABLE MAINTAIN_TABLESPACES joachim.jaensch@oracle.com DBMS Packages für Streams – Low-Level DBMS_APPLY_ADM Configure, start or stop Apply processes DBMS_CAPTURE_ADM Configure, start or stop Capture processes DBMS_PROPAGATION_ADM Configure propagation from source to destination queue DBMS_RULE_ADM Creating / Managing rules, rule sets and rule evaluation contents DBMS_STREAMS_ADVISOR_ADM Interface to gather information about streams environment DBMS_STREAMS_TABLESPACE_ADM Interface for copying / moving TS from one DB to another DBMS_RULE Enable the evaluation of a rule set for a specified event DBMS_STREAMS Interface to the LCR, Convert ANYDATA objects in LCR objects DBMS_STREAMS_AUTH Grant and Revoke Privileges to / from Streams Admin joachim.jaensch@oracle.com DBMS_STREAMS_ADM - Beispiel define bidirectional = TRUE /* SET TRUE if the replication = bi-directional, otherwise set FALSE */ define perform_act = TRUE /* SET TRUE if you want restart after failure occurs define incl_ddl = TRUE /* SET TRUE if you replicate also DDL changes, otherwise set FALSE */ define owner1 = JJAENSC /* owner1 of table(s) define tab1 = JJ_CD /* table_name 1 */ define tab2 = JJ_SO /* table_name 2 */ define conf_script = 02_Config_Two-DB-Bidirectional_Tables.sql define conf_script_dir_object = ADM_STREAMS /* Local directory object for Oracle Streams */ define src_dir_object = NULL define dest_dir_object = NULL define srcdb = ORACLEJ define capt_name1 = C_CN1_ORAJ define capt_queue_tab1 = C_QT1_ORAJ define capt_queue_name1 = C_QN1_ORAJ define capt_queue_user1 = STREAMS define prop_name1 = P_PN1_ORAJ define destdb = ORACLEK define appl_name1 = A_AN1_ORAK define appl_queue_tab1 = A_QT1_ORAK define appl_queue_name1 = A_QN1_ORAK define appl_queue_user1 = STREAMS /* global_name of Source Database */ Parameter Source DB /* global_name of Destination Database */ Parameter Destination DB joachim.jaensch@oracle.com DBMS_STREAMS_ADM - Beispiel DECLARE tables DBMS_UTILITY.UNCL_ARRAY; BEGIN tables(1) := '&&owner1..&&tab1'; tables(2) := '&&owner1..&&tab2'; DBMS_STREAMS_ADM.MAINTAIN_TABLES( table_names => tables, script_name => '&&conf_script', script_directory_object => '&&conf_script_dir_object', source_directory_object => &&src_dir_object, destination_directory_object => &&dest_dir_object, perform_actions => &&perform_act, capture_name => '&&capt_name1', capture_queue_name => '&&capt_queue_name1', capture_queue_table => '&&capt_queue_tab1', capture_queue_user => '&&capt_queue_user1', propagation_name => '&&prop_name1', source_database => '&&srcdb', apply_name => '&&appl_name1', apply_queue_name => '&&appl_queue_name1', apply_queue_table => '&&appl_queue_tab1', apply_queue_user => '&&appl_queue_user1', destination_database => '&&destdb', bi_directional => &&bidirectional, include_ddl => &&incl_ddl, instantiation => &&instant); Parameter Source DB Parameter Destination DB END; / joachim.jaensch@oracle.com Oracle Enterprise Manager (DB-C) – Streams – Setup ab Version 10.2.  Setup ist beschränkt auf Replikation von Quell- in Ziel-Datenbank joachim.jaensch@oracle.com Oracle Enterprise Manager (Grid-C) – Streams – Setup Enterprise Manager 10.2.0.5 joachim.jaensch@oracle.com Oracle Streams Commander ... kommt heute auch noch! joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Oracle Streams – Quell DB Æ Ziel DB Update EMP set Land=‘NL’ where empid=100; EMP Redo Log empid|Land|.. 100 | NL |… 105 | DE | ... Queue ----LCRs Propagation Capture Quell DB (Source) Queue -----LCRs EMP Apply Ziel DB (Target) Master – Slave Replication, Single-Source Replication joachim.jaensch@oracle.com Oracle Streams – Automatic Flow Control Capture Process read DML + DDL DB-A HR1 Onlinelog/Archivelog STRMADMIN Buffered Capture Queue SYS Propagation Process DB-Job Automatic Flow Control ab Oracle 10.1. APPLY Process Buffered Apply Queue DB-B HR2 Onlinelog/Archivelog STRMADMIN SYS joachim.jaensch@oracle.com Oracle Streams – Quell-DB ÅÆ Ziel-DB Apply Queue ----LCRs Queue ----LCRs Redolog Propagation Queue -----LCRs Propagation Queue -----LCRs Capture Quell- & Ziel-DB Redolog Capture Apply Ziel- & Quell-DB Multimaster Replication, Multiple-Source Replication joachim.jaensch@oracle.com Oracle Streams – Default Tags Writes Tag: 00 Apply Tag: NULL only Redolog Capture Tag: NULL Queue ----LCRs Queue ----LCRs Redolog Propagation Queue -----LCRs Propagation Queue -----LCRs Capture Tag: NULL only Quell- & Ziel-DB Tag: NULL Apply Writes Tag: 00 Ziel- & Quell-DB Multimaster Replication, Multiple-Source Replication joachim.jaensch@oracle.com Oracle Streams Tags (Default) Include_tagget_lcr => false Capture Default Rule Codition(s): :dml.is_null_tag() = 'Y' :ddl.is_null_tag() = 'Y' CAPTURE – schreibt TAG = NULL Nur lokale Änderungen werden captured. APPLY – ändert TAG auf X’00‘ Include_tagged_lcr => true Keine Default Rule Conditions CAPTURE – TAG wird gezielt gesetzt Rule Conditions für TAG APPLY selbst definieren – nur bestimmte TAGs werden applied  Setzen z.B.: DBMS_STREAMS.SET_TAG  TAG kann maximal 2000 Bytes lang sein  TAGs verhindern Change Cycling in N-Way Replikationsumgebungen joachim.jaensch@oracle.com Oracle Streams – Hub & Spoke Tags Writes Tag: 1 A Tag: 1 only Hub DB Queue ----LCRs C Tag: 2 only C Queue ----LCRs Queue ----LCRs Queue ----LCRs Propagations A Writes Tag: 2 Propagations Redo Log C Queue -----LCRs Queue -----LCRs A C Queue -----LCRs A Spoke DB 2 Spoke DB 1 Redo Log Queue -----LCRs Redo Log joachim.jaensch@oracle.com Streams Prozesse n-way Replication and RAC DB-A Capture Process Onlinelog/Archivelog SYS ASM STRMADMIN Onlinelog/Archivelog SYS HR1 STRMADMIN HR1 DB-B Onlinelog/Archivelog SYS STRMADMIN HR1 DB-C Capture Process Capture Process joachim.jaensch@oracle.com RAC Specifics ReStart Capture Process Onlinelog/Archivelog SYS STRMADMIN HR1 ASM Onlinelog/Archivelog SYS STRMADMIN HR1 Onlinelog/Arcivelog SYS STRMADMIN HR1 Takeover Capture Buffered Queue joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Capture Process und SCNs New Capture scans from here 720 784 First SCN 815 Capture enqueued changes 840 Start SCN Capture Capture Process Process was begins created to capture and a LogMiner 872 Depends from Retention Time 901 937 961 993 Required Applied SCN Checkpoint SCN Last applied Lowest SCN SCN at which the Destination Capture DB Process needs the RedoLogs Data Dictionary was built joachim.jaensch@oracle.com Aussagen zu den SCNs  Information über die SCNs SELECT capture_name, status, first_scn, start_scn, required_checkpoint_scn, captured_scn from DBA_CAPTURE;  First SCN  Ab dieser SCN kann Capture Prozeß Änderungen erfassen  Verweist auf ein RedoLog File mit LogMiner Data Dictionary  Name dieses RedoLog Files in V$ARCHIVED_LOG  Sollte so aktuell wie möglich sein Æ automatisches Move forward!  Automatisches Move forward über Checkpoint_Retention_Time (Default: 60 Tage)  Required Checkpoint SCN  alle Checkpoints ab dieser SCN realisieren die Checkpoint Retention Time  Checkpoints vor dieser SCN werden automatisch gelöscht  Retention Time: DBMS_CAPTURE_ADM.alter_capture ab Version 10.2. joachim.jaensch@oracle.com Capture Process und SCNs optimal New Capture scans from here Für diesen Capture Prozeß werden diese Capture enqueued changes RedoLog Files nicht mehr benötigt. Depends from Retention Time 720 784 815 840 872 901 937 961 993 Applied SCN DBMS_CAPTURE_ADM.alter_capture( capture_name => 'C_CN1_ORAJ', first_scn => newfscn); First SCN = Start SCN = Required Checkpoint SCN Last applied SCN at Destination DB joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Oracle Streams Monitoring / Analyse  Healtcheck SQL-Scripts (MetaLink Note: 273674.1)  STRMMON (MetaLink Note: 290605.1)  Oracle Streams Commander GUI  Oracle Enterprise Mangager (DB-C, Grid_C)  Streams Performance Advisor (DBMS_STREAMS_ADVISOR_ADM) 11.1.  Datenbankinhaltsvergleich (DBMS_COMPARISON) 11.1.  LCR Tracking (DBMS_STREAMS_ADM.SET_MESSAGE_TRACKING) 11.1.  Monitoring Jobs (UTL_SPADV) 11.2. joachim.jaensch@oracle.com Agenda Oracle Streams - Allgemeines Replication mit Oracle Streams Elemente und Prozesse von Streams Capture (Erfassen) Staging (Ablegen) Propagation (Weiterleiten) Apply (Anwenden) Rules, Rule-based Transformationen und Konflikte Einrichten von Oracle Streams Umgebungen Oracle Streams Konfigurationen “First SCN” – Problematik Monitoring und Analyse Zusammenfassung <Insert Picture Here> joachim.jaensch@oracle.com Zusammenfassung  Oracle Streams ist Bestandteil der SE1*, SE* und EE  Oracle Streams verursacht nur geringen System-Overhead  Der Netzwerk-Overhead kann optimiert werden  Oracle Streams bietet höchste Verfügbarkeit  Entlastung einer Produktions DB durch Downstream Capture  Replizieren zwischen Oracle DBs oder heterogen (mit Fremd DBs)  Replizierte Objekte müssen auf Source und Destination DB nicht identisch sein  Replizieren kann man die gesamte Datenbank, Schemas, Objekte oder Teile davon (z.B.: Tabellenspalten) * Synchronous Capture, kein redolog-based Capture ab Version 11.1. joachim.jaensch@oracle.com Questions & Answers joachim.jaensch@oracle.com Replication Oracle Æ Non-Oracle nur DML joachim.jaensch@oracle.com Replication Non-Oracle Æ Oracle joachim.jaensch@oracle.com Heterogeneous Replication Oracle bietet in Richtung Fremddatenbanken zahlreiche Gateways LCR (or user message) Oracle Gateway Message Gateway WebSphere MQ Sybase DB2 Replizieren aus einer Non-Oracle Datenbankumgebung ist abhängig von den dort vorhandenen Funktionalitäten. Programmieraufwand gefordert joachim.jaensch@oracle.com Replication Oracle Æ DB2 z/OS Oracle - Unix tniewel.emp DB2 z/OS tniewel.emp3 Redo Transparent Gateway for DB2 Capture Queue Apply DBLINK Oracle Net joachim.jaensch@oracle.com IBM Dprop Relational mit Oracle Streams IBM DB2 Oracle DB TG4DB2/ TG4DRDA Streams Apply Create/ Enqueue LCRs Programmieraufwand beim Erzeugen der LCRs joachim.jaensch@oracle.com