Advertisement
willkommensbrief

charly 2023 datenbankmigration

Oct 6th, 2023 (edited)
983
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.63 KB | None | 0 0
  1. Gedankenexperiment: Man müsste postgres 9 so installieren, dass charly darauf nicht zugreifen kann (sonst Split-Brain); damit charly auf postgres 9 oder gar 13 zugreifen kann, braucht man das Skript bzw. die Befehle aus dem Skript (ab Step 7) und beim Skript da geht man sogar tief bis in die Wurzeln von regedit, falsch, es geht nur um DIESE postgres-Instanz, die gerade läuft (Windows Dienste), es ist unklar, was wenn 2 postgres-Versionen parallel laufen und dann nutzt man das Skript, um postgres 9 auf 13 upzugraden (vorausgesetzt die Pfade sind alle korrekt). Richtiger ist, dass charly, wie viele andere Programme auf den aktiven postgres-Dienst in Windows zugreifen können, ob Version 8, 9, 13, 16, ... Die Gefahr besteht, wenn der Postgres8 von Postgres9 als Dienst überschrieben wird. Auf Postgres9 kann charly nicht so ohne weiteres zugreifen, doch schon, wenn nur 1 postgres9-Instanz und sonst keine andere postresX-Instanz läuft als Dienst im Hintergrund.
  2. Es ist wichtig, dass der --servicename nicht überschrieben wird!
  3. Die Gefahr besteht darin, dass der Dienst von postgres8 überschrieben wird oder der Dienst von postgres8 gelöscht wird. Das wird aber nicht passieren, da bei bspw. postgres9.5 der Dienst- und Anzeigename postgresql-x64-9.5 lautet.
  4.  
  5. charly zwischendurch (besser: am Ende) testen:
  6. Postgres-Service (Dienst) starten, den ältesten postgres-Dienst
  7. acd.bat startall
  8.  
  9. Erst Postgres13 starten, DANN dump einspielen, vom Postgres13 Pfad aus. (??? soll das Skript machen.)
  10. Praxis - Es geht los:
  11. charly-Dienste beenden (acd.bat stopall)
  12. dumpall erstellen von postgres 8 (pg_dumpall -U postgres -f E:\Solutio\dump8-DATUM.sql), geht schnell. Man kann auch dump8-DATUM-UHRZEIT-aktuell.sql als Dateinamen verwenden, aber ein Datum reicht, weil das Einspielen des dumps unfassbar lange dauert. zur Not dump-postgresVersion-DATUM-NUMMER.sql
  13. postgres8-Dienst beenden (pg_ctl stop -D E:\Solutio\Server\data -m fast) oder über "Dienste", der Dienst lautet "Solutio Database Server-postgres 8"
  14. postgres 9 installieren (username=postgres ; password=123), Starttyp automatisch => manuell unter "Dienste". Ich habe postgres9.5 über den Installationsassistenten installiert. Es könnte (WIRD) ein Problem geben, dass das Passwort nicht #post.2000! lautet sondern 123.
  15. wird gespeichert unter E:\Solutio\Server\PostgreSQL9.5
  16. die postgresql-9.6.24-1-windows-x64.exe lässt sich nicht öffnen aber die postgresql-9.5.25-1-windows-x64.exe
  17. postgresql-9.6.24-1-windows-x64.exe lässt sich installieren mit cmd => postgresql-9.6.24-1-windows-x64.exe --install_runtimes 0
  18. die C++-Bibliotheken von -9.6.24-1-windows-x64.exe sind älter als bei den meisten Windows-Installationen, deswegen -9.6.24-1-windows-x64.exe --install_runtimes 0
  19. dumpall auf postgres 9 ziehen (vom postgres9.5-Pfad aus : psql -U postgres -d postgres -f E:\Solutio\dump-DATUM.sql)
  20. auf Nachfrage das Passwort #post.2000! eingeben, Enter drücken.
  21. ... lauter lowrite, lo_close, lo_open ... ob das wirklich läuft? also die Festplatte arbeitet. dauert unfassbar lange. ALTER TABLE, CREATE INDEX, ...
  22. postgres9.5 - 19:42 - 443 MB (464.702.159 Bytes)
  23. postgres9.5 - 19:46 - 446 MB (467.782.351 Bytes)
  24. es geht voran. Nach 2 Stunden wurde die 2 GB dump-Datei eingespielt!
  25. mit ALTER USER postgres WITH PASSWORT '#post.2000!' könnte man das Passwort von 123 auf #post.2000! ändern.
  26. merkwürdig: über pgAdmin3 unter \PostgreSQL9.5\bin kann ich mich nur über #post.2000! einloggen.
  27. evtl. Postgres13.11 deinstallieren, weil ich Postgres13.12 installiere werde (Fehler von mir, dass ich postgres13.11 nicht deinstalliert und den Ordner nicht unbenannt habe bspw. zu /PostgreSQL13solutio-ist-der-rotz, weil /PostgreSQL13/data nur Müll aus dem migrate_all.bat-Skript beinhaltet)
  28. postgres9 als Dienst soll aktiv bleiben
  29. Skript starten (dumpall von postgres9 und auf postgres 13 ziehen), auf Pfade und korrekte Dateinamen achten
  30. fe_sendauth: no password supplied
  31. ich versuche es wieder ohne Skript...
  32. postgres9.5 deinstallieren (/Postgres9.5 falls vorhanden umbenennen) und diesmal mit passwort #post.2000! installieren
  33. ich hatte vergessen, pg9_data_path auf PostgreSQL9.5 zu ändern :-(
  34. ich musste 21 Mal das Passwort #post.2000! eingeben
  35. evtl. Postgres13.11 deinstallieren, weil ich Postgres13.12 installieren will und werde, aber aus Wut ggü. allen Beteiligten* habe ich das nicht gemacht also die Deinstallation von Postgres13.11, in Postgres13.11 waren auch teilweise Datenbanken aus der Zeit, wo ich ahnungslos irgendwas mit dem Skript versucht hatte, ein paar Megabyte waren da schon drin. Ist auch ein guter Test um zu sehen, ob ein Upgrade von 13.X zu 13.Y ohne Probleme abläuft. (22.10.2023: Ich hätte postgres13 löschen und /data bzw. den Ordner /PostgreSQL13 umbenennen sollen, aber ich war zu müde und zu erschöpft, ich hatte viel zutun, ich kannte postgres fast genauso wenig wie solutio)
  36. postgres9 als Dienst soll aktiv bleiben
  37. Skript starten (dumpall von postgres9.5 und auf postgres13 ziehen), auf Pfade und korrekte Dateinamen achten
  38. postgres9.5 sollte dann als Service beendet werden (hatte ich vergessen? macht das Skript es von alleine? ja...)
  39. Einmal Passwort für postgres13 eingeben: #post.2000!
  40. Reichlich Fehler, dies und das existiert bereits. (/data erster Versuch generiert von migrate_all.bat hat fehlerhafte Datenbanken, die nicht durch korrekte Datenbanken überschrieben werden)
  41. postgres13 - 23:34 - 577 MB (606.013.449 Bytes)
  42. postgres13 - 23:59 - 1,50 GB (1.615.282.279 Bytes)
  43. nächster Tag (in der Mitte des Einspielens ist zeitweise überhaupt nicht passiert, aber es ging weiter)
  44. postgres - 00:56 - 1,53 GB (1.653.130.312 Bytes)
  45. Fehler über Fehler ...
  46. charly-Module werden gestartet
  47. und nach 3 Stunden sind wir fertig.
  48. Datensicherung funktioniert gut, charly läuft.
  49. Konnektor-Operationen sind alle da einschl. eHBA in den Konnektoroperationen, nicht aber in den Signaturaufträgen.
  50. Jetzt funktioniert auch ePA! Sonst ist das Fenster mitsamt charly immer eingefroren. Bald folgt der Praxistext. (Ok ab dem zweiten Versuch friert es wieder ein. Vielleicht liegt es an kim4charly, später wurde ein Konto hinzugefügt....)
  51. Aber: kim4charly ist völlig leer!
  52. Einmal das KIM-Konto in kim4charly eingefügt und nach einem Klick auf Synchronisieren kamen alle Mails auf einmal nach ein paar Minuten (dummerweise datiert auf heute).
  53. unter der Windows Firewall des Windows Servers muss E:\Solutio\Server\PostgreSQL13\bin\postgres.exe für Private Netzwerke bzw. Privates Profil freigeschaltet werden (LAN-Server macht im privaten Profil mehr Sinn als im öffentlichen Profil)
  54. die EBZ-Nachrichten sind alle komplett leer (keine Antragsnummern) und die Übersicht über alle eHKP sieht sehr mager aus.
  55. es lassen sich keine KIMs verschicken. wahrscheinlich ist das alte KIM-Konto (neu erstellt, weil kim4charly komplett leer) in der postgres13-Datenbank zerfickt. nicht gut für eAU und eHKP.
  56. Ein Teil der KIMs, von dem Teil, die heruntergeladen werden konnten, sind nicht entschlüsselbar, da alte SMC-B fehlt/abgelaufen ist.
  57. eHBA ist rausgeflogen. Musste wieder eingepflegt werden (13.10.2023)
  58. eAUs sind alle weg mit dem Vermerk "fehlerhaft: HTTP Error 404: Die angeforderte Seite oder Ressource kann nicht gefunden werden. Bitte aktualisieren Sie gegebenenfalls die Ressource (Liste, Status, etc.) und versuchen Sie es zu einem späteren Zeitpunkt erneut." (14.10.2023).
  59. Die Daten vom e-Modul, die Beschriftungen und die Verweise, wo der INHALT der e-Module ist (eAU, eHKP, KIM-Nachrichten) ist vorhanden. Der Inhalt ist weg, entfernt, ratzekahl geleert. (15.10.2023) Ich frage mich wer Schuld hat: Postgres, ein mächtiges DBMS, welches anscheinend nicht mit großen, voluminösen Daten bzw. großen Dateninhalt pro Zelle arbeiten kann, oder die schlechte Einbindung durch solutio, die falschen SQL-Befehle oder die falsche Anwendung von der Sprache SQL.
  60. Es ist in der Tat so, dass meine Methode wesentlich besser funktioniert. Hier am Beispiel zu postgres16:
  61. dump erstellen => cmd im bin-Verzeichnis der älteren postgres-Version => pg_dumpall -U postgres -f E:\Solutio\dumpVERSIONSNUMMER-DATUM.sql
  62. 21 Mal das Passwort #post.2000! eingeben (nur beim postgres9.5)
  63. alten postgres-Dienst beenden (kann auch der neue Installer), neues postgres im separaten Ordner installieren => cmd => call postgresql-16.0-1-windows-x64.exe --superaccount postgres16 --superpassword #post.2000! --prefix E:\Solutio\Server\PostgreSQL16 --datadir E:\Solutio\Server\PostgreSQL16\data --servicename Solutio-PostgreSQL16
  64. dump einspielen => cmd im bin-Verzeichnis der neuen postgres-Version => psql -U postgres16 -d postgres -f E:\Solutio\dumpVERSIONSNUMMER-DATUM.sql
  65. Ein Mal das Passwort #post.2000! eingeben.
  66. habe nacheinander postgres9.5 und postgres16 genutzt und charly gestartet. Es ist alles da. Alles. und nun? (19.10.2023)
  67. Eine Sache ist neu beim Start der charly-internen Sicherung: Fehler in ppg-Service beim Sichern der Datenbanken. Tritt bei Postgres16 auf.
  68. Und nicht vergessen die Microservices regemäßig neustarten!
  69. Ich hätte die erste, fehlerhafte Version von postgres13 inkl. /data-Ordner komplett löschen oder wenigstens wie jetzt am 22.10.2023 umbenennen sollen. Der zweite Versuch, diesmal mit größeren C:\-Laufwerk und auf eine SSD geklont (TRIM soll nicht auf RAID gehen können) ist zu 99 % perfekt. dumpall von 8.4.6 zu 9.5.25, 9.5.25 wird installiert über die .exe-Datei im Installationsassistenten, den Ordner /PostgreSQL9.5 als Pfad nehmen. Dann postgres13.12 runterladen und über dem Skript in einem neuen, leeren /PostgreSQL13-Ordner den dumpall von postgres9 einspielen. Ziel ist, dass alles mitübertragen wird, nur die Nummer der Datenbank ist jetzt höher.
  70.  
  71. Problem interne Datensicherung: ich hatte das problem, dass bspw. bei der internen datensicherung mit dem backup-skript ich min. 12 mal das passwort für die datenbanken eingeben musste. das habe ich durch eine änderung der pgpass.conf datei gelöst (localhost:5432:*postgres:#post.2000!)
  72.  
  73. pgAdmin 4 in seiner neusten Version (>v8) läuft nicht unter Windows Server 2012 und müsste mit dem postgres13-Installer mitgeliefert werden aber pgAdmin4 v5 kann das, welches man vom Archive-repository runterladen kann https://www.postgresql.org/ftp/pgadmin/pgadmin4/v5.7/windows/
  74. -----------------------------------------------------------------------------------------------
  75. alter Versuch vor dem Gedankenexperiment:
  76. charly-dienste beenden
  77. dumpall erstellen (pg_dumpall -U postgres -f E:\Solutio\dump-DATUM.sql)
  78. postgres 8 beenden (pg_ctl.exe stop -D PostgreSQL/data" -m fast)
  79. neues postgres 8+X (X != 0) installieren (username = postgres13 ... pw = #post.2000! ... )
  80. (postgres 8+X soll gestoppt werden, um config-Datei pg_hba.conf (E:\Solutio\Server\PostgreSQL\data\pg_hba.conf) zu kopieren, die paar Zeilen am Ende
  81. host all all ::1/128 trust
  82. host all all 127.0.0.1/32 trust
  83. host all all 0.0.0.0/0 md5)
  84. postgres 8+X als Dienst starten
  85. dump einspielen (psql -U postgres -d postgres -f E:\Solutio\dump-DATUM.sql -c "SELECT '#post.2000!'
  86. Das mit dem SELECT #post.2000! würde ich weglassen und wenn psql von postgres9.5 nach einem Passwort fragt, dann #post.2000! eingeben. Wer hätte das gedacht, dass solutio für postgres8 aus ein Passwort ausgewählt hat: #post.2000!
  87. Auf pgtune.leopard.in.ua lassen sich Modi einstellen in \Solutio\Server\PostgreSQLxy\data\postgresql.conf
  88. Es gibt zwei Zahlen, die ich jetzt sehr hasse: 96 und vorallem 84 bzw. 846.
  89. Laut Theorie müsste das Skript ab jetzt völlig autonom erst ein dumpall aus postgres8+X also bspw. postgres9.6 machen und den dump auf postgres13 einspielen etc.
  90. -------------------------------------------------------------------------------------------
  91. -------------------------------------------------------------------------------------------
  92. -------------------------------------------------------------------------------------------
  93.  
  94. migrate_all.bat - modifiziert fürs zmk grünenplan 2023-09
  95.  
  96. @echo off
  97. setlocal
  98.  
  99. REM Passen Sie diese Daten an Ihr System an.
  100. set solutio_path=E:\Solutio
  101. set pg9_path=%solutio_path%\Server\PostgreSQL9.5
  102. set pg9_bin_path=%pg9_path%\bin
  103. set db_dump_dir=%solutio_path%
  104. set pg13_path=%solutio_path%\Server\PostgreSQL13
  105. set pg13_superuser_password=#post.2000!
  106. set pg_port=5432
  107.  
  108. REM Alles Weitere muss normalerweise nicht, kann aber angepasst werden. Den Download-Link modifizieren mache ich wegen solutio nur noch bei der migrate_all_16.bat
  109. set db_dump_path=%db_dump_dir%\dump-DATUM.sql
  110. set "pg9_data_path=%solutio_path%\Server\PostgreSQL9.5\data"
  111. REM set download_url=https://get.enterprisedb.com/postgresql/postgresql-13.12-1-windows-x64.exe
  112. set installer_path=%solutio_path%\postgresql-13.12-1-windows-x64.exe
  113.  
  114. REM Nicht veraendern!
  115. set pg_service_name=Solutio_PostgreSQL13
  116. set old_pg_version=9
  117. set acd_path=%solutio_path%\Server\ncjs
  118.  
  119. set start_step=%~2
  120.  
  121. if "%~1"=="-s" (
  122. if "%~2"=="" (
  123. echo Es wurde kein Schritt angegeben.
  124. exit /b 1
  125. )
  126. )
  127.  
  128. if "%start_step%"=="2" goto step2
  129. if "%start_step%"=="3" goto step3
  130. if "%start_step%"=="4" goto step4
  131. if "%start_step%"=="5" goto step5
  132. if "%start_step%"=="6" goto step6
  133. if "%start_step%"=="7" goto step7
  134.  
  135. echo Dieses Skript sollte nur verwendet werden, wenn in Ihrer Datenbank AUSSCHLIESSLICH Solutio Datenbanken existieren und nie etwas an der Installation geaendert wurde.
  136. echo Falls dies nicht der Fall ist, oder Sie sich nicht sicher sind, verwenden Sie bitte migrate_solutio.bat
  137. echo ""
  138. echo Folgende Werte werden verwendet. Bitte pruefen Sie, ob diese zu Ihrem System passen:
  139. echo solutio_path=%solutio_path%
  140. echo pg9_path=%pg9_path%
  141. echo db_dump_dir=%db_dump_dir%
  142. echo pg13_path=%pg13_path%
  143. echo pg_port=%pg_port%
  144.  
  145. echo Haben Sie alle Werte ueberprueft? Soll die Migration zu Postgres 13 durchgefuehrt werden?
  146. choice /c JN
  147.  
  148. if errorlevel 2 (
  149. echo Die Migration wird nicht gestartet. Bitte passen Sie die Werte direkt Im oberen Teil des Skriptes an.
  150. exit /b 1
  151. )
  152.  
  153. set "size=0"
  154.  
  155. for /R "%pg9_path%\data\base" %%F in (*) do (
  156. set /A "size+=%%~zF"
  157. )
  158.  
  159. set /A "folder_size_mb=(size / 1024 / 1024) + 200"
  160.  
  161. echo Benoetigter Speicherplatz in %db_dump_dir%: %folder_size_mb% MB
  162. echo Benoetigter Speicherplatz in %pg13_path%: %folder_size_mb% MB
  163. echo Haben Sie ueberprueft, ob in den Pfaden jeweils ausreichend Specicherplatz vorhanden ist?
  164. choice /c JN
  165.  
  166. if errorlevel 2 (
  167. echo Die Migration wird nicht gestartet.
  168. exit /b 1
  169. )
  170.  
  171. call :get_pg_version %pg9_bin_path%
  172.  
  173. if %old_pg_version% gtr 12 (
  174. echo Sie versuchen, von PosgreSQL Version %old_pg_version% zu migrieren. Dies ist nicht moeglich. Haben Sie die Migration schon einmal ausgefuehrt?
  175. exit /b 1
  176. )
  177.  
  178.  
  179. echo Alle Services stoppen
  180. call %acd_path%\acd.bat stopall
  181.  
  182. :step1
  183. echo.### Step 1: Erzeugen der Datenbank Sicherung aus PostgreSQL 9 (dies wird eine Weile dauern...)
  184. call "%pg9_path%\bin\pg_dumpall.exe" -U postgres -p %pg_port% -f "%db_dump_path%"
  185. if %ERRORLEVEL% NEQ 0 (
  186. echo Fehler beim Erstellen der Datenbank Sicherung mit PostgreSQL 9.
  187. exit /b 1
  188. )
  189.  
  190. :step2
  191. echo.### Step 2: Alten PostgreSQL Service stoppen
  192. call "%pg9_path%\bin\pg_ctl.exe" stop -D "%pg9_path%\data" -m fast
  193. if %ERRORLEVEL% NEQ 0 (
  194. echo Fehler beim Stoppen des PostgreSQL 9 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
  195. exit /b 1
  196. )
  197.  
  198. sc config Solutio_PostgreSQL start=demand
  199. if %ERRORLEVEL% NEQ 0 (
  200. echo Fehler beim Deaktivieren des PostgreSQL 9 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
  201. exit /b 1
  202. )
  203.  
  204. :step3
  205. echo.### Step 3: PostgreSQL 13 herunterladen
  206. @echo on
  207. call powershell Start-BitsTransfer -Source %download_url% %installer_path%
  208. @echo off
  209. if %ERRORLEVEL% NEQ 0 (
  210. echo Fehler beim Herunterladen des PostgreSQL 13 Installers. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 3 aus
  211. exit /b 1
  212. )
  213.  
  214. :step4
  215. echo.### Step 4: PostgreSQL 13 installieren
  216. @echo on
  217. call "%installer_path%" --superaccount postgres13 --superpassword %pg13_superuser_password% --prefix "%pg13_path%" --datadir "%pg13_path%\data" --servicename %pg_service_name% --enable_acledit 1 --disable-components pgAdmin,stackbuilder --mode unattended --unattendedmodeui minimalWithDialogs
  218. if %ERRORLEVEL% NEQ 0 (
  219. echo Fehler beim Installieren von PostgreSQL 13. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 4 aus
  220. exit /b 1
  221. )
  222. @echo off
  223. call "%pg13_path%\bin\pg_ctl.exe" stop -D "%pg13_path%\data" -m f
  224. call copy /y "%pg9_path%\data\pg_hba.conf" "%pg13_path%\data\pg_hba.conf"
  225.  
  226. :step5
  227. echo.### Step 5: PostgreSQL 13 starten
  228. call net start %pg_service_name%
  229.  
  230. if %ERRORLEVEL% NEQ 0 (
  231. echo Fehler beim Starten von PostgreSQL 13. Bitte pruefen Sie die Datei pg_hba.conf. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 5 aus
  232. call notepad.exe "%pg13_path%\data\pg_hba.conf"
  233. exit /b 1
  234. )
  235.  
  236. :step6
  237. echo.### Step 6: Einspielen der Datenbank Sicherung in PostgreSQL 13 (dies wird eine Weile dauern...)
  238. call "%pg13_path%\bin\psql.exe" -U postgres13 -d postgres -p %pg_port% -f "%db_dump_path%" -c "SELECT '%pg13_superuser_password%';" >NUL
  239. if %ERRORLEVEL% NEQ 0 (
  240. echo Fehler beim Einspielen der Daten in die PostgreSQL 13 Datenbanken. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 6 aus
  241. exit /b 1
  242. )
  243.  
  244. :step7
  245. echo.### Step 7: Konfiguration der Solutio services
  246. @echo off
  247. set KEY_NAME=HKLM\Software\Solutio\Charly\PostgreSQL
  248. set KEY_NAME_WOW=HKLM\Software\Wow6432Node\Solutio\Charly\PostgreSQL
  249. set VALUE_NAME=Path
  250. set VALUE_VERSION=Version
  251. set NEW_NAME=%pg13_path%
  252. set NEW_VERSION=13.11.1
  253. call reg.exe add "%KEY_NAME%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
  254. call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
  255. call reg.exe add "%KEY_NAME%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
  256. call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
  257.  
  258. rem call net stop ppg
  259. rem if %ERRORLEVEL% NEQ 0 (
  260. rem echo Fehler beim Stoppen des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
  261. rem exit /b 1
  262. rem )
  263.  
  264. REM rename old H2 database from ppg service, then it will be recreated with the new postgres db values
  265. rename "%solutio_path%\Server\ncjs\database\ppg-service\persistence.mv.db" "persistence_alt.mv.db"
  266.  
  267. set "persistence_trace_path=%solutio_path%\Server\ncjs\database\ppg-service\persistence.trace.db"
  268. if exist "%persistence_trace_path%" (
  269. rename "%persistence_trace_path%" "persistence_alt.trace.db"
  270. )
  271.  
  272. set "file_path=%solutio_path%\Server\ncjs\conf\ppg\application.yml"
  273. set "old_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg9_path%"
  274. set "new_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg13_path%"
  275. call :replace "%file_path%" "%old_line%" "%new_line%"
  276.  
  277. set "file_path2=%solutio_path%\Server\ncjs\conf2\ppg\application.yml"
  278. if exist "%file_path2%" (
  279. call :replace "%file_path2%" "%old_line%" "%new_line%"
  280. )
  281.  
  282. rem call net start ppg
  283. rem if %ERRORLEVEL% NEQ 0 (
  284. rem echo Fehler beim Starten des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
  285. rem exit /b 1
  286. rem )
  287.  
  288. echo Alle Services starten
  289. call %acd_path%\acd.bat startall
  290.  
  291. echo "Database migration completed successfully."
  292. pause
  293. exit /b
  294.  
  295. :replace
  296. set "filepath=%~1"
  297. set "oldline=%~2"
  298. set "newline=%~3"
  299.  
  300. set "temp_file=%TEMP%\temp_file.tmp"
  301.  
  302. (for /F "usebackq delims=" %%a in ("%filepath%") do (
  303. if "%%a"=="%oldline%" (
  304. echo %newline%
  305. ) else (
  306. echo %%a
  307. )
  308. )) >"%temp_file%"
  309.  
  310. move /y "%temp_file%" "%filepath%"
  311. exit /b
  312.  
  313.  
  314. :get_pg_version
  315. set "pg_bin_path=%~1"
  316.  
  317. for /f "usebackq tokens=2 delims=. " %%G in (`"%pg_bin_path%\pg_config.exe" --version`) do (
  318. set "old_pg_version=%%G"
  319. exit /b
  320. )
  321.  
  322. exit /b
  323.  
  324. -------------------------------------------------------------------------------------------
  325. -------------------------------------------------------------------------------------------
  326. -------------------------------------------------------------------------------------------
  327. migrate_all_16.bat (auf eigene Gefahr, bei solutio unbeliebt)
  328.  
  329. @echo off
  330. setlocal
  331.  
  332. REM Passen Sie diese Daten an Ihr System an.
  333. set solutio_path=C:\Solutio
  334. set pg13_path=%solutio_path%\Server\PostgreSQL13
  335. set pg13_bin_path=%pg13_path%\bin
  336. set db_dump_dir=%solutio_path%
  337. set pg16_path=%solutio_path%\Server\PostgreSQL16
  338. set pg16_superuser_password=#post.2000!
  339. set pg_port=5432
  340.  
  341. REM Alles Weitere muss normalerweise nicht, kann aber angepasst werden. Für den Download-Link muss man flink sein und unter
  342. REM https://www.enterprisedb.com/downloads/postgres-postgresql-downloads das neuste Paket runterladen. Während es lädt, den Link extrahieren im Browser.
  343. REM und in set download_url= einfügen.
  344. set db_dump_path=%db_dump_dir%\dump13.sql
  345. set "pg13_data_path=%solutio_path%\Server\PostgreSQL13\data"
  346. set download_url=https://get.enterprisedb.com/postgresql/postgresql-16.0-1-windows-x64.exe
  347. set installer_path=%solutio_path%\postgresql-16.0-1-windows-x64.exe
  348.  
  349. REM Nicht veraendern!
  350. set pg_service_name=Solutio_PostgreSQL16
  351. set old_pg_version=13
  352. set acd_path=%solutio_path%\Server\ncjs
  353.  
  354. set start_step=%~2
  355.  
  356. if "%~1"=="-s" (
  357. if "%~2"=="" (
  358. echo Es wurde kein Schritt angegeben.
  359. exit /b 1
  360. )
  361. )
  362.  
  363. if "%start_step%"=="2" goto step2
  364. if "%start_step%"=="3" goto step3
  365. if "%start_step%"=="4" goto step4
  366. if "%start_step%"=="5" goto step5
  367. if "%start_step%"=="6" goto step6
  368. if "%start_step%"=="7" goto step7
  369.  
  370. echo Dieses Skript sollte nur verwendet werden, wenn in Ihrer Datenbank AUSSCHLIESSLICH Solutio Datenbanken existieren und nie etwas an der Installation geaendert wurde.
  371. echo Falls dies nicht der Fall ist, oder Sie sich nicht sicher sind, verwenden Sie bitte migrate_solutio.bat
  372. echo ""
  373. echo Folgende Werte werden verwendet. Bitte pruefen Sie, ob diese zu Ihrem System passen:
  374. echo solutio_path=%solutio_path%
  375. echo pg13_path=%pg13_path%
  376. echo db_dump_dir=%db_dump_dir%
  377. echo pg16_path=%pg16_path%
  378. echo pg_port=%pg_port%
  379.  
  380. echo Haben Sie alle Werte ueberprueft? Soll die Migration zu Postgres 16 durchgefuehrt werden?
  381. choice /c JN
  382.  
  383. if errorlevel 2 (
  384. echo Die Migration wird nicht gestartet. Bitte passen Sie die Werte direkt Im oberen Teil des Skriptes an.
  385. exit /b 1
  386. )
  387.  
  388. set "size=0"
  389.  
  390. for /R "%pg13_path%\data\base" %%F in (*) do (
  391. set /A "size+=%%~zF"
  392. )
  393.  
  394. set /A "folder_size_mb=(size / 1024 / 1024) + 200"
  395.  
  396. echo Benoetigter Speicherplatz in %db_dump_dir%: %folder_size_mb% MB
  397. echo Benoetigter Speicherplatz in %pg16_path%: %folder_size_mb% MB
  398. echo Haben Sie ueberprueft, ob in den Pfaden jeweils ausreichend Specicherplatz vorhanden ist?
  399. choice /c JN
  400.  
  401. if errorlevel 2 (
  402. echo Die Migration wird nicht gestartet.
  403. exit /b 1
  404. )
  405.  
  406. call :get_pg_version %pg13_bin_path%
  407.  
  408. if %old_pg_version% gtr 14 (
  409. echo Sie versuchen, von PosgreSQL Version %old_pg_version% zu migrieren. Dies ist nicht moeglich. Haben Sie die Migration schon einmal ausgefuehrt?
  410. exit /b 1
  411. )
  412.  
  413.  
  414. echo Alle Services stoppen
  415. call %acd_path%\acd.bat stopall
  416.  
  417. :step1
  418. echo.### Step 1: Erzeugen der Datenbank Sicherung aus PostgreSQL 13 (dies wird eine Weile dauern...)
  419. call "%pg13_path%\bin\pg_dumpall.exe" -U postgres -p %pg_port% -f "%db_dump_path%"
  420. if %ERRORLEVEL% NEQ 0 (
  421. echo Fehler beim Erstellen der Datenbank Sicherung mit PostgreSQL 13.
  422. exit /b 1
  423. )
  424.  
  425. :step2
  426. echo.### Step 2: Alten PostgreSQL Service stoppen
  427. call "%pg13_path%\bin\pg_ctl.exe" stop -D "%pg13_path%\data" -m fast
  428. if %ERRORLEVEL% NEQ 0 (
  429. echo Fehler beim Stoppen des PostgreSQL 13 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
  430. exit /b 1
  431. )
  432.  
  433. sc config Solutio_PostgreSQL start=demand
  434. if %ERRORLEVEL% NEQ 0 (
  435. echo Fehler beim Deaktivieren des PostgreSQL 9 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
  436. exit /b 1
  437. )
  438.  
  439. :step3
  440. echo.### Step 3: PostgreSQL 16 herunterladen
  441. @echo on
  442. call powershell Start-BitsTransfer -Source %download_url% %installer_path%
  443. @echo off
  444. if %ERRORLEVEL% NEQ 0 (
  445. echo Fehler beim Herunterladen des PostgreSQL 16 Installers. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 3 aus
  446. exit /b 1
  447. )
  448.  
  449. :step4
  450. echo.### Step 4: PostgreSQL 16 installieren
  451. @echo on
  452. call "%installer_path%" --superaccount postgres16 --superpassword %pg16_superuser_password% --prefix "%pg16_path%" --datadir "%pg16_path%\data" --servicename %pg_service_name% --enable_acledit 1 --disable-components pgAdmin,stackbuilder --mode unattended --unattendedmodeui minimalWithDialogs
  453. if %ERRORLEVEL% NEQ 0 (
  454. echo Fehler beim Installieren von PostgreSQL 16. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 4 aus
  455. exit /b 1
  456. )
  457. @echo off
  458. call "%pg16_path%\bin\pg_ctl.exe" stop -D "%pg16_path%\data" -m f
  459. call copy /y "%pg13_path%\data\pg_hba.conf" "%pg16_path%\data\pg_hba.conf"
  460.  
  461. :step5
  462. echo.### Step 5: PostgreSQL 16 starten
  463. call net start %pg_service_name%
  464.  
  465. if %ERRORLEVEL% NEQ 0 (
  466. echo Fehler beim Starten von PostgreSQL 16. Bitte pruefen Sie die Datei pg_hba.conf. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 5 aus
  467. call notepad.exe "%pg16_path%\data\pg_hba.conf"
  468. exit /b 1
  469. )
  470.  
  471. :step6
  472. echo.### Step 6: Einspielen der Datenbank Sicherung in PostgreSQL 16 (dies wird eine Weile dauern...)
  473. call "%pg16_path%\bin\psql.exe" -U postgres16 -d postgres -p %pg_port% -f "%db_dump_path%" -c "SELECT '%pg16_superuser_password%';" >NUL
  474. if %ERRORLEVEL% NEQ 0 (
  475. echo Fehler beim Einspielen der Daten in die PostgreSQL 16 Datenbanken. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 6 aus
  476. exit /b 1
  477. )
  478.  
  479. :step7
  480. echo.### Step 7: Konfiguration der Solutio services
  481. @echo off
  482. set KEY_NAME=HKLM\Software\Solutio\Charly\PostgreSQL
  483. set KEY_NAME_WOW=HKLM\Software\Wow6432Node\Solutio\Charly\PostgreSQL
  484. set VALUE_NAME=Path
  485. set VALUE_VERSION=Version
  486. set NEW_NAME=%pg16_path%
  487. set NEW_VERSION=16.0
  488. call reg.exe add "%KEY_NAME%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
  489. call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
  490. call reg.exe add "%KEY_NAME%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
  491. call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
  492.  
  493. rem call net stop ppg
  494. rem if %ERRORLEVEL% NEQ 0 (
  495. rem echo Fehler beim Stoppen des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
  496. rem exit /b 1
  497. rem )
  498.  
  499. REM rename old H2 database from ppg service, then it will be recreated with the new postgres db values
  500. rename "%solutio_path%\Server\ncjs\database\ppg-service\persistence.mv.db" "persistence_alt.mv.db"
  501.  
  502. set "persistence_trace_path=%solutio_path%\Server\ncjs\database\ppg-service\persistence.trace.db"
  503. if exist "%persistence_trace_path%" (
  504. rename "%persistence_trace_path%" "persistence_alt.trace.db"
  505. )
  506.  
  507. set "file_path=%solutio_path%\Server\ncjs\conf\ppg\application.yml"
  508. set "old_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg13_path%"
  509. set "new_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg16_path%"
  510. call :replace "%file_path%" "%old_line%" "%new_line%"
  511.  
  512. set "file_path2=%solutio_path%\Server\ncjs\conf2\ppg\application.yml"
  513. if exist "%file_path2%" (
  514. call :replace "%file_path2%" "%old_line%" "%new_line%"
  515. )
  516.  
  517. rem call net start ppg
  518. rem if %ERRORLEVEL% NEQ 0 (
  519. rem echo Fehler beim Starten des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
  520. rem exit /b 1
  521. rem )
  522.  
  523. echo Alle Services starten
  524. call %acd_path%\acd.bat startall
  525.  
  526. echo "Database migration completed successfully."
  527. pause
  528. exit /b
  529.  
  530. :replace
  531. set "filepath=%~1"
  532. set "oldline=%~2"
  533. set "newline=%~3"
  534.  
  535. set "temp_file=%TEMP%\temp_file.tmp"
  536.  
  537. (for /F "usebackq delims=" %%a in ("%filepath%") do (
  538. if "%%a"=="%oldline%" (
  539. echo %newline%
  540. ) else (
  541. echo %%a
  542. )
  543. )) >"%temp_file%"
  544.  
  545. move /y "%temp_file%" "%filepath%"
  546. exit /b
  547.  
  548.  
  549. :get_pg_version
  550. set "pg_bin_path=%~1"
  551.  
  552. for /f "usebackq tokens=2 delims=. " %%G in (`"%pg_bin_path%\pg_config.exe" --version`) do (
  553. set "old_pg_version=%%G"
  554. exit /b
  555. )
  556.  
  557. exit /b
  558. -------------------------------------------------------------------------------------------
  559. -------------------------------------------------------------------------------------------
  560. -------------------------------------------------------------------------------------------
  561.  
  562. ich hatte das problem, dass bspw. bei der internen datensicherung mit dem backup-skript ich min. 12 mal das passwort für die datenbanken eingeben musste. das habe ich durch eine änderung der pgpass.conf datei gelöst (localhost:5432:*postgres:#post.2000!)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement