Inhaltsverzeichnis
Runbook: DSN-Export
Dauer: ~5 Minuten
Rolle: Sysadmin, DBA
Anwendung: Migration, Dokumentation, Disaster Recovery
Export und Import von DSN-Definitionen (Data Source Names).
Workflow
flowchart TD
A[Start] --> B{Ziel?}
B -->|Export| C[DSN aus Config extrahieren]
B -->|Import| D[DSN in Config einfügen]
C --> E[JSON speichern]
D --> F[Gateway neustarten]
E --> G[Fertig]
F --> H[DSN testen]
H --> G
style G fill:#e8f5e9
1. DSN-Struktur
DSN werden in appsettings.json definiert:
{
"Gateway": {
"Databases": {
"demo": {
"Provider": "sqlite",
"ConnectionString": "Data Source=data/demo.db"
},
"produktion": {
"Provider": "sqlserver",
"ConnectionString": "Server=sql01;Database=ProdDB;User Id=app;Password=***"
},
"reporting": {
"Provider": "postgresql",
"ConnectionString": "Host=pg01;Database=reports;Username=reader;Password=***"
}
}
}
}
2. DSN exportieren
Mit jq (Linux/macOS):
# Alle DSN als JSON exportieren jq '.Gateway.Databases' appsettings.json > dsn-export.json # Einzelne DSN exportieren jq '.Gateway.Databases.produktion' appsettings.json > produktion-dsn.json # DSN-Namen auflisten jq -r '.Gateway.Databases | keys[]' appsettings.json
Mit PowerShell (Windows):
# JSON laden $config = Get-Content "appsettings.json" | ConvertFrom-Json # Alle DSN exportieren $config.Gateway.Databases | ConvertTo-Json -Depth 10 | Out-File "dsn-export.json" # DSN-Namen auflisten $config.Gateway.Databases.PSObject.Properties.Name
3. DSN importieren
Mit jq (Linux):
# DSN aus Export-Datei in Config einfügen jq --slurpfile dsn dsn-export.json '.Gateway.Databases = $dsn[0]' appsettings.json > appsettings.new.json # Backup und ersetzen cp appsettings.json appsettings.json.bak mv appsettings.new.json appsettings.json
Mit PowerShell (Windows):
# Bestehende Config laden $config = Get-Content "appsettings.json" | ConvertFrom-Json # Export laden $dsnExport = Get-Content "dsn-export.json" | ConvertFrom-Json # DSN ersetzen $config.Gateway.Databases = $dsnExport # Speichern $config | ConvertTo-Json -Depth 10 | Out-File "appsettings.json" -Encoding UTF8
4. Einzelne DSN hinzufügen
Mit jq:
# Neue DSN hinzufügen jq '.Gateway.Databases.neuedb = { "Provider": "mysql", "ConnectionString": "Server=mysql01;Database=newdb;User=app;Password=secret" }' appsettings.json > appsettings.new.json mv appsettings.new.json appsettings.json
Mit PowerShell:
$config = Get-Content "appsettings.json" | ConvertFrom-Json # Neue DSN als PSObject $newDsn = [PSCustomObject]@{ Provider = "mysql" ConnectionString = "Server=mysql01;Database=newdb;User=app;Password=secret" } # Hinzufügen $config.Gateway.Databases | Add-Member -Name "neuedb" -Value $newDsn -MemberType NoteProperty $config | ConvertTo-Json -Depth 10 | Out-File "appsettings.json" -Encoding UTF8
5. DSN zwischen Umgebungen migrieren
Export aus Produktion:
# Auf Prod-Server ssh prod-gateway "jq '.Gateway.Databases' /opt/data-gateway/appsettings.json" > prod-dsn.json
Import in Staging (mit Passwort-Anpassung):
# Passwörter durch Staging-Passwörter ersetzen jq '.produktion.ConnectionString = "Server=sql-staging;Database=ProdDB;User Id=app;Password=staging-pwd"' \ prod-dsn.json > staging-dsn.json # In Staging importieren scp staging-dsn.json staging-gateway:/tmp/ ssh staging-gateway "jq --slurpfile dsn /tmp/staging-dsn.json \ '.Gateway.Databases = \$dsn[0]' /opt/data-gateway/appsettings.json > /tmp/new.json && \ mv /tmp/new.json /opt/data-gateway/appsettings.json && \ systemctl restart data-gateway"
6. Gateway neustarten
Nach DSN-Änderungen:
# Linux sudo systemctl restart data-gateway # Windows Restart-Service -Name "DataGateway" # Docker docker restart gateway
7. DSN testen
# Alle DSN testen for dsn in $(jq -r '.Gateway.Databases | keys[]' appsettings.json); do echo -n "Testing $dsn: " curl -s -o /dev/null -w "%{http_code}\n" "http://localhost:5000/api/v1/dsn/$dsn/tables" done
Erwartete Ausgabe:
Testing demo: 200 Testing produktion: 200 Testing reporting: 200
8. Checkliste
| # | Prüfpunkt | ✓ |
| — | ———– | — |
| 1 | DSN exportiert | ☐ |
| 2 | Export-Datei gesichert | ☐ |
| 3 | Passwörter nicht im Klartext in Export | ☐ |
| 4 | Import durchgeführt | ☐ |
| 5 | Gateway neugestartet | ☐ |
| 6 | Alle DSN getestet | ☐ |
Troubleshooting
| Problem | Ursache | Lösung |
| ——— | ——— | ——– |
jq: parse error | Ungültiges JSON | JSON validieren |
| DSN nicht gefunden | Gateway nicht neugestartet | Restart |
Connection failed | Falscher Connection String | Credentials prüfen |
| Encoding-Probleme | Falsches Encoding | UTF-8 verwenden |
Sicherheitshinweise
Passwörter in Exports:
- Niemals Passwörter in Git committen
- Export-Dateien verschlüsseln oder löschen
- Umgebungsvariablen für Credentials verwenden:
"ConnectionString": "Server=sql01;Database=ProdDB;User Id=${DB_USER};Password=${DB_PASS}"
Verwandte Runbooks
- Config-Backup – Vollständige Sicherung
- DSN verwalten – DSN-Administration
- Server starten – Nach Import
« ← Config-Backup | → Operator-Übersicht »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional
Zuletzt geändert: den 29.01.2026 um 15:12