Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  3/2006  Pfeil  Datenbanken
suche: 
Der Artikel richtet sich an Datenbankadministratoren, Systemadminist-
ratoren und Entscheider.

IBM Informix Dynamic Server 10.0 Neuheiten (Teil III):

Informix 10 Table Level Restore -
Problemlose Wiederherstellung auf Tabellenebene

In Ausgabe 2/2006 stellten wir die Features "Renamed Restore" und "ONTAPE auf STDIO" vor. Neben diesen beiden Neuerungen gibt es ein weiteres Feature aus dem Bereich Backup und Recovery, dessen Vorzüge wir Ihnen gerne aufzeigen möchten. Es handelt sich um den Table Level Restore.

Was ist "Table Level Restore"?

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.

Das 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.

Voraussetzungen

Um einen TLR durchzuführen, müssen folgende Voraussetzungen erfüllt sein:

  1. Es muss eine Sicherung (ONTAPE oder ONBAR) existieren, die auch die entsprechende(n) Tabelle(n) beinhaltet, die herausgezogen und wieder hergestellt werden soll(en).

  2. Von den wieder herzustellenden Tabellen muss eine so genannte Schemadatei vorhanden sein, die das Data Definition Language (DDL)-Statement für die Tabelle enthält. Mit dem Tool dbschema existiert eine komfortable Möglichkeit, eine solche Schemadatei zu erstellen (siehe Abbildung 1). Natürlich kann diese auch "von Hand" geschrieben werden.

    $ 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.
  3. Zusätzlich muss in dieser Schemadatei eine Verbindung zur Datenbank hergestellt werden, in welche die Tabelle zurück geschrieben werden soll. Weiterhin muss sie das entsprechende Insert-Statement enthalten, um die Datensätze der Tabelle hinzuzufügen (siehe Abbildung 2).

  4. In der SQLHOSTS-Datei muss mindestens ein Eintrag für eine TCP/IP Verbindung zum Online Server vorhanden sein, über die der TLR durchgeführt werden kann. Während des Restores werden über eine Verbindung mehrere Sessions innerhalb der Datenbank geöffnet. Eine Shared Memory-Verbindung kann im Gegensatz zu einer TCP/IP-Verbindung immer nur eine Session pro Verbindung bereitstellen und ist deshalb für den TLR ungeeignet.

Befehlssyntax

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.

Beispiel

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

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).

Point-In-Time

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.

External Table

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.

Fazit

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).