====== Komplette DB kopieren ======
Das Kopieren einer DB (bzw. des Tabellen-Inhalts) in eine andere kann man manuell in folgenden Schritten erledigen:
===== 1. Das Schema einer existierenden DB exportieren: =====
SUN> dbshema -d quell-db-name shema.quell-db-name.20050128.sql
===== 2. Eine leere DB erstellen (z.B. "ziel-db-name"): =====
(Hier die erforderlichen Schritte.)
===== 3. Schema in die neue DB laden: =====
SUN> dbaccess -e ziel-db-name shema.quell-db-name.20050128 > shema.ziel-db-name.20050128.log 2>&1
===== 4. DB (hier "ziel-db-name") füllen: =====
==== 4.1. Für sehr kleine Datenmengen direkt Sätze aus der anderen Tabelle übernehmen: ====
//(dbaccess Ziel-DB)//
INSERT INTO kleine-tabelle
SELECT * FROM quell-db-name:kleine-tabelle
;
==== 4.2. Für größere Datenmengen mittels unload/load: ====
=== 4.2.1. Aus der Original-DB Daten unload'en: ===
//(dbaccess Quell-DB)//
SET ISOLATION TO DIRTY READ;
UNLOAD TO grosse-tabelle.unl
SELECT * FROM grosse-tabelle
;
Damit sind alle Sätze in der Datei "grosse-tabelle.unl".
=== 4.2.2. Die große Datei splitten: ===
SUN> split -l 10000 grosse-tabelle.unl grosse-tabelle_
Damit werden mehrere Dateien erzeugt: "grosse-tabelle_aa", "grosse-tabelle_ab" u.s.w.
=== 4.2.3. Vor dem Laden Triggers und Indizies für die betroffenen Tabellen abzuschalten: ===
//(dbaccess Ziel-DB)//
SET TRIGGERS FOR grosse-tabelle DISABLED;
SET INDEXES FOR grosse-tabelle DISABLED;
=== 4.2.4. Die Daten laden, alle Sätze innerhalb einer Transaktion bei der gelockten Tabelle: ===
//(dbaccess Ziel-DB)//
BEGIN WORK;
LOCK TABLE grosse-tabelle IN EXCLUSIVE MODE;
LOAD FROM grosse-tabelle_aa
INSERT INTO grosse-tabelle
;
Damit ist ein Teil (hier die Datei "grosse-tabelle_aa") der Daten geladen.
=== 4.2.5. Den Teil, falls keine Fehler aufgetreten sind, mit "commit" abschließen: ===
//(dbaccess Ziel-DB)//
COMMIT WORK;
(Bei Fehler: mit ROLLBACK WORK;)
Die letzten 2 Schritte solange wiederholen bis alle Dateien geladen sind.
=== 4.2.6. Trigger und Indexe einschalten. ===
SET INDEXES FOR grosse-tabelle ENABLED;
SET TRIGGERS FOR grosse-tabelle ENABLED;
===== 5. Fertig. =====
EOF