Wir haben gelernt, wie Sie für Ihre Daten zwischen Virtualisierung und Replikation wählen können. Aber was ist, wenn Sie sich entscheiden, mit der Virtualisierung zu beginnen, aber später möglicherweise aufgrund einer schlechten Performance zur Replikation wechseln möchten?
Zunächst kann das Anlegen eines Berichts auf der Grundlage einer virtuellen Tabelle eine gute Option sein, da dieser Ansatz eine schnelle Implementierung und eine einfache Wartung unterstützt.

In einigen Situationen kann die Replikation der Remote-Daten in das lokale SAP-HANA-System jedoch eine bessere Query-Performance bieten als der Zugriff auf die Daten in einer Remote-Tabelle. Sie könnten also erwägen, den Virtualisierungsansatz aufzugeben und einen Replikationsansatz erneut zu implementieren.
Das Problem beim Wechseln des Datenbereitstellungsansatzes besteht jedoch darin, dass Sie alle Anwendungen so anpassen müssen, dass sie auf die neue Zieltabelle verweisen, in die die replizierten Daten geladen werden. Dadurch werden Transport- und Testaufgaben generiert, die Sie möglicherweise nicht belasten möchten.
Die Lösung für dieses Szenario besteht darin, Replikatstabellen zu implementieren. Dies ist eine Funktion der Datenreplikation.

Eine Replikattabelle befindet sich neben einer virtuellen Tabelle und hat die gleiche Struktur. Die Replikatstabelle erfasst und speichert die Daten in Echtzeit.

Die Hauptfunktion der Implementierung einer Replikatstabelle ist ein Schalter, mit dem Sie einfach zwischen der virtuellen Tabelle und der Replikatstabelle wechseln können. Das bedeutet, dass Sie zur Replikatstabelle wechseln können, wenn die Performance abnimmt, und wieder zurückwechseln können, wenn sich die Performance verbessert.
Wann umschalten?
Sie können problematische Remote-Abfragen und Fälle leicht identifizieren, in denen es sinnvoll sein kann, mit zwei Überwachungs-Views umzuschalten:
- M_EXPENSIVE_STATEMENTS
- M_REMOTE_STATEMENTS
Wenn die Ausführungszeit einer SQL-Anweisung, die für eine virtuelle Tabelle ausgeführt wird, einen bestimmten Schwellenwert überschreitet, ist sie in der Monitoring-View M_EXPENSIVE_STATEMENTS enthalten.
Die gemeinsamen Felder in der Monitoring-View M_EXPENSIVE_STATEMENTS und der Monitoring-View M_REMOTE_STATEMENTS können verwendet werden, um die Remote-Abfragen langsamer SQL-Anweisungen und somit die virtuellen Tabellen zu finden, die von einem Wechsel zu einem Replikat profitieren würden.
Replikatstabellendefinition
Um zwischen replizierten Daten und der virtuellen Tabelle zu wechseln, muss der virtuellen Tabelle eine entsprechende Replikatstabelle hinzugefügt werden.
Nachfolgend finden Sie einige Merkmale von Replikatstabellen:
- Jede virtuelle Tabelle kann nur eine Replikattabelle haben.
- Eine Replikatstabelle wird in Echtzeit aktualisiert, wenn die Quelltabelle aktualisiert wird.
Die Echtzeitreplikation wird nur für Remote-Quellen unterstützt, die die Änderungsdatenerfassung in Echtzeit (CDC) unterstützen.
Andernfalls können Sie von Zeit zu Zeit Daten in die Tabelle laden. Ihr Replikat wäre dann ein Snapshot-Replikat.
- Replikatstabellen werden automatisch generiert und in einem internen Schema gespeichert, das von einem internen Benutzer verwaltet wird. Sie sind hinter den Kulissen verborgen.
Notiz
Es gibt eine Funktion namens Benutzereigene Replikattabellen, die Änderungen an der Replikattabellenstruktur ermöglichen würde (z.B. zum Hinzufügen einer Partitionierung, um die Query-Performance der Replikattabelle zu verbessern).
Diese Art von Replikatstabelle wird in einem Benutzerschema angelegt, sodass sie geändert werden kann.
Zu Replikat und zurück zu virtueller Tabelle wechseln
- Um ein Replikat zu einer virtuellen Tabelle hinzuzufügen, führen Sie die folgende Anweisung aus:Code Snippet12ALTER VIRTUAL TABLE <virtual_table_name> ADD SHARED [SNAPSHOT] REPLICA;
- Um wieder direkt auf die virtuelle Tabelle zuzugreifen, müssen Sie entweder:
- Verwenden Sie für eine bestimmte Abfrage einen HINT, um den Lesemodus zu überschreiben, sodass Sie die virtuelle Tabelle und nicht das Replikat verwenden.Code Snippet12SELECT * FROM <virtual_table_name> WITH HINT(NO_VIRTUAL_TABLE_REPLICA);
Oder verwenden Sie eine SET-Anweisung, bevor Sie die Query ausführen.
Code Snippet12SET 'VIRTUAL_TABLE_REPLICA' = 'FALSE'; SELECT * FROM <virtual_table_name>; - Deaktivieren Sie das Replikat vorübergehend mit einer ALTER-Anweisung. Code Snippet1ALTER VIRTUAL TABLE <virtual_table_name> DISABLE REPLICA;
Sie kann dann später wieder aktiviert werden. (Ersetzen Sie DISABLE durch ENABLE).
- Löschen Sie das Replikat mit einem DROP-Befehl.Code Snippet12ALTER VIRTUAL TABLE <virtual_table_name> DROP REPLICA;
- Verwenden Sie für eine bestimmte Abfrage einen HINT, um den Lesemodus zu überschreiben, sodass Sie die virtuelle Tabelle und nicht das Replikat verwenden.
Sie haben das Ende dieses Kapitels erreicht und die verschiedenen Ansätze für die Replikation von Daten kennengelernt.