edv:db:sql:example:komplette_db_kopieren
Inhaltsverzeichnis
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
edv/db/sql/example/komplette_db_kopieren.txt · Zuletzt geändert: 2020/01/11 01:23 von 127.0.0.1