110 Umzug einer Datenbank (pg dump backup) Schulungs Test System » Historie » Version 87
[X] Daniel S, 03.12.2021 10:26
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 | 52 | [X] Daniel S | h2. Backup |
98 | |||
99 | 1 | [S] Dominik G | * Alle Rollen werden geschrieben |
100 | * Alle Datenbanken werden mit CREATE und CONNECT ins Skript geschrieben. |
||
101 | 71 | [X] Daniel S | |
102 | 84 | [X] Daniel S | h3. Hinweis: auch noch mit PG13 notwendig |
103 | 1 | [S] Dominik G | |
104 | 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. |
105 | 83 | [X] Daniel S | <pre><code class="sql"> |
106 | DELETE FROM pg_operator WHERE oprcode = 'anytextcat'::regproc; |
||
107 | DELETE FROM pg_operator WHERE oprcode = 'textanycat'::regproc; |
||
108 | </code></pre> |
||
109 | 71 | [X] Daniel S | |
110 | 1 | [S] Dominik G | h3. Dumps erstellen mittels Schema und Daten getrennt für Einspielen von implicit casts |
111 | 71 | [X] Daniel S | |
112 | 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@ |
113 | 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@ |
114 | 71 | [X] Daniel S | |
115 | 46 | [X] Daniel S | * Schema und Daten getrennt, damit implicit-casts eingespielt werden können. |
116 | 45 | [X] Daniel S | |
117 | 80 | [X] Daniel S | *search-path in Dump-Datei korrigieren*, siehe #9521: |
118 | 39 | [X] Daniel S | |
119 | 38 | [X] Daniel S | * https://sourceforge.net/projects/fart-it/ |
120 | * @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);"@ |
||
121 | 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);"@ |
122 | |||
123 | h2. Wiederherstellen |
||
124 | |||
125 | 71 | [X] Daniel S | * Alle Rollen werden erzeugt |
126 | * Alle Datenbanken werden erzeugt |
||
127 | |||
128 | h3. Wiederherstellen in Einzelschritten |
||
129 | 1 | [S] Dominik G | |
130 | 77 | [X] Daniel S | * *1. Strukturen anlegen:* |
131 | 1 | [S] Dominik G | |
132 | 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@ |
133 | 1 | [S] Dominik G | |
134 | 77 | [X] Daniel S | * *2. implicit-casts erzeugen:* |
135 | 1 | [S] Dominik G | |
136 | * 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. |
||
137 | 22 | [S] Dominik G | |
138 | 77 | [X] Daniel S | * *3. Daten wiederherstellen:* |
139 | 22 | [S] Dominik G | |
140 | 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@ |
141 | 55 | [S] Dominik G | |
142 | --- |
||
143 | |||
144 | 73 | [X] Daniel S | h2. 4. Batch-File-Bsp: Dump und Kopie wieder einspielen. TestSystem im laufenden Betrieb. |
145 | 55 | [S] Dominik G | |
146 | * Beachte Abschalten EDI usw. in TestDatenbanken: https://redmine.prodat-sql.de/projects/prodat-v-x/wiki/600_Prodat_TEST-Datenbanken |
||
147 | 67 | [X] Daniel S | * *Die Stapelverarbeitungsdatein für das automatisierte Erstellen von Test- und Sicherungsdatenbanken sind am Update Ticket angehangen:* #5967 |
148 | > Hier müssen nur noch die Pfade und die Namen der Datenbanken eingetragen werden. |