Repository navigation
Datenbank
English: Database-(EN)
| Verwendung | |
|---|---|
| H2 (Datei-Datenbank) |
Standard für neue Installationen „Auf diesem Computer“. Dateien: <Ordner>/<Name>.mv.db (dazu ggf. <Name>.trace.db). |
| Apache Derby 10.17 | Bestehende Installationen; wird weiter unterstützt (Derby wird nicht mehr weiterentwickelt). Die Datenbank ist ein Ordner <Ordner>/<Name>. |
| MySQL / MariaDB | Server für mehrere Arbeitsplätze (Einrichtungsassistent › „Auf einem Datenbank-Server“ › MySQL / MariaDB, Adresse host:3306). |
| PostgreSQL | Server für mehrere Arbeitsplätze (Einrichtungsassistent › „Auf einem Datenbank-Server“ › PostgreSQL, Adresse host:5432). |
Wo liegt die Datenbank? Neue Installationen schlagen <Benutzerordner>/.yabs/h2 vor (Windows C:\Users\<Name>\.yabs\h2, Linux /home/<name>/.yabs/h2, macOS /Users/<name>/.yabs/h2); der Ordner kann im Einrichtungsassistenten mit Ändern … gewählt werden. Der Programmordner ~/.yabs (Einstellungen, Cache, Sicherungen) lässt sich mit -appdir <Ordner> ändern.
- H2 verwendet dieselbe Struktur und dieselben Updates wie Derby, automatisch umgewandelt (
mpv5.db.common.H2Dialect): Derby-Kompatibilitätsmodus, SMALLINT-Spalten werden BIGINT (keine Überläufe),LONG VARCHAR→VARCHAR(32700),RENAME COLUMNund Identity-Syntax angepasst. - Derbys SQL-Trigger (Suchindex, Papierkorb) laufen in H2 über die Java-Klasse
H2Trigger; ihre Anweisungen stehen in der Tabelleyabstriggers. - Updates beim Start funktionieren wie bei Derby: unterbrochene Updates setzen fort, bereits vorhandene Änderungen werden übersprungen.
- Eine bestehende Derby-Datenbank wird nicht automatisch nach H2 umgezogen; beide Varianten laufen nebeneinander (je eine Verbindung). Umziehen: neue (H2-)Datenbank anlegen, dann Datei › Import › Von YaBS 1.3.2 … – übernimmt alle Daten einer Derby-Datenbank von YaBS 1.3.2 (oder älter) mit ihren IDs, die alte Datenbank bleibt unverändert (
mpv5.db.migration.Yabs132Import, siehe Hinweise).
Neue Datenbanken (H2, MySQL/MariaDB, PostgreSQL) werden in einem Schritt aus der Datei src/main/resources/db/schema.sql angelegt – der Struktur der aktuellen Version, neutral geschrieben. Die Updates laufen nur noch für bestehende Datenbanken, die älter sind.
- Ein reines ANSI-SQL für alle Datenbanken geht nicht ganz: Tabellen, Schlüssel und Indizes sind portabel, es unterscheiden sich Identitätsspalten (MySQL
AUTO_INCREMENT), große Felder (PostgreSQLBYTEA/TEXT, MySQLLONGBLOB/LONGTEXT), Zeitstempel (MySQLDATETIME), lange Texte (MySQL:TEXT, Zeilen sind auf 65 535 Byte begrenzt) und vor allem die Trigger für Suchindex und Papierkorb. Darum gibt es eine neutrale Datei und je Datenbank einen kleinen Umsetzer (mpv5.db.common.SqlDialect):-
H2: Trigger über die Java-Klasse
H2Trigger. - PostgreSQL: je Trigger eine PL/pgSQL-Funktion.
- MySQL/MariaDB: Zeilen-Trigger; das Aufräumen des Papierkorbs ist Teil der Papierkorb-Trigger jeder Tabelle (MySQL-Trigger dürfen die eigene Tabelle nicht ändern).
-
H2: Trigger über die Java-Klasse
- Derby verwendet weiter die alte Struktur und die Updates.
-
Für Entwickler – ein neues Datenbank-Update: das Update in
DatabaseUpdatereintragen (Derby- und MySQL-Syntax; PostgreSQL inUPDATES_POSTGRES),Constants.DATABASE_VERSIONerhöhen, dann./gradlew generateSchema. Der TestSchemaTestschlägt fehl, solange die Datei nicht passt; mitYABS_TEST_POSTGRES/YABS_TEST_MYSQL(JDBC-URL einer leeren Datenbank, z. B.jdbc:postgresql://localhost:5432/yabs?user=yabs) prüft er die Datei auch auf PostgreSQL und MySQL,AppOnPostgresTest/AppOnMySQLTestspielen dort eine Neuinstallation mit dem echten Programmcode durch.
- Einrichtungsassistent › Auf einem Datenbank-Server › PostgreSQL, Adresse
host:5432, Benutzer, Passwort und Datenbankname. YaBS legt die Datenbank an (der Benutzer braucht das RechtCREATEDB) oder verwendet eine vorhandene leere Datenbank. - Getestet mit PostgreSQL 16. Treiber
org.postgresql.Driver(wird mitgeliefert).
-
Treiber: MySQL Connector/J 8.4 (mitgeliefert). Der alte Connector/J 5.1 konnte mit aktuellen Servern nicht mehr verbinden. Bestehende Verbindungen (
com.mysql.jdbc.Driver) funktionieren unverändert. -
Neue Datenbanken werden mit
utf8mb4angelegt. Getestet mit MariaDB 10.11. - Suche und Papierkorb brauchen Trigger. MySQL-Datenbanken hatten bisher keine Trigger – Suchindex und Papierkorb blieben leer. Neue Datenbanken bekommen sie; bestehende mit dem Update 1.1986, das auch Suchindex und Papierkorb aus den vorhandenen Daten füllt.
-
Grenzen: Zum Anlegen der Trigger braucht der Datenbank-Benutzer das Recht
TRIGGER. Ist auf dem Server das Binärlog aktiv (log_bin = ON, Replikation), verlangt MySQL zusätzlichSUPERoderlog_bin_trust_function_creators = 1. Fehlt das, läuft das Update trotzdem durch, YaBS zeigt einen Hinweis, und Suche und Papierkorb funktionieren nicht (alles andere schon). Abhilfe: Recht vergeben (GRANT TRIGGER ON yabs.* TO 'yabs'@'%';) bzw.SET GLOBAL log_bin_trust_function_creators = 1;und YaBS neu starten – oder die Datenbank-Version inglobalsettings(yabs_dbversion) auf1.1985zurücksetzen, damit das Update erneut läuft. -
Alte MySQL-Updates repariert: Die Updates 1.1974 bis 1.1982 waren in Derby-Syntax geschrieben (Spalte ohne Typ,
RENAME COLUMN,IDENTITY,BLOB(2G)) – MySQL-Datenbanken kamen nicht über Version 1.1973 hinaus. Sie sind jetzt in MySQL-Syntax; ältere MySQL-Datenbanken werden beim nächsten Start bis zur aktuellen Version aktualisiert. - Unterschiede zu H2/PostgreSQL, die MySQL-typisch sind: Text-Vergleiche ignorieren Groß-/Kleinschreibung (Sortierung
utf8mb4_general_ci), Zeitstempel ohne Zeitzone (DATETIME).
java -jar openyabs.jar -devmode(oder -Dyabs.devmode=true): H2 läuft nur im Arbeitsspeicher, die Einstellungen liegen in einem temporären Ordner (z. B. /tmp/yabs-dev…). E-Mails werden nicht gesendet, sondern als .eml in devmode-mails abgelegt. Nichts wird dauerhaft gespeichert, der Einrichtungsassistent erscheint bei jedem Start und zeigt statt eines Ordners den Hinweis „Entwicklermodus … nur im Arbeitsspeicher“. Mit -appdir <Ordner> bleiben die Einstellungen erhalten, die Datenbank bleibt trotzdem im Speicher. Für eine echte Installation YaBS ohne -devmode starten.
Datei › Verbindungs-Manager (und beim Start, wenn mehrere Verbindungen angelegt sind):
- Liste aller Datenbanken mit Name, Art (H2/Derby/MySQL) und Ort; die aktuelle ist markiert, eine fehlende Datenbank rot. Der ganze Pfad erscheint als Tooltip.
- Verbinden: Benutzer und Passwort eingeben – YaBS wechselt zur gewählten Datenbank und meldet an. Klappt das nicht, bleibt die bisherige Verbindung aktiv. Benutzer merken füllt den Namen beim nächsten Mal vor.
-
Neue Datenbank …: Name eingeben, dann richtet der Einrichtungsassistent die Datenbank ein (ohne Neustart); danach sind Sie als
admin(Passwortpassword) angemeldet. Abbrechen entfernt den leeren Eintrag. -
Vorhandene hinzufügen …: eine vorhandene H2-Datei (
.mv.db) oder einen Derby-Ordner wählen – Art und Name werden erkannt. Es wird nichts angelegt oder geändert. (MySQL-Verbindungen werden angezeigt und funktionieren, können hier aber vorerst nicht neu hinzugefügt werden.) - Umbenennen, Entfernen (nur der Eintrag; die Datenbankdateien bleiben).
Die Verbindungen stehen in der Einstellungsdatei ~/.yabs/settings<Version>.yabs.
Systemsteuerung › Datenbank › Zip-Sicherung (nur für lokale H2- und Derby-Datenbanken, nicht im Entwicklermodus):
- Die Karte Verwendete Datenbank zeigt Art, Ort und Größe der Datenbank und ob sie hier gesichert werden kann (wenn nicht: warum).
-
Jetzt sichern: Die Datenbankverbindung wird geschlossen, die Datenbankdateien werden als
<Name>-<JJJJMMTT-HHMMSS>.zipin den Sicherungsordner geschrieben, danach wird wieder verbunden. -
Sicherungsordner mit Variablen
[HOME] [APPDIR] [DBNAME] [YEAR] [MONTH] [DAY], Standard[APPDIR]/backups/[DBNAME]; der aufgelöste Pfad wird angezeigt. - Sicherungen behalten: Standard 3 – ältere Zip-Dateien mit Zeitstempel werden gelöscht.
- Bei jedem Beenden sichern (optional).
- Sicherung wiederherstellen … überschreibt nie die aktuelle Datenbank: Die Zip-Datei wird neben sich entpackt (Ordner mit demselben Namen) und als neue Verbindung „Sicherung “ angelegt. Wechseln über den Verbindungs-Manager.
Die Einstellungen gelten je Verbindung.
Datenbank sichern (Derby-Online-Sicherung), Als SQL exportieren (MySQL-Dump), Sicherung zurückspielen und das Menü Werkzeuge › Migration sind ausgeblendet, bis sie mit H2 getestet sind. Zum Sichern und Wiederherstellen dient die Zip-Sicherung.
![]()