Um die Datenbank zu sichern oder sie auf einen anderen Server zu übertragen können Sie grundsätzlich die Werkzeuge Ihrer Datenbank verwenden wie z.B. Oracle „Data Pump“ oder PostgreSQL pg_dump/pg_dumpall/psql. Es gibt nichts das gegen die Verwendung dieser Werkzeuge spricht und tatsächlich sind sie die erste Wahl für diverse Aufgaben da sie schneller sind. Was dabei speziell zu beachten ist lesen Sie weiter unten.
Es gibt allerdings Einschränkungen dieser Werkzeuge:
- Sie sind nicht unabhängig von der Datenbank, sodass es nicht möglich ist einen Oracle Export in PostgreSQL zu importieren oder umgekehrt.
- Sie erlauben keine Filterung von Daten wie zum Beispiel archivierte Datensätze oder Zeilen welche zur Löschung markiert sind, das führt unter Umständen zu langen Laufzeiten wenn Daten von einer Produktionsdatenbank in eine Test- oder Qualitätsdatenbank übertragen werden sollen und die archivierten Daten oder die Auditdaten nicht benötigt werden.
- Die Migration eines Schemas auf einen anderen Schemanamen ist aufwändiger als mit den BPS eigenen Tools. Berechtigungen müssen mit separaten Skripten oder manuell neu vergeben verden. Für die einwandfreie Migration mit DB Werkzeugen müssen Sie genau verstehen wie die BPS Datenbank organisiert ist.
BPS hat deshalb auch eigene Export- und Import-Skripts welche die Daten in einem Datenbankunabhängigen XML Format speichern respektive lesen, sowie ein Skript das die Datene einer Instanz direkt in eine andere kopiert.
Export Skript
Das Skript exportiert standardmässig alle vitalen Daten, lässt aber alle nicht vitalen Daten wie Anmeldungen, Sperren und Auditierungsdaten weg.
Das Exportskript wird von der Kommandozeile mit Hilfe des BPS Skript Interpreters gestartet. Wenden Sie den Schalter -h
an um die Beschreibung des Aufrufs und der möglichen Optionen der aktuellen Version des Skripts zu erhalten:
C:\Program Files\IBK BPS 2.22.1\bin> bps export -h SYNOPSYS bps export CONNECTSTRING [FILENAME] [OPTION]... BESCHREIBUNG Diese Anwendung exportiert die BPS Datenbank in eine XML Datei. Als Vorgabe werden alle standard BPS Sequenzen und Tabellen mit Nutzdaten einbezogen, und Audittabellen wie auch Tabellen für vorübergehende Daten vom Export ausgeschlossen. Kundenspezifische Tabellen und Sequenzen können durch die Optionen -i, -I im Export einbezogen, nicht erwünschte mit den Optionen -e und -E ausgeschlossen werden. HINWEISE - Geben Sie als CONNECTSTRING die Anmeldung des BPS Besitzers als BenutzerID/PIN@Verbindung an. - Wenn FILENAME weggelassen wird. wird bps--.bpx verwendet. - Wenn der angegebene Dateiname keine Erweiterung hat, wird .bpx verwendet. BEISPIELE Basisexport der BPS Nutzdaten und Sequenzen in den Vorgabe-Dateinamen: bps export 0/1234@plant Basisexport der BPS Nutzdaten nach c:\test\myfile.xml: bps export 0/1234@plant c:\test\myfile.xml Inkludiere alle kundenspezifische Tabellen ct_* ausser ct_temp und ct_scratch: bps export 0/1234@plant -i ct!_% -e ct!_temp,ct!_scratch OPTIONEN -n, --nodefaulttables Vorgabetabellen nicht inkludieren, nur die durch -i und -e definierten. -N, --nodefaultsequences Vorgabesequenzen nicht inkludieren, nur die durch -I und -E definierten. -d, --nodeleted Datensätze mit Löschstatus in regulären BPS Tabellen ausschliessen. -a, --noarchived Datensätze mit Archivstatus in regulären BPS Tabellen ausschliessen. -h, --help Hilfe anzeigen (diese). -i INCLUDETABLES, --includetables=INCLUDETABLES Eine kommaseparierte Liste von inkludierten Tabellenmustern. - Die Muster müssen in Kleinbuchstaben sein und werden für SQL LIKE Vergleiche verwendet, wobei ! als Escapezeichen verwendet wird. -e EXCLUDETABLES, --excludetables=EXCLUDETABLES Eine kommaseparierte Liste von exkludierten Tabellenmustern. - Die Muster müssen in Kleinbuchstaben sein und werden für SQL LIKE Vergleiche verwendet, wobei ! als Escapezeichen verwendet wird. - Tabellen welche von anderen inkludierten Tabellen referenziert sind werden trotzden inkludiert. -I INCLUDESEQUENCES, --includesequences=INCLUDESEQUENCES Eine kommaseparierte Liste von inkludierten Sequenzenmustern. - Die Muster müssen in Kleinbuchstaben sein und werden für SQL LIKE Vergleiche verwendet, wobei ! als Escapezeichen verwendet wird. -E EXCLUDESEQUENCES, --excludesequences=EXCLUDESEQUENCES Eine kommaseparierte Liste von exkludierten Sequenzenmustern. - Die Muster müssen in Kleinbuchstaben sein und werden für SQL LIKE Vergleiche verwendet, wobei ! als Escapezeichen verwendet wird. Benötigte Zeit war 0 Stunde(n), 0 Minute(n) und 1 Sekunde(n). C:\Program Files\IBK BPS 2.22.1\bin>
Import Skript
Das Skript importiert standardmässig alle Tabellendaten und Sequenzen welche sich in der Exportdatei befinden. Auf der Ziel-Datenbank müssen vorgängig die BPS Objekte mit der gleichen BPS Version erzeugt werden von welcher der Export stammt, siehe Einrichten der Datenbank.
Alle Tabellen werden in der Ziel-Datenbank per Truncate gelöscht bevor der Import der neuen neuen Daten beginnt damit durch die neuen Daten keine Regeln (Constraints) verletzt werden.
Es gibt Optionen um Tabellen, archivierte Daten oder Daten die zur Löschung vorgesehen sind zu exkludieren.
Das Importskript wird von der Kommandozeile mit Hilfe des BPS Skript Interpreters gestartet. Wenden Sie den Schalter -h
an um die Beschreibung des Aufrufs und der möglichen Optionen der aktuellen Version des Skripts zu erhalten:
C:\Program Files\IBK BPS 2.22.1\bin> bps import -h SYNOPSYS bps import CONNECTSTRING FILENAME [OPTION]... BESCHREIBUNG Diese Anwendung importiert die BPS Datenbank von einer BPS Exportdatei (bpx). Standardmässig werden alle Tabellen und Sequenzen der Exportdatei importiert. Tabellen können mit der Option -e ausgeschlossen werden. Sequenzen können mit der Option -E ausgeschlossen werden. Datensätze können mit den Schaltern -h und -d gefiltert werden. HINWEISE - Geben Sie als CONNECTSTRING die Anmeldung des BPS Besitzers als BenutzerID/PIN@Verbindung an. - Wenn der angegebene Dateiname keine Erweiterung hat, wird .bpx verwendet. BEISPIELE Basisimport der ganzen Exportdatei bps-plant-20100108135920.bpx: bps import 0/1234@plant bps-plant-20100108135920 Archivierte und zu löschende Datensätze ausschliessen: bps import 0/1234@plant mydump.bpx -h -d Kundenspezifische Tabellen mit Namensmuster ct_* ausschliessen: bps import 0/1234@plant mydump.bpx -e ct!_% OPTIONEN -d, --nodeleted Datensätze die zum Löschen markiert sind ausschliesssen. Es ist wahrscheinlich dass dieser Schalter Constraintfehler bei abhängigen Datensätzen verursacht, deshalb wird der Import nach solchen Fehlern fortgesetzt. -a, --noarchived Datensätze die archiviert sind ausschliesssen. Es ist wahrscheinlich dass dieser Schalter Constraintfehler bei abhängigen Datensätzen verursacht, deshalb wird der Import nach solchen Fehlern fortgesetzt. -h, --help Hilfe anzeigen (diese). -e EXCLUDETABLES, --excludetables=EXCLUDETABLES Eine kommaseparierte Liste von exkludierten Tabellenmustern. - Die Muster müssen in Kleinbuchstaben sein und werden für SQL LIKE Vergleiche verwendet, wobei ! als Escapezeichen verwendet wird. -E EXCLUDESEQUENCES, --excludesequences=EXCLUDESEQUENCES Eine kommaseparierte Liste von exkludierten Sequenzmustern. - Die Muster müssen in Kleinbuchstaben sein und werden für SQL LIKE Vergleiche verwendet, wobei ! als Escapezeichen verwendet wird. Benötigte Zeit war 0 Stunden, 0 Minuten und 1 Sekunden. C:\Program Files\IBK BPS 2.22.1\bin>
Kopier-Skript
Das Skript copydb
eignet sich um eine bestehendes BPS Schema in ein anderes ebenfalls bereits bestehende BPS Schema zu kopieren. Beide Instanzen müssen die gleiche BPS Version aufweisen, hingegen kann das Schema unterschiedlich sein. Auch ist es möglich von PostgreSQL nach Oracle oder umgekehrt zu kopieren.
Alle Tabellen werden in der Ziel-Datenbank per Truncate gelöscht bevor das kopieren beginnt, damit durch die neuen Daten keine Regeln (Constraints) verletzt werden. Es gibt Optionen um Tabellen, archivierte Daten oder Daten die zur Löschung vorgesehen sind zu exkludieren.
Das Kopierskript wird von der Kommandozeile mit Hilfe des BPS Skript Interpreters gestartet. Wenden Sie den Schalter -h
an um die Beschreibung des Aufrufs und der möglichen Optionen der aktuellen Version des Skripts zu erhalten:
C:\Program Files\IBK BPS 2.22.1\bin>bps copydb -h SYNOPSYS bps copydb SOURCECONNECT TARGETCONNECT [OPTION]... BESCHREIBUNG Diese Anwendung kopiert eine BPS Datenbank direkt von einer anderen Datenbank. Als Vorgabe werden alle Standard-Sequenzen und -Tabellen mit permanentem Inhalt kopiert, und Audit-Tabellen sowie Tabellen mit transienten Daten werden ausgelassen. Tabellen und Sequenzen können mit den Schaltern -i, -I, -e und -E inkludiert oder exkludiert werden. Datensätze können mit den Schaltern -h und -d gefiltert werden. HINWEISE Geben Sie die Anmeldungsangabe als userid/pincode@connection ein: - Bei SOURCECONNECT der BPS Besitzer der Quell-Datenbank. - Bei TARGETCONNECT der BPS Besitzer der Ziel-Datenbank. BEISPIELE Kopieren der BPS Datenbank plant auf die Datenbank test: bps copydb 0/1234@plant 0/3456@test Gelöschte und archivierte Daten nicht kopieren: bps copydb 0/1234@plant 0/3456@test -h -d Kundenspezifische Tabellen mit Name beginnend mit ct_ einschiessen: bps copydb 0/1234@plant 0/3456@test -i ct!_% OPTIONEN -n, --nodefaulttables Standard-Tabellen nicht einschiessen, nur solche die mit -i angegeben sind. -N, --nodefaultsequences Standard-Sequenzen nicht einschiessen, nur solche die mit -I angegeben sind. -d, --nodeleted Datensätze die zum Löschen markiert sind ausschliesssen. Es ist wahrscheinlich dass dieser Schalter Constraintfehler bei abhängigen Datensätzen verursacht, deshalb wird der Import nach solchen Fehlern fortgesetzt. -a, --noarchived Datensätze die archiviert sind ausschliesssen. Es ist wahrscheinlich dass dieser Schalter Constraintfehler bei abhängigen Datensätzen verursacht, deshalb wird der Import nach solchen Fehlern fortgesetzt. -h, --help Hilfe anzeigen (diese). -i INCLUDETABLES, --includetables=INCLUDETABLES Eine kommaseparierte Liste von inkludierten Tabellenmustern. - Die Muster müssen in Kleinbuchstaben sein und werden für SQL LIKE Vergleiche verwendet, wobei ! als Escapezeichen verwendet wird. -e EXCLUDETABLES, --excludetables=EXCLUDETABLES Eine kommaseparierte Liste von exkludierten Tabellenmustern. - Die Muster müssen in Kleinbuchstaben sein und werden für SQL LIKE Vergleiche verwendet, wobei ! als Escapezeichen verwendet wird. -I INCLUDESEQUENCES, --includesequences=INCLUDESEQUENCES Eine kommaseparierte Liste von inkludierten Sequenzenmustern. - Die Muster müssen in Kleinbuchstaben sein und werden für SQL LIKE Vergleiche verwendet, wobei ! als Escapezeichen verwendet wird. -E EXCLUDESEQUENCES, --excludesequences=EXCLUDESEQUENCES Eine kommaseparierte Liste von exkludierten Sequenzenmustern. - Die Muster müssen in Kleinbuchstaben sein und werden für SQL LIKE Vergleiche verwendet, wobei ! als Escapezeichen verwendet wird. Benötigte Zeit war 0 Stunde(n), 0 Minute(n) und 1 Sekunde(n). C:\Program Files\IBK BPS 2.22.1\bin>
Export/Import mit Datenbankwerkzeugen
Bei Verwendung der Datenbank Werkzeuge (z.B. Oracle «Data Pump» oder PostgreSQL «pg_dumpall») müssen gewisse Funktionen separat abgehandelt werden welche bei den BPS Skripts automatisch erledigt werden.
Ab Version 2.23 stehen die Scripts bpsoraexp.cmd und bpsoraimp.cmd zur Verfügung welche wir in der Entwicklung benützen um BPS Schemata per Oracle Data Pump zu exportieren und importieren. Alle nachfolgend beschriebenen Schritte sind in diesen Scripts automatisiert. Details zu diesen Scripts finden Sie im Developer WIKI.
- Die Audit-Tabellen müssen eventuell vorgängig bereinigt werden damit die Datenmenge eingeschränkt wird (Siehe Auditierung), oder die Audit-Tabellen (alle die mit ta_ beginnen) müssen komplett aus dem Export ausgenommen werden.
- Tabellen mit transienten Daten (z.B. Sperrtabellen und Tabellen mit Informationen zu aktuellen Anmeldungen) müssen entweder bereits vorgängig aus dem Export ausgenommen werden, oder nachträglich geleert werden (z.B. per Truncate). Die zur aktuellen BPS Version gehörige Liste der betreffenden Tabellen finden Sie am Anfang des BPS Skripts
export.js
in der ListemExcludes
. Diese Liste kann bei neuen BPS Versionen jeweils erweitert werden.
- Falls die verwendeten Tablespaces zwischen der Export und Import Datenbank unterschiedlich heissen, müssen diese nach dem Import in den BPS Einstellungen unter Central System Settings / Install korrigiert werden.
- Wenn der Schemaname zwischen Quell- und Ziel-Datenbank unterschiedlich ist, müssen sämtliche Berechtigungen (Grants) auf die entsprechenden Rollen korrigiert werden. Ebenfalls müssen alle übrigen Regeln (Constraints) kontrolliert und ggf. korrigiert werden falls diese das alte Schema referenzieren.
Für die meisten ist das folgende Verfahren einfacher und sicherer wenn das Schema unterschiedlich ist:
- Erstellen Sie zunächst mit dem Assistent für neue Datenbanken das neue Schema auf der Zieldatenbank. Verwenden Sie dazu dieselbe BPS Version wie bei der Quelldatenbank.
- Leeren Sie die neuen Tabellen z.B. per Truncate (die meisten sollten bereits leer sein)
- Importieren Sie mit den DB Werkzeugen ausschliesslich die Daten, bei Oracle Datapump z.B. mit
CONTENT=DATA_ONLY
- Erstellen Sie zunächst mit dem Assistent für neue Datenbanken das neue Schema auf der Zieldatenbank. Verwenden Sie dazu dieselbe BPS Version wie bei der Quelldatenbank.
- Die Schattensummen können inkonsistent sein falls die Datenbank während des Exports in Gebrauch war. Aktualisieren sie die Schattensummen deshalb mittels der Datenbank-Prozeduren
p_rebuildstockshadow
,p_rebuildordershadow
undp_rebuildpackshadow
nach dem Import und während noch niemand anders die Datenbank verwendet.