Projekt

Allgemein

Profil

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

Revision 91 ([X] Daniel S, 03.12.2021 14:00) → Revision 92/96 ([X] Daniel S, 03.12.2021 14:01)

Programme (@pg_dump, pg_dumpall, createdb, psql@) erreichbar unter ..\PostgreSQL\pg9.6\pg96\bin 

 {{toc}} 


 h1. 0. implicit-casts in template 1 

 * 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. 

 h1. 1. Umzug einer Datenbank (pg_dump) 

 h2. Backup 

 * *1. Dump erstellen* 

 * @pg_dump -h localhost -p 5432 -U postgres -d DATABASE -O -f dump_DB.sql --disable-triggers@ 
 * Hinweis: Bei Anpassungen unten das Batch-File-Bsp anpassen! 
 * *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@ 
 * {{collapse(Erläuterungen) 
 ** @-h -p -U@ sind Verbindungsoptionen: Host, Port, Benutzer für den dump 
 ** @-d@ ist die best. Datenbank 
 ** @-O@ keine Objekteigentümerschaft ausgeben 
 ** @-f@ Dateiname 
 ** @--disable-triggers@ Trigger bei Wiederherstellung deaktivieren. 
 }} 

 * *2. search-path in Dump-Datei korrigieren*, siehe #9521: 

 * https://sourceforge.net/projects/fart-it/ 
 * @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);"@ 
 * {{collapse(Potentielle Alternative - Powershell Script) 
 ** Kann nur innerhalb einer Zeile ersetzen, nicht über Zeilenumbrüche hinweg 
 ** Noch nicht mit komischen Encodings durchgetestet 
 ** https://redmine.prodat-sql.de/attachments/9568/Replace1.ps1 
 }} 

 * *3. ggf. Rollen exportieren* (wenn Wiederherstellung auf anderem DB-Cluster erfolgt) 

 * @pg_dumpall -h localhost -p 5432 -U postgres -r -f dump_roles.sql@ 

 h2. Wiederherstellung 

 * *1. Datenbank erzeugen* 

 * @createdb -h localhost -p 5432 -U postgres NEUE-DB@ 

 * *2. implicit casts erzeugen* 

 * 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. 

 * *3. ggf. Rollen importieren* (wenn Wiederherstellung auf anderem DB-Cluster erfolgt) 

 * @psql -h localhost -p 5432 -U postgres -f dump_roles.sql -q@ 

 * *4. Datenbank wiederherstellen* 

 * @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@ 
 * {{collapse(Erläuterungen) 
 ** Verbindungsoptionen, s.o. 
 ** Vollständiges oben erstelltes Skript wird ausgeführt. 
 ** *Datenbankname muss angegeben werden, sonst wird in System-DB "postgres" geschrieben* 
 ** -q quiet (ist schneller) 
 ** -o Anfrageergebnisse in Datei (ist schneller) 
 ** 2> Fehler in Datei (ist schneller) 
 }} 

 --- 

 h1. 2. Kopie innerhalb des Clusters 

 * *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!* 

 * Verbindungen abwürgen und CREATE WITH TEMPLATE 
 * Hinweis: Besser unten das Batch-Bsp für dump und Kopie, damit werden keine aktiven Nutzer gekickt. 
 * Beachte Abschalten EDI usw. in TestDatenbanken: https://redmine.prodat-sql.de/projects/prodat-v-x/wiki/600_Prodat_TEST-Datenbanken 

 * *1. Verbindungen abwürgen* 
 * {{collapse(SQL) 
 <pre><code class="sql"> 
 -- KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb) 
 SELECT pg_terminate_backend(pg_stat_activity.pid) 
 FROM pg_stat_activity  
 WHERE pg_stat_activity.datname = 'SOURCE_DB' 
   AND pid <> pg_backend_pid(); 
 </code></pre> 
 }} 

 * *2. direkte Kopie erstellen* 
 * @CREATE DATABASE "SOURCE_DB_YYYYMMDD" WITH TEMPLATE "SOURCE_DB";@ 

 * *3. Prodat-Dienst neu starten.* 

 --- 

 h1. 3. Umzug des kompletten Clusters (pg_dumpall) 

 Administration\DB_Admin_BackUp_TestDB\ *DB_Move_DB_Cluster__too.bat* Verwenden! > fasst alle Einzelschritte hier zusammen. Nur die Connectdaten in dem Batch ändern! 

 h2. Backup 

 * Alle Rollen werden geschrieben 
 * Alle Datenbanken werden mit CREATE und CONNECT ins Skript geschrieben. 

 h3. Hinweis: auch noch mit PG13 notwendig 

 * 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. 
 <pre><code class="sql"> 
 DELETE FROM pg_operator WHERE oprcode = 'anytextcat'::regproc; 
 DELETE FROM pg_operator WHERE oprcode = 'textanycat'::regproc; 
 </code></pre> 

 h3. Dumps erstellen mittels Schema und Daten getrennt für Einspielen von implicit casts 

 * @Schema: pg_dumpall -h localhost -p 5432 -U postgres -O -s -f E:\ProdatERP\BackUp\PostgreSQL\pgdump\dumpall_schema.sql --disable-triggers --clean@ 
 * @Daten : pg_dumpall -h localhost -p 5432 -U postgres -O -a -f E:\ProdatERP\BackUp\PostgreSQL\pgdump\dumpall_daten.sql --disable-triggers@ 

 * Schema und Daten getrennt, damit implicit-casts eingespielt werden können. 

 *search-path in Dump-Datei korrigieren*, siehe #9521: 

 * https://sourceforge.net/projects/fart-it/ 
 * @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);"@ 
 * @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);"@ 

 h2. Wiederherstellen 

 * Alle Rollen werden erzeugt 
 * Alle Datenbanken werden erzeugt 

 h3. Wiederherstellen in Einzelschritten 

 * *1. Strukturen anlegen:* 

 * @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@ 

 * *2. implicit-casts erzeugen:* 

 * 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. 

 * *3. Daten wiederherstellen:* 

 * @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@ 

 --- 

 

 h2. 4. Batch-File-Bsp: Dump und Kopie wieder einspielen. TestSystem im laufenden Betrieb. 

 * Beachte Abschalten EDI usw. in TestDatenbanken: https://redmine.prodat-sql.de/projects/prodat-v-x/wiki/600_Prodat_TEST-Datenbanken  
 * *Die Stapelverarbeitungsdatein für das automatisierte Erstellen von Test- und Sicherungsdatenbanken sind am Update Ticket angehangen:* #5967 
 >    Hier müssen nur noch die Pfade und die Namen der Datenbanken eingetragen werden.