Projekt

Allgemein

Profil

110 Umzug einer Datenbank (pg dump backup) Schulungs Test System » Historie » Version 69

[X] Daniel S, 29.07.2021 11:07

1 22 [S] Dominik G
Programme (@pg_dump, pg_dumpall, createdb, psql@) erreichbar unter ..\PostgreSQL\pg9.6\pg96\bin
2
3 66 [X] Daniel S
{{toc}}
4
5 55 [S] Dominik G
h1. 1. Umzug einer Datenbank (pg_dump)
6 19 [S] Dominik G
7 14 [S] Dominik G
h2. Backup
8 1 [S] Dominik G
9 16 [S] Dominik G
*1. Dump erstellen*
10 22 [S] Dominik G
11 55 [S] Dominik G
* @pg_dump -h localhost -p 5432 -U postgres -d DATABASE -O -f dump_DB.sql --disable-triggers@
12
* Hinweis: Bei Anpassungen unten das Batch-File-Bsp anpassen!
13 69 [X] Daniel S
* *Minimal für Spezialfälle* (Keywords fehlen, Suche geht nicht usw): @pg_dump -h localhost -p 5432 -U postgres -d DATABASE -O -f dump_DB.sql --disable-triggers --exclude-table-data=tlog.auditlog --exclude-table-data=public.lagerlog --exclude-table-data=public.stvtrs --exclude-table-data=public.opreg --exclude-table-data='tcache.tformass*' --exclude-table-data=public.recnokeyword@
14 55 [S] Dominik G
* {{collapse(Erläuterungen)
15
** @-h -p -U@ sind Verbindungsoptionen: Host, Port, Benutzer für den dump
16
** @-d@ ist die best. Datenbank
17
** @-O@ keine Objekteigentümerschaft ausgeben
18
** @-f@ Dateiname
19
** @--disable-triggers@ Trigger bei Wiederherstellung deaktivieren.
20 20 [S] Dominik G
}}
21 1 [S] Dominik G
22
*2. search-path in Dump-Datei korrigieren*, siehe #9521:
23
24
* https://sourceforge.net/projects/fart-it/
25 23 [X] Lutz G
* @fart.exe -c dump_DB.sql "SELECT pg_catalog.set_config('search_path', '', false);" "SELECT pg_catalog.set_config('search_path', 'public, TSystem, prodat_languages, z_99_deprecated', false);"@
26
* {{collapse(Potentielle Alternative - Powershell Script)
27 55 [S] Dominik G
** Kann nur innerhalb einer Zeile ersetzen, nicht über Zeilenumbrüche hinweg
28
** Noch nicht mit komischen Encodings durchgetestet
29
** https://redmine.prodat-sql.de/attachments/9568/Replace1.ps1
30 1 [S] Dominik G
}}
31 14 [S] Dominik G
32 55 [S] Dominik G
*3. ggf. Rollen exportieren* (wenn Wiederherstellung auf anderem DB-Cluster erfolgt)
33 1 [S] Dominik G
34 48 [X] Daniel S
* @pg_dumpall -h localhost -p 5432 -U postgres -r -f dump_roles.sql@
35 1 [S] Dominik G
36 33 [X] Daniel S
h2. Wiederherstellung
37 1 [S] Dominik G
38
*1. Datenbank erzeugen*
39 48 [X] Daniel S
40 55 [S] Dominik G
* @createdb -h localhost -p 5432 -U postgres NEUE-DB@
41 1 [S] Dominik G
42
*2. implicit casts erzeugen*
43 14 [S] Dominik G
44 55 [S] Dominik G
* implicit-casts werden nicht mit importiert: @..\PSQL\0050 System\0 0 pg83-implicit-casts.sql@ muss davor -oder danach- auf der DB ausgeführt werden.
45 1 [S] Dominik G
46 55 [S] Dominik G
*3. ggf. Rollen importieren* (wenn Wiederherstellung auf anderem DB-Cluster erfolgt)
47 1 [S] Dominik G
48 55 [S] Dominik G
* @psql -h localhost -p 5432 -U postgres -f dump_roles.sql -q@
49 21 [S] Dominik G
50
*4. Datenbank wiederherstellen*
51 1 [S] Dominik G
52 55 [S] Dominik G
* @psql -h localhost -p 5432 -U postgres -d NEUE-DB -f dump_DB.sql -q -o db_reload_msglog.txt 2> db_reload_errorlog.txt@
53
* {{collapse(Erläuterungen)
54
** Verbindungsoptionen, s.o.
55
** Vollständiges oben erstelltes Skript wird ausgeführt.
56
** *Datenbankname muss angegeben werden, sonst wird in System-DB "postgres" geschrieben*
57
** -q quiet (ist schneller)
58
** -o Anfrageergebnisse in Datei (ist schneller)
59
** 2> Fehler in Datei (ist schneller)
60 1 [S] Dominik G
}}
61
62
---
63
64 55 [S] Dominik G
h1. 2. Kopie innerhalb des Clusters
65 1 [S] Dominik G
66 55 [S] Dominik G
* Verbindungen abwürgen und CREATE WITH TEMPLATE
67
* Hinweis: Besser unten das Batch-Bsp für dump und Kopie, damit werden keine aktiven Nutzer gekickt.
68
* Beachte Abschalten EDI usw. in TestDatenbanken: https://redmine.prodat-sql.de/projects/prodat-v-x/wiki/600_Prodat_TEST-Datenbanken
69 1 [S] Dominik G
70 55 [S] Dominik G
*1. Verbindungen abwürgen*
71
* {{collapse(SQL)
72
<pre><code class="sql">
73
-- KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb)
74
SELECT pg_terminate_backend(pg_stat_activity.pid)
75
FROM pg_stat_activity 
76
WHERE pg_stat_activity.datname = 'SOURCE_DB'
77
  AND pid <> pg_backend_pid();
78
</code></pre>
79
}}
80 14 [S] Dominik G
81 55 [S] Dominik G
*2. direkte Kopie erstellen*
82
* @CREATE DATABASE "SOURCE_DB_YYYYMMDD" WITH TEMPLATE "SOURCE_DB";@
83 1 [S] Dominik G
84 55 [S] Dominik G
*3. Prodat-Dienst neu starten.*
85 49 [X] Daniel S
86 55 [S] Dominik G
---
87 22 [S] Dominik G
88 55 [S] Dominik G
h1. 3. Umzug des kompletten Clusters (pg_dumpall)
89 51 [X] Daniel S
90 38 [X] Daniel S
91 52 [X] Daniel S
h2. Backup
92
93 38 [X] Daniel S
*1. Dumps erstellen*
94
95 1 [S] Dominik G
@Schema: pg_dumpall -h localhost -p 5432 -U postgres -O -s -f dumpall_schema.sql --disable-triggers@
96 39 [X] Daniel S
@Daten : pg_dumpall -h localhost -p 5432 -U postgres -O -a -f dumpall_daten.sql --disable-triggers@
97
98 1 [S] Dominik G
* Alle Rollen werden geschrieben
99 45 [X] Daniel S
* Alle Datenbanken werden mit CREATE und CONNECT ins Skript geschrieben.
100 46 [X] Daniel S
* Schema und Daten getrennt, damit implicit-casts eingespielt werden können.
101 45 [X] Daniel S
102 43 [X] Daniel S
*2. search-path in Dump-Datei korrigieren*, siehe #9521:
103 42 [X] Daniel S
104 39 [X] Daniel S
* https://sourceforge.net/projects/fart-it/
105 38 [X] Daniel S
* @fart.exe -c dumpall_schema.sql "SELECT pg_catalog.set_config('search_path', '', false);" "SELECT pg_catalog.set_config('search_path', 'public, TSystem, prodat_languages, z_99_deprecated', false);"@
106
* @fart.exe -c dumpall_daten.sql "SELECT pg_catalog.set_config('search_path', '', false);" "SELECT pg_catalog.set_config('search_path', 'public, TSystem, prodat_languages, z_99_deprecated', false);"@
107
108
109
h2. Wiederherstellen
110 1 [S] Dominik G
111 38 [X] Daniel S
*1. Strukturen anlegen:*
112 39 [X] Daniel S
113 55 [S] Dominik G
* @psql -h localhost -p 5432 -U postgres -f dumpall_schema.sql -q -o msglog_schema.txt 2> errorlog_schema.txt@
114 38 [X] Daniel S
115 1 [S] Dominik G
*2. implicit-casts erzeugen:*
116
117 55 [S] Dominik G
* implicit-casts werden nicht mit importiert: @..\PSQL\0050 System\0 0 pg83-implicit-casts.sql@ muss davor -oder danach- auf allen DBs ausgeführt werden.
118 1 [S] Dominik G
119
*3. Daten wiederherstellen:*
120 22 [S] Dominik G
121 55 [S] Dominik G
* @psql -h localhost -p 5432 -U postgres -f dumpall_daten.sql -q -o msglog_daten.txt 2> errorlog_daten.txt@
122 22 [S] Dominik G
* Alle Rollen werden erzeugt
123
* Alle Datenbanken werden erzeugt
124 55 [S] Dominik G
125
---
126
127 68 [X] Daniel S
h1. 4. Batch-File-Bsp: Dump und Kopie wieder einspielen. TestSystem im laufenden Betrieb.
128 55 [S] Dominik G
129
* Beachte Abschalten EDI usw. in TestDatenbanken: https://redmine.prodat-sql.de/projects/prodat-v-x/wiki/600_Prodat_TEST-Datenbanken 
130 67 [X] Daniel S
* *Die Stapelverarbeitungsdatein für das automatisierte Erstellen von Test- und Sicherungsdatenbanken sind am Update Ticket angehangen:* #5967
131
>  Hier müssen nur noch die Pfade und die Namen der Datenbanken eingetragen werden.