Signatur
Beschreibung
ibase_maintain_db() ermöglicht es, administrative Wartungsoperationen auf einer Firebird- oder InterBase-Datenbank auszuführen, ohne die Datenbank direkt zu öffnen. Die Funktion arbeitet über eine zuvor mit ibase_service_attach() geöffnete Service-Verbindung.
Typische Einsatzszenarien sind das Ausführen eines Datenbank-Sweeps (Bereinigung veralteter Transaktionsdaten), das Setzen in den Read-Only-Modus oder das Aktivieren von Datenbankoptionen auf Serverebene. Der $operation-Parameter steuert, welche Wartungsoperation durchgeführt wird; er nimmt eine der vordefinierten Konstanten wie IBASE_RES_CREATE, IBASE_SVC_DB_ONLINE oder IBASE_SVC_REPAIR an.
Die Funktion ist besonders nützlich für automatisierte Datenbankwartungsscripts, die ohne interaktiven Datenbankzugriff auf Serverebene agieren müssen. Da es sich um eine Low-Level-Administrationsfunktion handelt, sollte sie nur von vertrauenswürdigen, privilegierten Prozessen aufgerufen werden.
Hinweis: Die ibase_*-Funktionen wurden in PHP 8.0 aus dem PHP-Kern entfernt und sind nur noch über die PECL-Erweiterung ibase bzw. FirebirdSQL/php-firebird verfügbar.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $service_handle Pflicht | resource | Eine aktive Service-Verbindung, die zuvor mit ibase_service_attach() geöffnet wurde. |
|
| $db Pflicht | string | Der vollständige Pfad zur Datenbankdatei auf dem Server (z. B. /var/db/mydb.fdb). |
|
| $operation Pflicht | int | Die durchzuführende Wartungsoperation als vordefinierte Konstante, z. B. IBASE_SVC_REPAIR, IBASE_SVC_DB_ONLINE oder IBASE_SVC_GET_SIZE. |
|
| $argument | int | 0 | Optionaler ganzzahliger Zusatzparameter für die Operation, z. B. Optionsflags. Standardmäßig 0. |
Rückgabewert
true bei Erfolg zurück, oder false bei einem Fehler (z. B. ungültige Service-Verbindung, nicht vorhandene Datenbank oder fehlende Rechte).Beispiele
Datenbank-Sweep über Service-Verbindung ausführen
<?php
// Service-Verbindung aufbauen
$service = ibase_service_attach('localhost', 'sysdba', 'masterkey');
if ($service) {
$dbPath = '/var/firebird/myapp.fdb';
// Sweep ausführen, um veraltete Transaktionsdaten zu bereinigen
$result = ibase_maintain_db($service, $dbPath, IBASE_RES_CREATE, 0);
if ($result) {
echo "Wartungsoperation erfolgreich abgeschlossen." . PHP_EOL;
} else {
echo "Fehler bei der Wartungsoperation." . PHP_EOL;
}
ibase_service_detach($service);
} else {
echo "Service-Verbindung fehlgeschlagen." . PHP_EOL;
}
?>
Datenbank online schalten nach Wartungsmodus
<?php
$service = ibase_service_attach('db.example.com', 'sysdba', 'masterkey');
if (!$service) {
die('Verbindung zum Datenbankservice nicht möglich.');
}
$dbPath = '/opt/firebird/data/production.fdb';
// Datenbank wieder online schalten
if (ibase_maintain_db($service, $dbPath, IBASE_SVC_DB_ONLINE)) {
echo "Datenbank ist wieder online." . PHP_EOL;
} else {
echo "Fehler: Datenbank konnte nicht online geschaltet werden." . PHP_EOL;
}
ibase_service_detach($service);
?>
// Wichtig · Fallstricke
Deprecation/Entfernung: Die gesamte ibase_*-Erweiterung wurde in PHP 8.0 aus dem PHP-Kern entfernt. Für PHP 8.x und neuer muss die PECL-Erweiterung php-firebird separat installiert werden.
Sicherheit: Die Funktion erfordert Administratorrechte auf dem Datenbankserver (typischerweise den SYSDBA-Account). Zugangsdaten und Service-Verbindungen sollten niemals in öffentlich zugänglichem Code gespeichert werden. Datenbankpfade sollten niemals direkt aus Benutzereingaben übernommen werden, um Path-Traversal-Angriffe zu verhindern.
Verfügbarkeit der Konstanten: Die verfügbaren Operationskonstanten (z. B. IBASE_SVC_REPAIR, IBASE_SVC_DB_ONLINE) hängen von der installierten Version der ibase-Erweiterung ab. Konsultiere die jeweilige Dokumentation für vollständige Konstantenlisten.