
Bisher war es so, dass im Falle einer inkonsistenten Datenbanktabelle oder beim Verlust von Daten eine komplette Datenbanksicherung zurückgespielt werden musste.
Eine Alternativlösung bestand darin, die komplette Datenbanksicherung auf einem anderen Referenzsystem zurückzuspielen und die entsprechenden Daten von diesem System aus auf das Produktionssystem zu übertragen.
Diese Maßnahme konnte, je nach Größe der Datenbank, unter Umständen sehr lange dauern. Der Table Level Restore (TLR) kann an dieser Stelle Abhilfe schaffen.
Durch den TLR können einzelne Tabellen aus einem Backup extrahiert und in der Datenbank wieder hergestellt werden. Es ist also kein kompletter Restore des ganzen Datenbanksystems mehr notwendig, um an die Daten einer einzelnen Tabelle zu gelangen. Die Grundlage des TLR bildet das Informix Tool archecker.
Mit dem Tool archecker können Datenbanksicherungen, die mit Hilfe von ONTAPE oder ONBAR erstellt wurden, auf ihre Konsistenz und Vollständigkeit überprüft werden.
Jedoch sollte trotz dieses Tools auf einen Testrestore nicht verzichtet werden, um zum einen die Abläufe zu trainieren und zum anderen die 100%ige Sicherheit zu haben, dass ein Restore fehlerfrei funktioniert.
Ab Informix Release 10.0 kann das Tool archecker zusätzlich für den TLR genutzt werden. Dabei kann auch hier sowohl auf ONBAR- als auch auf ONTAPE-Sicherungen zurückgegriffen werden.
Um einen TLR durchzuführen, müssen folgende Voraussetzungen erfüllt sein:
$ dbschema -t kunde -d DB1 kunde.sql $ cat kunde.sql create table "informix".kunde ( kundennr serial not null, kundenname char(15), kundenanschrift char(45), primary key(kundennr) ); |
| Abb. 1: Beispiel zur Erstellung einer Schemadatei mit Hilfe des Befehls dbschema. |
database DB1; create table "informix".kunde ( kundennr serial not null, kundenname char(15), kundenanschrift char(45), primary key(kundennr) ); insert into kunde select * from "informix".kunde; |
| Abb. 2: Beispiel einer einfachen Schemadatei für den Table Level Restore. |
Syntaktisch sieht der Befehl für einen TLR folgendermaßen aus:
archecker { -t | -b } –X –f <Schema-Datei>
Die Optionen –t oder -b legen fest, um welchen Archive-Typ es sich handelt. Für die Benutzung einer ONTAPE-Sicherung wird direkt nach dem Kommando die Option –t angegeben. Für eine ONBAR-Sicherung wird die Option –b angegeben.
Die Option –X teilt dem Kommando mit, dass ein TLR durchgeführt werden soll. Alle weiteren Informationen werden anhand der zuvor konfigurierten Schemadatei ermittelt, die über die Option –f angegeben wird.
database DB1; create table "informix".kunde ( kundennr serial not null, kundenname char(15), kundenanschrift char(45), primary key(kundennr) ); database DB2; create table "informix".kunde_newDB ( kundennr serial not null, kundenname char(15), kundenanschrift char(45), primary key(kundennr) ); insert into DB2:kunde_newDB select * from DB1:kunde; |
| Abb. 3: Beispiel eines datenbankübergreifenden Table Level Restores. |
Für eine Schemadatei einer Tabelle kunde würden die Befehle für ONTAPE bzw. ONBAR Sicherungen folgendermaßen aussehen:
ONTAPE-Sicherung:
archecker –t –X –f kunde.sql
ONBAR-Sicherung:
archecker –b –X –f kunde.sql
Die Schemadatei ist ein wichtiger Bestandteil des TLRs. Mit ihr kann der Datenbankadministrator (DBA) einen direkten Einfluss auf den Namen der Tabelle und auf die Datenbank, in der die Tabelle wieder hergestellt werden soll, nehmen.
Folgende Informationen und Befehle sind in der Schemadatei anzugeben:
Ein Beispiel zeigt Abbildung 2.
Der TLR bietet somit auch die Möglichkeit, eine Tabelle aus einer Sicherung zu extrahieren und unter einem anderen Tabellennamen in einer anderen Datenbank wieder herzustellen (siehe Abbildung 3).
database DB1; create table "informix".kunde ( kundennr serial not null, kundenname char(15), kundenanschrift char(45), primary key(kundennr) ); insert into kunde select * from "informix".kunde; restore to "2006-06-23 18:43:29" |
| Abb. 4: Beispiel eines Table Level Point in Time Restores (TLPITR). |
Durch die Ergänzung restore to ... kann eine Tabelle auch bis zu einem bestimmten Zeitpunkt (Point-In-Time) wieder hergestellt werden. Das Kommando erwartet dazu die Angabe eines Zeitstempels, der sich aus dem Datum und der Uhrzeit zusammensetzt. Die Syntax eines Table Level Point in Time Restores (TLPITR) ist in Abbildung 4 dargestellt.
Neben der Wiederherstellung einer Tabelle in einer Datenbank bietet der TLR auch die Möglichkeit, die Daten direkt in eine Datei im File-System zu schreiben. Hierbei nimmt jeder Datensatz der Tabelle eine Zeile in der Datei ein. Die einzelnen Spalten werden durch ein Trennzeichen voneinander abgegrenzt, welches bei Informix standardmäßig das Pipe-Zeichen ( | ) ist. Über die Umgebungsvariable DBDELIMITER kann dieser Wert jedoch nach Belieben verändert werden.
Die Steuerung erfolgt auch hier anhand der Schemadatei. Im oberen Teil werden die Datenbank und die Tabelle ausgewählt, von der die Daten ermittelt werden sollen. Im unteren Teil wird dann zusätzlich eine externe Tabelle angelegt, durch die mittels der USING-Anweisung die Datei deklariert wird (siehe Abbildung 5).
database DB1;
create table "informix".kunde
(
kundennr serial not null,
kundenname char(15),
kundenanschrift char(45),
primary key(kundennr)
);
create external table external_kunde
(
kundennr serial not null,
kundenname char(15),
kundenanschrift char(45),
primary key(kundennr)
)
USING ('external_table.unl','DELIMITED');
insert into external_kunde
select * from "informix".kunde;
|
| Abb. 5: Verwendung von externen Tabellen mit Hilfe des Table Level Restores. |
Abschließend folgt das insert-Statement, das die Daten der Quelltabelle in die externe Tabelle und somit in die Datei schreibt.
Der Table Level Restore kann im Bereich des Backup und Recovery von sehr großem Nutzen sein. Insbesondere dann, wenn von einer Datenbank nur einzelne Tabellen inkonsistente Daten aufweisen oder durch Anwenderfehler verloren gegangen sind und somit wieder hergestellt werden müssen.
Für den DBA kann der TLR eine enorme Zeitersparnis bedeuten, da nicht erst eine komplette Datenbank wieder hergestellt werden muss, aus der dann die benötigten Daten der betroffenen Tabellen zusammengesucht werden müssen.
Jedoch sollte man nicht nur den Bereich der Wiederherstellung der Daten nach einem Datenverlust betrachten. Auch bei der Erstellung einer Testumgebung zum Beispiel, in der nur bestimmte Tabellen benötigten werden, kann man mit diesem Feature viel Zeit und Ressourcen sparen. Somit stellt TLR auch eine Alternative zu den bestehenden Import- und Export Tools dar.
Haben Sie Fragen? Dann fordern Sie uns!
Thorsten Schuhmacher (info@ordix.de).