Projekt

Allgemein

Profil

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

[X] Daniel S, 03.12.2021 14:01

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 78 [X] Daniel S
* *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 78 [X] Daniel S
* *2. search-path in Dump-Datei korrigieren*, siehe #9521:
28 1 [S] Dominik G
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 78 [X] Daniel S
* *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 78 [X] Daniel S
* *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 78 [X] Daniel S
* *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 78 [X] Daniel S
* *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 78 [X] Daniel S
* *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 79 [X] Daniel S
* *Beachte Script zum Erstellen einer TestDatenbank unter Prodat\Administration! Das Vorgehen hier ist nur noch in ausnahmefällen durchzuführen, da es auch erfordert alle Nutzer rauszuwerfen!*
72
73 55 [S] Dominik G
* Verbindungen abwürgen und CREATE WITH TEMPLATE
74
* Hinweis: Besser unten das Batch-Bsp für dump und Kopie, damit werden keine aktiven Nutzer gekickt.
75 1 [S] Dominik G
* Beachte Abschalten EDI usw. in TestDatenbanken: https://redmine.prodat-sql.de/projects/prodat-v-x/wiki/600_Prodat_TEST-Datenbanken
76
77 79 [X] Daniel S
* *1. Verbindungen abwürgen*
78 55 [S] Dominik G
* {{collapse(SQL)
79
<pre><code class="sql">
80
-- KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb)
81
SELECT pg_terminate_backend(pg_stat_activity.pid)
82
FROM pg_stat_activity 
83
WHERE pg_stat_activity.datname = 'SOURCE_DB'
84
  AND pid <> pg_backend_pid();
85
</code></pre>
86 1 [S] Dominik G
}}
87 55 [S] Dominik G
88 79 [X] Daniel S
* *2. direkte Kopie erstellen*
89 55 [S] Dominik G
* @CREATE DATABASE "SOURCE_DB_YYYYMMDD" WITH TEMPLATE "SOURCE_DB";@
90 1 [S] Dominik G
91 79 [X] Daniel S
* *3. Prodat-Dienst neu starten.*
92 49 [X] Daniel S
93 55 [S] Dominik G
---
94 22 [S] Dominik G
95 55 [S] Dominik G
h1. 3. Umzug des kompletten Clusters (pg_dumpall)
96 51 [X] Daniel S
97 91 [X] Daniel S
Administration\DB_Admin_BackUp_TestDB\ *DB_Move_DB_Cluster__too.bat* Verwenden! > fasst alle Einzelschritte hier zusammen. Nur die Connectdaten in dem Batch ändern!
98 88 [X] Daniel S
99 52 [X] Daniel S
h2. Backup
100
101 1 [S] Dominik G
* Alle Rollen werden geschrieben
102
* Alle Datenbanken werden mit CREATE und CONNECT ins Skript geschrieben.
103 71 [X] Daniel S
104 84 [X] Daniel S
h3. Hinweis: auch noch mit PG13 notwendig
105 1 [S] Dominik G
106 84 [X] Daniel S
* einzelschritte zu gehen da sonst immer (alle Kombinationen probiert) die implicit casts knallen. Auch ein ändern der template 1 nutzt nichts, da folgendes dennoch immer fehlt und somit doppelte casts vorliegen.
107 83 [X] Daniel S
<pre><code class="sql">
108
DELETE FROM pg_operator WHERE oprcode = 'anytextcat'::regproc;
109
DELETE FROM pg_operator WHERE oprcode = 'textanycat'::regproc;
110
</code></pre>
111 71 [X] Daniel S
112 1 [S] Dominik G
h3. Dumps erstellen mittels Schema und Daten getrennt für Einspielen von implicit casts
113 71 [X] Daniel S
114 87 [X] Daniel S
* @Schema: pg_dumpall -h localhost -p 5432 -U postgres -O -s -f E:\ProdatERP\BackUp\PostgreSQL\pgdump\dumpall_schema.sql --disable-triggers --clean@
115 81 [X] Daniel S
* @Daten : pg_dumpall -h localhost -p 5432 -U postgres -O -a -f E:\ProdatERP\BackUp\PostgreSQL\pgdump\dumpall_daten.sql --disable-triggers@
116 71 [X] Daniel S
117 46 [X] Daniel S
* Schema und Daten getrennt, damit implicit-casts eingespielt werden können.
118 45 [X] Daniel S
119 80 [X] Daniel S
*search-path in Dump-Datei korrigieren*, siehe #9521:
120 39 [X] Daniel S
121 38 [X] Daniel S
* https://sourceforge.net/projects/fart-it/
122
* @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);"@
123 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);"@
124
125
h2. Wiederherstellen
126
127 71 [X] Daniel S
* Alle Rollen werden erzeugt
128
* Alle Datenbanken werden erzeugt
129
130
h3. Wiederherstellen in Einzelschritten
131 1 [S] Dominik G
132 77 [X] Daniel S
* *1. Strukturen anlegen:*
133 1 [S] Dominik G
134 81 [X] Daniel S
* @psql -h localhost -p 5432 -U postgres -f E:\ProdatERP\BackUp\PostgreSQL\pgdump\dumpall_schema.sql -q -o E:\ProdatERP\BackUp\PostgreSQL\pgdump\msglog_schema.txt 2> E:\ProdatERP\BackUp\PostgreSQL\pgdump\errorlog_schema.txt@
135 1 [S] Dominik G
136 77 [X] Daniel S
* *2. implicit-casts erzeugen:*
137 1 [S] Dominik G
138
* 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.
139 22 [S] Dominik G
140 77 [X] Daniel S
* *3. Daten wiederherstellen:*
141 22 [S] Dominik G
142 86 [X] Daniel S
* @psql -h localhost -p 5432 -U postgres -f E:\ProdatERP\BackUp\PostgreSQL\PostgreSQL\pgdump\dumpall_daten.sql -q -o E:\ProdatERP\BackUp\PostgreSQL\pgdump\msglog_daten.txt 2> E:\ProdatERP\BackUp\pgdump\errorlog_daten.txt@
143 55 [S] Dominik G
144
---
145
146 73 [X] Daniel S
h2. 4. Batch-File-Bsp: Dump und Kopie wieder einspielen. TestSystem im laufenden Betrieb.
147 55 [S] Dominik G
148 92 [X] Daniel S
* Beachte Abschalten EDI usw. in TestDatenbanken: https://redmine.prodat-sql.de/projects/prodat-v-x/wiki/600_Prodat_TEST-Datenbanken