Advertisement
willkommensbrief

charly 2023 datenbankmigration

Oct 6th, 2023 (edited)
495
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.54 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, 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. alter Versuch vor dem Gedankenexperiment:
  72. charly-dienste beenden
  73. dumpall erstellen (pg_dumpall -U postgres -f E:\Solutio\dump-DATUM.sql)
  74. postgres 8 beenden (pg_ctl.exe stop -D PostgreSQL/data" -m fast)
  75. neues postgres 8+X (X != 0) installieren (username = postgres13 ... pw = #post.2000! ... )
  76. (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
  77. host all all ::1/128 trust
  78. host all all 127.0.0.1/32 trust
  79. host all all 0.0.0.0/0 md5)
  80. postgres 8+X als Dienst starten
  81. dump einspielen (psql -U postgres -d postgres -f E:\Solutio\dump-DATUM.sql -c "SELECT '#post.2000!'
  82. 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!
  83. Auf pgtune.leopard.in.ua lassen sich Modi einstellen in \Solutio\Server\PostgreSQLxy\data\postgresql.conf
  84. Es gibt zwei Zahlen, die ich jetzt sehr hasse: 96 und vorallem 84 bzw. 846.
  85. 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.
  86. -------------------------------------------------------------------------------------------
  87. -------------------------------------------------------------------------------------------
  88. -------------------------------------------------------------------------------------------
  89.  
  90. migrate_all.bat - modifiziert fürs zmk grünenplan 2023-09
  91.  
  92. @echo off
  93. setlocal
  94.  
  95. REM Passen Sie diese Daten an Ihr System an.
  96. set solutio_path=E:\Solutio
  97. set pg9_path=%solutio_path%\Server\PostgreSQL9.5
  98. set pg9_bin_path=%pg9_path%\bin
  99. set db_dump_dir=%solutio_path%
  100. set pg13_path=%solutio_path%\Server\PostgreSQL13
  101. set pg13_superuser_password=#post.2000!
  102. set pg_port=5432
  103.  
  104. 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
  105. set db_dump_path=%db_dump_dir%\dump-DATUM.sql
  106. set "pg9_data_path=%solutio_path%\Server\PostgreSQL9.5\data"
  107. REM set download_url=https://get.enterprisedb.com/postgresql/postgresql-13.12-1-windows-x64.exe
  108. set installer_path=%solutio_path%\postgresql-13.12-1-windows-x64.exe
  109.  
  110. REM Nicht veraendern!
  111. set pg_service_name=Solutio_PostgreSQL13
  112. set old_pg_version=9
  113. set acd_path=%solutio_path%\Server\ncjs
  114.  
  115. set start_step=%~2
  116.  
  117. if "%~1"=="-s" (
  118. if "%~2"=="" (
  119. echo Es wurde kein Schritt angegeben.
  120. exit /b 1
  121. )
  122. )
  123.  
  124. if "%start_step%"=="2" goto step2
  125. if "%start_step%"=="3" goto step3
  126. if "%start_step%"=="4" goto step4
  127. if "%start_step%"=="5" goto step5
  128. if "%start_step%"=="6" goto step6
  129. if "%start_step%"=="7" goto step7
  130.  
  131. echo Dieses Skript sollte nur verwendet werden, wenn in Ihrer Datenbank AUSSCHLIESSLICH Solutio Datenbanken existieren und nie etwas an der Installation geaendert wurde.
  132. echo Falls dies nicht der Fall ist, oder Sie sich nicht sicher sind, verwenden Sie bitte migrate_solutio.bat
  133. echo ""
  134. echo Folgende Werte werden verwendet. Bitte pruefen Sie, ob diese zu Ihrem System passen:
  135. echo solutio_path=%solutio_path%
  136. echo pg9_path=%pg9_path%
  137. echo db_dump_dir=%db_dump_dir%
  138. echo pg13_path=%pg13_path%
  139. echo pg_port=%pg_port%
  140.  
  141. echo Haben Sie alle Werte ueberprueft? Soll die Migration zu Postgres 13 durchgefuehrt werden?
  142. choice /c JN
  143.  
  144. if errorlevel 2 (
  145. echo Die Migration wird nicht gestartet. Bitte passen Sie die Werte direkt Im oberen Teil des Skriptes an.
  146. exit /b 1
  147. )
  148.  
  149. set "size=0"
  150.  
  151. for /R "%pg9_path%\data\base" %%F in (*) do (
  152. set /A "size+=%%~zF"
  153. )
  154.  
  155. set /A "folder_size_mb=(size / 1024 / 1024) + 200"
  156.  
  157. echo Benoetigter Speicherplatz in %db_dump_dir%: %folder_size_mb% MB
  158. echo Benoetigter Speicherplatz in %pg13_path%: %folder_size_mb% MB
  159. echo Haben Sie ueberprueft, ob in den Pfaden jeweils ausreichend Specicherplatz vorhanden ist?
  160. choice /c JN
  161.  
  162. if errorlevel 2 (
  163. echo Die Migration wird nicht gestartet.
  164. exit /b 1
  165. )
  166.  
  167. call :get_pg_version %pg9_bin_path%
  168.  
  169. if %old_pg_version% gtr 12 (
  170. echo Sie versuchen, von PosgreSQL Version %old_pg_version% zu migrieren. Dies ist nicht moeglich. Haben Sie die Migration schon einmal ausgefuehrt?
  171. exit /b 1
  172. )
  173.  
  174.  
  175. echo Alle Services stoppen
  176. call %acd_path%\acd.bat stopall
  177.  
  178. :step1
  179. echo.### Step 1: Erzeugen der Datenbank Sicherung aus PostgreSQL 9 (dies wird eine Weile dauern...)
  180. call "%pg9_path%\bin\pg_dumpall.exe" -U postgres -p %pg_port% -f "%db_dump_path%"
  181. if %ERRORLEVEL% NEQ 0 (
  182. echo Fehler beim Erstellen der Datenbank Sicherung mit PostgreSQL 9.
  183. exit /b 1
  184. )
  185.  
  186. :step2
  187. echo.### Step 2: Alten PostgreSQL Service stoppen
  188. call "%pg9_path%\bin\pg_ctl.exe" stop -D "%pg9_path%\data" -m fast
  189. if %ERRORLEVEL% NEQ 0 (
  190. echo Fehler beim Stoppen des PostgreSQL 9 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
  191. exit /b 1
  192. )
  193.  
  194. sc config Solutio_PostgreSQL start=demand
  195. if %ERRORLEVEL% NEQ 0 (
  196. echo Fehler beim Deaktivieren des PostgreSQL 9 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
  197. exit /b 1
  198. )
  199.  
  200. :step3
  201. echo.### Step 3: PostgreSQL 13 herunterladen
  202. @echo on
  203. call powershell Start-BitsTransfer -Source %download_url% %installer_path%
  204. @echo off
  205. if %ERRORLEVEL% NEQ 0 (
  206. echo Fehler beim Herunterladen des PostgreSQL 13 Installers. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 3 aus
  207. exit /b 1
  208. )
  209.  
  210. :step4
  211. echo.### Step 4: PostgreSQL 13 installieren
  212. @echo on
  213. 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
  214. if %ERRORLEVEL% NEQ 0 (
  215. echo Fehler beim Installieren von PostgreSQL 13. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 4 aus
  216. exit /b 1
  217. )
  218. @echo off
  219. call "%pg13_path%\bin\pg_ctl.exe" stop -D "%pg13_path%\data" -m f
  220. call copy /y "%pg9_path%\data\pg_hba.conf" "%pg13_path%\data\pg_hba.conf"
  221.  
  222. :step5
  223. echo.### Step 5: PostgreSQL 13 starten
  224. call net start %pg_service_name%
  225.  
  226. if %ERRORLEVEL% NEQ 0 (
  227. 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
  228. call notepad.exe "%pg13_path%\data\pg_hba.conf"
  229. exit /b 1
  230. )
  231.  
  232. :step6
  233. echo.### Step 6: Einspielen der Datenbank Sicherung in PostgreSQL 13 (dies wird eine Weile dauern...)
  234. call "%pg13_path%\bin\psql.exe" -U postgres13 -d postgres -p %pg_port% -f "%db_dump_path%" -c "SELECT '%pg13_superuser_password%';" >NUL
  235. if %ERRORLEVEL% NEQ 0 (
  236. 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
  237. exit /b 1
  238. )
  239.  
  240. :step7
  241. echo.### Step 7: Konfiguration der Solutio services
  242. @echo off
  243. set KEY_NAME=HKLM\Software\Solutio\Charly\PostgreSQL
  244. set KEY_NAME_WOW=HKLM\Software\Wow6432Node\Solutio\Charly\PostgreSQL
  245. set VALUE_NAME=Path
  246. set VALUE_VERSION=Version
  247. set NEW_NAME=%pg13_path%
  248. set NEW_VERSION=13.11.1
  249. call reg.exe add "%KEY_NAME%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
  250. call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
  251. call reg.exe add "%KEY_NAME%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
  252. call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
  253.  
  254. rem call net stop ppg
  255. rem if %ERRORLEVEL% NEQ 0 (
  256. rem echo Fehler beim Stoppen des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
  257. rem exit /b 1
  258. rem )
  259.  
  260. REM rename old H2 database from ppg service, then it will be recreated with the new postgres db values
  261. rename "%solutio_path%\Server\ncjs\database\ppg-service\persistence.mv.db" "persistence_alt.mv.db"
  262.  
  263. set "persistence_trace_path=%solutio_path%\Server\ncjs\database\ppg-service\persistence.trace.db"
  264. if exist "%persistence_trace_path%" (
  265. rename "%persistence_trace_path%" "persistence_alt.trace.db"
  266. )
  267.  
  268. set "file_path=%solutio_path%\Server\ncjs\conf\ppg\application.yml"
  269. set "old_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg9_path%"
  270. set "new_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg13_path%"
  271. call :replace "%file_path%" "%old_line%" "%new_line%"
  272.  
  273. set "file_path2=%solutio_path%\Server\ncjs\conf2\ppg\application.yml"
  274. if exist "%file_path2%" (
  275. call :replace "%file_path2%" "%old_line%" "%new_line%"
  276. )
  277.  
  278. rem call net start ppg
  279. rem if %ERRORLEVEL% NEQ 0 (
  280. rem echo Fehler beim Starten des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
  281. rem exit /b 1
  282. rem )
  283.  
  284. echo Alle Services starten
  285. call %acd_path%\acd.bat startall
  286.  
  287. echo "Database migration completed successfully."
  288. pause
  289. exit /b
  290.  
  291. :replace
  292. set "filepath=%~1"
  293. set "oldline=%~2"
  294. set "newline=%~3"
  295.  
  296. set "temp_file=%TEMP%\temp_file.tmp"
  297.  
  298. (for /F "usebackq delims=" %%a in ("%filepath%") do (
  299. if "%%a"=="%oldline%" (
  300. echo %newline%
  301. ) else (
  302. echo %%a
  303. )
  304. )) >"%temp_file%"
  305.  
  306. move /y "%temp_file%" "%filepath%"
  307. exit /b
  308.  
  309.  
  310. :get_pg_version
  311. set "pg_bin_path=%~1"
  312.  
  313. for /f "usebackq tokens=2 delims=. " %%G in (`"%pg_bin_path%\pg_config.exe" --version`) do (
  314. set "old_pg_version=%%G"
  315. exit /b
  316. )
  317.  
  318. exit /b
  319.  
  320. -------------------------------------------------------------------------------------------
  321. -------------------------------------------------------------------------------------------
  322. -------------------------------------------------------------------------------------------
  323. migrate_all_16.bat (auf eigene Gefahr, bei solutio unbeliebt)
  324.  
  325. @echo off
  326. setlocal
  327.  
  328. REM Passen Sie diese Daten an Ihr System an.
  329. set solutio_path=C:\Solutio
  330. set pg13_path=%solutio_path%\Server\PostgreSQL13
  331. set pg13_bin_path=%pg13_path%\bin
  332. set db_dump_dir=%solutio_path%
  333. set pg16_path=%solutio_path%\Server\PostgreSQL16
  334. set pg16_superuser_password=#post.2000!
  335. set pg_port=5432
  336.  
  337. REM Alles Weitere muss normalerweise nicht, kann aber angepasst werden. Für den Download-Link muss man flink sein und unter
  338. REM https://www.enterprisedb.com/downloads/postgres-postgresql-downloads das neuste Paket runterladen. Während es lädt, den Link extrahieren im Browser.
  339. REM und in set download_url= einfügen.
  340. set db_dump_path=%db_dump_dir%\dump13.sql
  341. set "pg13_data_path=%solutio_path%\Server\PostgreSQL13\data"
  342. set download_url=https://get.enterprisedb.com/postgresql/postgresql-16.0-1-windows-x64.exe
  343. set installer_path=%solutio_path%\postgresql-16.0-1-windows-x64.exe
  344.  
  345. REM Nicht veraendern!
  346. set pg_service_name=Solutio_PostgreSQL16
  347. set old_pg_version=13
  348. set acd_path=%solutio_path%\Server\ncjs
  349.  
  350. set start_step=%~2
  351.  
  352. if "%~1"=="-s" (
  353. if "%~2"=="" (
  354. echo Es wurde kein Schritt angegeben.
  355. exit /b 1
  356. )
  357. )
  358.  
  359. if "%start_step%"=="2" goto step2
  360. if "%start_step%"=="3" goto step3
  361. if "%start_step%"=="4" goto step4
  362. if "%start_step%"=="5" goto step5
  363. if "%start_step%"=="6" goto step6
  364. if "%start_step%"=="7" goto step7
  365.  
  366. echo Dieses Skript sollte nur verwendet werden, wenn in Ihrer Datenbank AUSSCHLIESSLICH Solutio Datenbanken existieren und nie etwas an der Installation geaendert wurde.
  367. echo Falls dies nicht der Fall ist, oder Sie sich nicht sicher sind, verwenden Sie bitte migrate_solutio.bat
  368. echo ""
  369. echo Folgende Werte werden verwendet. Bitte pruefen Sie, ob diese zu Ihrem System passen:
  370. echo solutio_path=%solutio_path%
  371. echo pg13_path=%pg13_path%
  372. echo db_dump_dir=%db_dump_dir%
  373. echo pg16_path=%pg16_path%
  374. echo pg_port=%pg_port%
  375.  
  376. echo Haben Sie alle Werte ueberprueft? Soll die Migration zu Postgres 16 durchgefuehrt werden?
  377. choice /c JN
  378.  
  379. if errorlevel 2 (
  380. echo Die Migration wird nicht gestartet. Bitte passen Sie die Werte direkt Im oberen Teil des Skriptes an.
  381. exit /b 1
  382. )
  383.  
  384. set "size=0"
  385.  
  386. for /R "%pg13_path%\data\base" %%F in (*) do (
  387. set /A "size+=%%~zF"
  388. )
  389.  
  390. set /A "folder_size_mb=(size / 1024 / 1024) + 200"
  391.  
  392. echo Benoetigter Speicherplatz in %db_dump_dir%: %folder_size_mb% MB
  393. echo Benoetigter Speicherplatz in %pg16_path%: %folder_size_mb% MB
  394. echo Haben Sie ueberprueft, ob in den Pfaden jeweils ausreichend Specicherplatz vorhanden ist?
  395. choice /c JN
  396.  
  397. if errorlevel 2 (
  398. echo Die Migration wird nicht gestartet.
  399. exit /b 1
  400. )
  401.  
  402. call :get_pg_version %pg13_bin_path%
  403.  
  404. if %old_pg_version% gtr 14 (
  405. echo Sie versuchen, von PosgreSQL Version %old_pg_version% zu migrieren. Dies ist nicht moeglich. Haben Sie die Migration schon einmal ausgefuehrt?
  406. exit /b 1
  407. )
  408.  
  409.  
  410. echo Alle Services stoppen
  411. call %acd_path%\acd.bat stopall
  412.  
  413. :step1
  414. echo.### Step 1: Erzeugen der Datenbank Sicherung aus PostgreSQL 13 (dies wird eine Weile dauern...)
  415. call "%pg13_path%\bin\pg_dumpall.exe" -U postgres -p %pg_port% -f "%db_dump_path%"
  416. if %ERRORLEVEL% NEQ 0 (
  417. echo Fehler beim Erstellen der Datenbank Sicherung mit PostgreSQL 13.
  418. exit /b 1
  419. )
  420.  
  421. :step2
  422. echo.### Step 2: Alten PostgreSQL Service stoppen
  423. call "%pg13_path%\bin\pg_ctl.exe" stop -D "%pg13_path%\data" -m fast
  424. if %ERRORLEVEL% NEQ 0 (
  425. echo Fehler beim Stoppen des PostgreSQL 13 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
  426. exit /b 1
  427. )
  428.  
  429. sc config Solutio_PostgreSQL start=demand
  430. if %ERRORLEVEL% NEQ 0 (
  431. echo Fehler beim Deaktivieren des PostgreSQL 9 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
  432. exit /b 1
  433. )
  434.  
  435. :step3
  436. echo.### Step 3: PostgreSQL 16 herunterladen
  437. @echo on
  438. call powershell Start-BitsTransfer -Source %download_url% %installer_path%
  439. @echo off
  440. if %ERRORLEVEL% NEQ 0 (
  441. echo Fehler beim Herunterladen des PostgreSQL 16 Installers. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 3 aus
  442. exit /b 1
  443. )
  444.  
  445. :step4
  446. echo.### Step 4: PostgreSQL 16 installieren
  447. @echo on
  448. 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
  449. if %ERRORLEVEL% NEQ 0 (
  450. echo Fehler beim Installieren von PostgreSQL 16. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 4 aus
  451. exit /b 1
  452. )
  453. @echo off
  454. call "%pg16_path%\bin\pg_ctl.exe" stop -D "%pg16_path%\data" -m f
  455. call copy /y "%pg13_path%\data\pg_hba.conf" "%pg16_path%\data\pg_hba.conf"
  456.  
  457. :step5
  458. echo.### Step 5: PostgreSQL 16 starten
  459. call net start %pg_service_name%
  460.  
  461. if %ERRORLEVEL% NEQ 0 (
  462. 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
  463. call notepad.exe "%pg16_path%\data\pg_hba.conf"
  464. exit /b 1
  465. )
  466.  
  467. :step6
  468. echo.### Step 6: Einspielen der Datenbank Sicherung in PostgreSQL 16 (dies wird eine Weile dauern...)
  469. call "%pg16_path%\bin\psql.exe" -U postgres16 -d postgres -p %pg_port% -f "%db_dump_path%" -c "SELECT '%pg16_superuser_password%';" >NUL
  470. if %ERRORLEVEL% NEQ 0 (
  471. 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
  472. exit /b 1
  473. )
  474.  
  475. :step7
  476. echo.### Step 7: Konfiguration der Solutio services
  477. @echo off
  478. set KEY_NAME=HKLM\Software\Solutio\Charly\PostgreSQL
  479. set KEY_NAME_WOW=HKLM\Software\Wow6432Node\Solutio\Charly\PostgreSQL
  480. set VALUE_NAME=Path
  481. set VALUE_VERSION=Version
  482. set NEW_NAME=%pg16_path%
  483. set NEW_VERSION=16.0
  484. call reg.exe add "%KEY_NAME%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
  485. call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
  486. call reg.exe add "%KEY_NAME%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
  487. call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
  488.  
  489. rem call net stop ppg
  490. rem if %ERRORLEVEL% NEQ 0 (
  491. rem echo Fehler beim Stoppen des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
  492. rem exit /b 1
  493. rem )
  494.  
  495. REM rename old H2 database from ppg service, then it will be recreated with the new postgres db values
  496. rename "%solutio_path%\Server\ncjs\database\ppg-service\persistence.mv.db" "persistence_alt.mv.db"
  497.  
  498. set "persistence_trace_path=%solutio_path%\Server\ncjs\database\ppg-service\persistence.trace.db"
  499. if exist "%persistence_trace_path%" (
  500. rename "%persistence_trace_path%" "persistence_alt.trace.db"
  501. )
  502.  
  503. set "file_path=%solutio_path%\Server\ncjs\conf\ppg\application.yml"
  504. set "old_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg13_path%"
  505. set "new_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg16_path%"
  506. call :replace "%file_path%" "%old_line%" "%new_line%"
  507.  
  508. set "file_path2=%solutio_path%\Server\ncjs\conf2\ppg\application.yml"
  509. if exist "%file_path2%" (
  510. call :replace "%file_path2%" "%old_line%" "%new_line%"
  511. )
  512.  
  513. rem call net start ppg
  514. rem if %ERRORLEVEL% NEQ 0 (
  515. rem echo Fehler beim Starten des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
  516. rem exit /b 1
  517. rem )
  518.  
  519. echo Alle Services starten
  520. call %acd_path%\acd.bat startall
  521.  
  522. echo "Database migration completed successfully."
  523. pause
  524. exit /b
  525.  
  526. :replace
  527. set "filepath=%~1"
  528. set "oldline=%~2"
  529. set "newline=%~3"
  530.  
  531. set "temp_file=%TEMP%\temp_file.tmp"
  532.  
  533. (for /F "usebackq delims=" %%a in ("%filepath%") do (
  534. if "%%a"=="%oldline%" (
  535. echo %newline%
  536. ) else (
  537. echo %%a
  538. )
  539. )) >"%temp_file%"
  540.  
  541. move /y "%temp_file%" "%filepath%"
  542. exit /b
  543.  
  544.  
  545. :get_pg_version
  546. set "pg_bin_path=%~1"
  547.  
  548. for /f "usebackq tokens=2 delims=. " %%G in (`"%pg_bin_path%\pg_config.exe" --version`) do (
  549. set "old_pg_version=%%G"
  550. exit /b
  551. )
  552.  
  553. exit /b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement