Von Dennis Vinueza auf Freitag, 07. Mai 2021
Kategorie: Data Management

Der neue Mieter: Informix Tenant Migration mit Loopback Replication

Schon seit jeher beinhaltet jede Instanz des Informix Dynamic Servers multiple Datenbanken. Seit Version 12.10 kennt Informix auch Tenant-Datenbanken. Obwohl diese auf den ersten Blick ähnlich zu normalen Datenbanken aussehen, haben sie eine Reihe von Vorteilen:

Anlegen lässt sich eine Tenant-Datenbank nicht etwa mit dem üblichen create database-Befehl, sondern mit der sysadmin-Funktion task oder admin und der Option tenant create, etwa:

Dabei ist zu beachten, dass der gewählte Dbspace leer sein muss und auch nur von einer Tenant-Datenbank genutzt werden kann.

Nun stellt sich die Frage, ob und wie sich eine existierende, normale Datenbank in eine Tenant-Datenbank migrieren lässt. Je nach Größe der Datenbank lassen sich verschiedene Herangehensweisen wählen.

dbexport / dbimport

Prinzipiell steht immer der Weg über dbexport/dbimport offen, auch wenn diese Methode nur bei kleineren Datenbanken, oder bei solchen, die eine längere Downtime in Kauf nehmen können, gewählt werden sollte.
Nun zeigt sich beim Import eine Herausforderung: Eine Tenant-Datenbank muss bereits vor dem Import angelegt werden, aber dbimport würde seinerseits versuchen, die Datenbank anzulegen.

Hier hilft Option -exists. Diese Option ist noch undokumentiert, obwohl sie bereits seit längerer Zeit existiert.

Loopback Replication

Ab dem Fixpack 12.10.xC11 oder ganz offiziell ab Version 14.10 unterstützt Informix die Loopback Replication. Dabei handelt es sich um eine Erweiterung der Enterprise Replication, bei der auf dieselbe Informix-Instanz zurück repliziert wird. Allgemein lässt sich Enterprise Replication gut zur Migration großer Datenbanken mit geringer Downtime verwenden.

Die üblichen Voraussetzungen für ER können online umgestellt werden:

Zur onconfig fügt man einen neuen (frei wählbaren) Namen als TCP-Alias für den Loopback hinzu. Der Alias darf nicht der Hauptname sein.

Die sqlhosts wird wie üblich mit Gruppennamen erweitert. Dabei bekommt jeder Alias seine eigene Nummer

Der Listener dazu kann online gestartet werden:

Jetzt kann die Loopback Replication gestartet werden. Die Loopback-Verbindung muss als Nonroot-Knoten definiert werden:

Eine komfortable Methode ist hier, ein Template vorzubereiten, welches wir to_tenant nennen, und das alle Tabellen der Datenbank stores7 einschließen soll. Replikate werden dadurch noch nicht automatisch erstellt. Diese Methode eignet sich, wenn bei der Migration die Datenbankstruktur übernommen werden soll.

In einigen Versionen der 12.10 funktioniert das Anlegen der Templates trotz Shadow Columns nicht. In der 14.10 ließ sich das so nicht mehr beobachten.

Das Erstellen der Replikate kommt nun im nächsten Schritt. Ausgehend von der Ursprungsdatenbank sollen die Replikate auf die Tenant-Datenbank gehen. Dabei sollen alle noch nicht existierenden Tabellen angelegt werden. Die einzelnen Replikate werden dabei zu einer Menge (replset) zusammengefasst.

Man beachte, dass bei der "autocreate"-Methode Partitionierung und Detached Columns oder Detached Indizes unberücksichtigt bleiben und unpartitioniert/attached angelegt werden. Auch andere Konstrukte wie Views, Synonyme oder Row Types werden ebenfalls nicht mit übertragen und müssen manuell am Ziel erstellt werden.

Eine Synchronisierung der Daten kann mit dem entsprechenden Befehl erreicht werden:

Dabei ist zu beachten, dass dies je nach Umfang der Daten viele Ressourcen beanspruchen kann. Ein Monitoring der Datenbankserver und Nachjustierung der CDR-Einstellungen kann nötig werden. Auch kann es zielführender sein, die Replikate einzeln statt gebündelt zu synchronisieren.

Inhaltliche Änderungen an der Ursprungsdatenbank übertragen sich auf die Zieldatenbank. Zum Zeitpunkt der letztendlichen Umstellung nimmt man die Anwendung offline und synchronisiert erneut wie oben beschrieben. Sobald die Sende-Queue in der Progress Table leer ist (onstat -g rqm SENDQ), kann die Umstellung auf die neue Datenbank erfolgen.

Die CDR-Konfiguration und die Shadow Columns dürfen nach erfolgreicher Übernahme wieder entfernt werden. Damit ist die Migration abgeschlossen.

Man beachte, dass Tenant-Datenbanken nicht umbenannt werden können.

Fazit

Eine Migration auf Tenant-Datenbanken funktioniert sowohl althergebracht mit dbexport/dbimport als auch mit der neuen Loopback-Methode. Mit ein paar Abstrichen beim manuellen Anlegen funktioniert der Umstieg auf Tenant-Datenbanken in der 14.10.

Glossar

Long Transaction
Wenn eine Transaktion über einen bestimmten Prozentsatz von verbrauchtem Logspace hinausgeht, wird sie zu einer Long Transaction und wird zurückgerollt. Sollte das Zurückrollen ebenfalls noch einen bestimmten Prozentsatz an Logspace übersteigen, so kann es zu einer Blockade für andere Transaktionen (auch anderer Datenbanken) kommen, da dem Zurückrollen höchste Priorität eingeräumt wird.

Enterprise Replication (ER)
Eine logische Replikationsmethode, bei der Tabellen(-inhalte) auf einen anderen Informix-Server übertragen werden können. Auch unter Continuous Data Replication (CDR) bekannt.

Detached Index / Column
Dabei handelt es ich um Indizes und Large-Object-Spalten, die in einen separaten Dbspace ausgelagert werden. Das kann zu Performancevorteilen oder besserer Nutzung der Dbspaces führen. Ohne explizite Auslagerung sind Indizes und Spalten attached.

Partitionierung
Hierbei werden Tabellen in mehrere Fragmente aufgeteilt, üblicherweise in separate Dbspaces. Auch hier sind oft Performance-Steigerungen zu erreichen. Partitionierung funktioniert nur mit den Informix Enterprise Editions.

Kommentare hinterlassen