Projekt

Allgemein

Profil

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

[X] Daniel S, 27.09.2021 09:20

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 70 [X] Daniel S
6
h1. 0. implicit-casts in template 1
7
8
* um zu vermeiden bei jeder größeren Aktion die implicit casts einspielen zu müssen, diese in *template1* einspielen. Somit sind diese automatisch in jeder neuen Datenbank vorhanden.
9
10 55 [S] Dominik G
h1. 1. Umzug einer Datenbank (pg_dump)
11 19 [S] Dominik G
12 14 [S] Dominik G
h2. Backup
13 1 [S] Dominik G
14 16 [S] Dominik G
*1. Dump erstellen*
15 22 [S] Dominik G
16 55 [S] Dominik G
* @pg_dump -h localhost -p 5432 -U postgres -d DATABASE -O -f dump_DB.sql --disable-triggers@
17
* Hinweis: Bei Anpassungen unten das Batch-File-Bsp anpassen!
18 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@
19 55 [S] Dominik G
* {{collapse(Erläuterungen)
20
** @-h -p -U@ sind Verbindungsoptionen: Host, Port, Benutzer für den dump
21
** @-d@ ist die best. Datenbank
22
** @-O@ keine Objekteigentümerschaft ausgeben
23
** @-f@ Dateiname
24
** @--disable-triggers@ Trigger bei Wiederherstellung deaktivieren.
25 20 [S] Dominik G
}}
26 1 [S] Dominik G
27
*2. search-path in Dump-Datei korrigieren*, siehe #9521:
28
29
* https://sourceforge.net/projects/fart-it/
30 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);"@
31
* {{collapse(Potentielle Alternative - Powershell Script)
32 55 [S] Dominik G
** Kann nur innerhalb einer Zeile ersetzen, nicht über Zeilenumbrüche hinweg
33
** Noch nicht mit komischen Encodings durchgetestet
34
** https://redmine.prodat-sql.de/attachments/9568/Replace1.ps1
35 1 [S] Dominik G
}}
36 14 [S] Dominik G
37 55 [S] Dominik G
*3. ggf. Rollen exportieren* (wenn Wiederherstellung auf anderem DB-Cluster erfolgt)
38 1 [S] Dominik G
39 48 [X] Daniel S
* @pg_dumpall -h localhost -p 5432 -U postgres -r -f dump_roles.sql@
40 1 [S] Dominik G
41 33 [X] Daniel S
h2. Wiederherstellung
42 1 [S] Dominik G
43
*1. Datenbank erzeugen*
44 48 [X] Daniel S
45 55 [S] Dominik G
* @createdb -h localhost -p 5432 -U postgres NEUE-DB@
46 1 [S] Dominik G
47
*2. implicit casts erzeugen*
48 14 [S] Dominik G
49 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.
50 1 [S] Dominik G
51 55 [S] Dominik G
*3. ggf. Rollen importieren* (wenn Wiederherstellung auf anderem DB-Cluster erfolgt)
52 1 [S] Dominik G
53 55 [S] Dominik G
* @psql -h localhost -p 5432 -U postgres -f dump_roles.sql -q@
54 21 [S] Dominik G
55
*4. Datenbank wiederherstellen*
56 1 [S] Dominik G
57 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@
58
* {{collapse(Erläuterungen)
59
** Verbindungsoptionen, s.o.
60
** Vollständiges oben erstelltes Skript wird ausgeführt.
61
** *Datenbankname muss angegeben werden, sonst wird in System-DB "postgres" geschrieben*
62
** -q quiet (ist schneller)
63
** -o Anfrageergebnisse in Datei (ist schneller)
64
** 2> Fehler in Datei (ist schneller)
65 1 [S] Dominik G
}}
66
67
---
68
69 55 [S] Dominik G
h1. 2. Kopie innerhalb des Clusters
70 1 [S] Dominik G
71 55 [S] Dominik G
* Verbindungen abwürgen und CREATE WITH TEMPLATE
72
* Hinweis: Besser unten das Batch-Bsp für dump und Kopie, damit werden keine aktiven Nutzer gekickt.
73
* Beachte Abschalten EDI usw. in TestDatenbanken: https://redmine.prodat-sql.de/projects/prodat-v-x/wiki/600_Prodat_TEST-Datenbanken
74 1 [S] Dominik G
75 55 [S] Dominik G
*1. Verbindungen abwürgen*
76
* {{collapse(SQL)
77
<pre><code class="sql">
78
-- KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb)
79
SELECT pg_terminate_backend(pg_stat_activity.pid)
80
FROM pg_stat_activity 
81
WHERE pg_stat_activity.datname = 'SOURCE_DB'
82
  AND pid <> pg_backend_pid();
83
</code></pre>
84
}}
85 14 [S] Dominik G
86 55 [S] Dominik G
*2. direkte Kopie erstellen*
87
* @CREATE DATABASE "SOURCE_DB_YYYYMMDD" WITH TEMPLATE "SOURCE_DB";@
88 1 [S] Dominik G
89 55 [S] Dominik G
*3. Prodat-Dienst neu starten.*
90 49 [X] Daniel S
91 55 [S] Dominik G
---
92 22 [S] Dominik G
93 55 [S] Dominik G
h1. 3. Umzug des kompletten Clusters (pg_dumpall)
94 51 [X] Daniel S
95 52 [X] Daniel S
h2. Backup
96
97 1 [S] Dominik G
* Alle Rollen werden geschrieben
98
* Alle Datenbanken werden mit CREATE und CONNECT ins Skript geschrieben.
99 71 [X] Daniel S
100
h3. Kompletten Dump erstellen, wenn implicit casts in template1 (siehe Punkt0)
101 1 [S] Dominik G
102 75 [X] Daniel S
* @pg_dumpall -h localhost -p 5432 -U postgres -O -f E:\ProdatERP\BackUp\pgdump\dumpall.sql --disable-triggers@
103 71 [X] Daniel S
104 1 [S] Dominik G
h3. Dumps erstellen mittels Schema und Daten getrennt für Einspielen von implicit casts
105 71 [X] Daniel S
106 75 [X] Daniel S
* @Schema: pg_dumpall -h localhost -p 5432 -U postgres -O -s -f E:\ProdatERP\BackUp\pgdump\dumpall_schema.sql --disable-triggers@
107
* @Daten : pg_dumpall -h localhost -p 5432 -U postgres -O -a -f E:\ProdatERP\BackUp\pgdump\dumpall_daten.sql --disable-triggers@
108 71 [X] Daniel S
109 46 [X] Daniel S
* Schema und Daten getrennt, damit implicit-casts eingespielt werden können.
110 45 [X] Daniel S
111 76 [X] Daniel S
* *search-path in Dump-Datei korrigieren*, siehe #9521:
112 39 [X] Daniel S
113 38 [X] Daniel S
* https://sourceforge.net/projects/fart-it/
114
* @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);"@
115 1 [S] Dominik G
* @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);"@
116
117
h2. Wiederherstellen
118
119 71 [X] Daniel S
* Alle Rollen werden erzeugt
120
* Alle Datenbanken werden erzeugt
121
122
h3. Wiederherstellen vollständiger Dump (vorher war implicit cast in template1)
123
124
* @psql -h localhost -p 5432 -U postgres -f E:\ProdatERP\BackUp\pgdump\dumpall.sql -q -o E:\ProdatERP\BackUp\pgdump\msglog.txt 2> E:\ProdatERP\BackUp\pgdump\errorlog.txt@
125
126
h3. Wiederherstellen in Einzelschritten
127 1 [S] Dominik G
128 74 [X] Daniel S
_1. Strukturen anlegen:_
129 1 [S] Dominik G
130
* @psql -h localhost -p 5432 -U postgres -f E:\ProdatERP\BackUp\pgdump\dumpall_schema.sql -q -o E:\ProdatERP\BackUp\pgdump\msglog_schema.txt 2> E:\ProdatERP\BackUp\pgdump\errorlog_schema.txt@
131
132 74 [X] Daniel S
_2. implicit-casts erzeugen:_
133 1 [S] Dominik G
134
* 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.
135 22 [S] Dominik G
136 74 [X] Daniel S
_3. Daten wiederherstellen:_
137 22 [S] Dominik G
138 71 [X] Daniel S
* @psql -h localhost -p 5432 -U postgres -f E:\ProdatERP\BackUp\pgdump\dumpall_daten.sql -q -o E:\ProdatERP\BackUp\pgdump\msglog_daten.txt 2> E:\ProdatERP\BackUp\pgdump\errorlog_daten.txt@
139 55 [S] Dominik G
140
---
141
142 73 [X] Daniel S
h2. 4. Batch-File-Bsp: Dump und Kopie wieder einspielen. TestSystem im laufenden Betrieb.
143 55 [S] Dominik G
144
* Beachte Abschalten EDI usw. in TestDatenbanken: https://redmine.prodat-sql.de/projects/prodat-v-x/wiki/600_Prodat_TEST-Datenbanken 
145 67 [X] Daniel S
* *Die Stapelverarbeitungsdatein für das automatisierte Erstellen von Test- und Sicherungsdatenbanken sind am Update Ticket angehangen:* #5967
146
>  Hier müssen nur noch die Pfade und die Namen der Datenbanken eingetragen werden.