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> [email protected] 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> [email protected] 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 [email protected] Einsatz von Oracle Streams  Laden von Data Warehouses  Messaging und Benachrichtigungen  Logical Standby Datenbanken  Replication  Minimierung der Downtime bei Upgrades [email protected] 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> [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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) [email protected] 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 [email protected] 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> [email protected] Oracle Streams – Basis-Elemente Log-based Capture Staging Default Apply Propagation Log-based Capture Staging Default Apply [email protected] 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 [email protected] 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 [email protected] 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 [email protected]@sales_1; [email protected] 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> [email protected] 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 [email protected] 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! [email protected] 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. [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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.) [email protected] Downstream Capture – Archived-Log Capture Source DB Target DB C Redolog Archived-Log File Shipping A Queue ----LCRs Archived Redolog Archived-Log Capture [email protected] 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! [email protected] 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> [email protected] 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 [email protected] 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 [email protected] 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> [email protected] 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 [email protected] 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 [email protected] 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> [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 ... [email protected] 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> [email protected] 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) [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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) [email protected] 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 [email protected] 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; / [email protected] 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> [email protected] 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!) [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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; / [email protected] Oracle Enterprise Manager (DB-C) – Streams – Setup ab Version 10.2.  Setup ist beschränkt auf Replikation von Quell- in Ziel-Datenbank [email protected] Oracle Enterprise Manager (Grid-C) – Streams – Setup Enterprise Manager 10.2.0.5 [email protected] Oracle Streams Commander ... kommt heute auch noch! [email protected] 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> [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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> [email protected] 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 [email protected] 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. [email protected] 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 [email protected] 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> [email protected] 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. [email protected] 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> [email protected] 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. [email protected] Questions & Answers [email protected] Replication Oracle Æ Non-Oracle nur DML [email protected] Replication Non-Oracle Æ Oracle [email protected] 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 [email protected] 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 [email protected] IBM Dprop Relational mit Oracle Streams IBM DB2 Oracle DB TG4DB2/ TG4DRDA Streams Apply Create/ Enqueue LCRs Programmieraufwand beim Erzeugen der LCRs [email protected]