SharePlex effizient einsetzen – nur die benötigten Daten replizieren

Eine der interessantesten Fähigkeiten von SharePlex ist, dass man sehr genau auswählen kann, welche Daten man überhaupt replizieren will. Ob es darum geht, Last auf der Datenbank zu reduzieren, die Verfügbarkeit der Daten für verschiedene Anwender zu verbessern, oder ein Data Warehouse zu befüllen, SharePlex erlaubt es, nur die benötigten Daten zu selektieren und an die richtigen Ziele zu verteilen. Eine „partitionierte“ Replikation kann helfen, den Ressourcenverbrauch zu verringern und die Arbeit mit Daten sicherer und effizienter zu gestalten.

In diesem Blog werden einige Möglichkeiten von SharePlex besprochen, replizierte Daten zu filtern bzw. zu partitionieren.

Dynamische Datenauswahl mit Wildcards

Grundsätzlich repliziert SharePlex eindeutig benannte Tabellen aus einem oder mehreren Schemata. Mit der Anweisung EXPAND sind wir in der Lage, ein komplettes Schema mit einer einzigen Zeile in der Konfigurationsdatei zu replizieren. Hier ein Beispiel:

EXPAND sourceschema.%            targetschema.%               routing_map

Diese Anweisung veranlasst SharePlex, sämtliche Tabellen aus dem Schema „sourceschema“ zu replizieren. Mit dem Keyword „NOT“ können wiederum ausgesuchte Tabellen von der Replikation ausgeschlossen werden. Folgendes Beispiel würde also alle Tabellen replizieren, mit Ausnahme der Tabellen, deren Name den String „test“ enthalten:

EXPAND sourceschema.% (NOT %test%)  targetschema.%            routing_map

Horizontale Partitionierung – ausgewählte Zeilen replizieren

SharePlex ermöglicht uns, nur ausgewählte Zeilen zu replizieren oder verschiedene Zeilen an unterschiedliche Ziele zu verteilen. Dieses Verfahren wird horizontale Partitionierung genannt.

Um die Replikation horizontal zu partitionieren, wird eine WHERE-Klausel verwendet, um die zu replizierenden Zeilen zu identifizieren. Statt der WHERE-Klausel kann auch ein Hash-Wert benutzt werden, um alle Zeilen zu replizieren, aber sie aus Performancegründen über mehrere Queues zu verteilen. Das Auswahlkriterium wird in einem sogenannten Partitionierungsschema in der internen SharePlex-Tabelle SHAREPLEX_PARTITION hinterlegt. Hier die Definition dieser Tabelle:

COLUMN

DATATYPE

Inhalt

PARTITION_SCHEME

VARCHAR2(30)

Name des Partitionierungsschemas

DESCRIPTION

VARCHAR2(61)

Beschreibung (für Dokumentationszwecke)

TARGET_TABLE_OWNER

VARCHAR2(30)

Schema der Zieltabelle

TARGET_TABLE_NAME

VARCHAR2(30)

Name der Zieltabelle

ROUTE

VARCHAR2(1024)

Routing-Information der Zieldatenbank.

PRIORITY

NUMBER

NULL, reserviert für SharePlex

ORDER

NUMBER

NULL, reserviert für SharePlex

OPTIONS

VARCHAR2(32)

Bei Partitionierung nach Spaltenwert NULL, bei Hash-Partitionierung “HASH#”, wobei “HASH#” die gewünschte Anzahl der Queues angibt.

COL_CONDITIONS

VARCHAR2(1024)

Bei Partitionierung nach Spaltenwert die eigentliche WHERE-Klausel (z.B.
region_id = ‘WEST’); bei Hash-Partitionierung, das Wort “ROWID”

Bei der horizontalen Partitionierung sind einige wenige Einschränkungen zu beachten – beispielsweise kann eine Out-of-Sync-Situation entstehen, wenn der Wert in der für die Partitionierung verwendeten Spalte verändert wird. Eine ausführliche Beschreibung dieser Fälle finden Sie im SharePlex Administration Guide.

Sobald das Partitionierungsschema definiert ist, kann es in der Konfigurationsdatei der Replikation verwendet werden:

sourceowner.table  targetowner.table !partition_scheme ! routing_map

Die horizontale Partitionierung eignet sich hervorragend zur Filterung der zu replizierenden Zeilen, zur Verteilung von Daten auf verschiedene Ziele, sowie zur Parallelisierung der Replikation, um die Performance zu erhöhen.

Vertikale Partitionierung – ausgewählte Spalten replizieren

In manchen Fällen möchte man nicht gesamte Zeilen replizieren, sondern nur einzelne Spalten einer Tabelle. Dadurch kann zum Beispiel die Replikation sicherheitsrelevanter Daten wie Kontonummern verhindert werden. Bei der vertikalen Partitionierung wird kein Partitionierungsschema verwendet, sondern die zu replizierenden Spalten werden direkt in der Konfigurationsdatei angegeben. Es können dabei entweder die zu replizierenden Spalten genannt werden, oder aber die auszuschließenden Spalten. Hier ein Beispiel, in dem die zu replizierenden Spalten aufgelistet werden:

sourceschema.table (col1, col2, col5) targetschema.table routing_map

In diesem Beispiel bezeichnen col1, col2 und col5 die Spalten, die wir replizieren wollen, wobei wir davon ausgehen, dass die Spalten auf der Zielseite genauso heißen. Sollten die Spalten in der Zieldatenbank anders heißen, als in der Quelldatenbank, könnte die Konfiguration wie folgt aussehen:

sourceschema.table (col1, col2, col5) targetschema.table (col4, col6, col7) routing_map

In beiden Fällen würde nur die genannten Spalten repliziert werden.

Hier ein Beispiel dafür, wie einzelne Spalten ausgeschlossen werden können:

sourceschema.table !(col1, col2, col5) targetschema.table routing_map

Das Ausrufezeichen vor der Auflistung der Spalten weist SharePlex an, alle Spalten AUßER der genannten zu replizieren.

Wie bei der horizontalen, sind auch bei der vertikalen Replikation einige Einschränkungen zu beachten, die im SharePlex Administration Guide behandelt werden.

Den SharePlex Administration Guide sowie sämtliche weitere Dokumentation für SharePlex finden Sie in der SharePlex-Dokumentation. Wenn sie loslegen wollen, finden Sie hier weitere Informationen über Shareplex sowie eine kostenlose 30-tägige Testlizenz.

Anonymous