Start · Sprachen · PHP · Referenz · oci_set_client_info

oci_set_client_info

Funktion

Setzt die Client-Information für eine Oracle-Datenbankverbindung, die in Datenbank-Audit-Logs und -Traces sichtbar ist.

seit PHP 5.3.2 Kategorie: db

Signatur

oci_set_client_info(resource $connection, string $client_info): bool

Beschreibung

oci_set_client_info überträgt einen frei wählbaren Informationsstring an die Oracle-Datenbank, der der aktuellen Verbindungssitzung zugeordnet wird. Dieser String wird in der Datenbank-View V$SESSION in der Spalte CLIENT_INFO gespeichert und steht damit für Monitoring, Auditing und Performance-Analysen zur Verfügung.

Die Funktion ist besonders nützlich in Anwendungen, bei denen mehrere PHP-Prozesse oder ein Connection-Pool dieselben Datenbankverbindungen teilen. Durch das Setzen von Client-Informationen können Datenbankadministratoren nachvollziehen, welcher Teil der Anwendung eine bestimmte Abfrage ausgelöst hat – beispielsweise der Benutzername der Web-Anwendung oder ein Modul-/Funktionsname.

Der Wert wird erst beim nächsten Roundtrip zur Datenbank (z. B. beim Ausführen einer SQL-Anfrage) tatsächlich übertragen. Es handelt sich um Metadaten-Information, die ausschließlich für Beobachtungs- und Diagnosezwecke gedacht ist und keinen Einfluss auf die Ausführung von SQL-Befehlen hat.

Der übergebene String darf maximal 64 Byte lang sein; längere Strings werden von Oracle stillschweigend abgeschnitten. Die Funktion ergänzt die Schwester-Funktionen oci_set_client_identifier, oci_set_module_name und oci_set_action, die zusammen ein vollständiges End-to-End-Tracing in Oracle ermöglichen.

Parameter

Name Typ Default Beschreibung
$connection Pflicht resource Eine gültige Oracle-Verbindungsressource, die mit oci_connect, oci_pconnect oder oci_new_connect erstellt wurde.
$client_info Pflicht string Ein frei wählbarer Informationsstring (max. 64 Byte), der der Datenbankverbindung zugeordnet wird. Typischerweise werden hier Informationen wie Anwendungsmodul, Benutzername oder Anfrage-ID übergeben.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Verbindungsressource).

Beispiele

Client-Information für eine Oracle-Verbindung setzen

<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');

if (!$conn) {
    $e = oci_error();
    trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}

// Client-Information setzen (z. B. aktueller PHP-Skriptname)
$clientInfo = 'Modul: Bestellverwaltung; User: ' . ($_SERVER['REMOTE_USER'] ?? 'anonym');
oci_set_client_info($conn, $clientInfo);

// SQL ausführen – erst hier wird die Info zur DB übertragen
$stid = oci_parse($conn, 'SELECT * FROM employees WHERE ROWNUM <= 3');
oci_execute($stid);

while ($row = oci_fetch_assoc($stid)) {
    echo $row['LAST_NAME'] . "\n";
}

oci_free_statement($stid);
oci_close($conn);
?>

Client-Information in V$SESSION abfragen

<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');

if (!$conn) {
    $e = oci_error();
    trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}

// Client-Information setzen
oci_set_client_info($conn, 'PHP-App v2.5 / Checkout-Prozess');

// Dummy-Query, damit die Info übertragen wird
$stid = oci_parse($conn, 'SELECT 1 FROM DUAL');
oci_execute($stid);
oci_free_statement($stid);

// Nun die gespeicherte CLIENT_INFO aus V$SESSION abfragen (als DBA-User)
$stid2 = oci_parse($conn, "SELECT CLIENT_INFO FROM V\$SESSION WHERE AUDSID = USERENV('SESSIONID')");
oci_execute($stid2);

$row = oci_fetch_assoc($stid2);
echo 'CLIENT_INFO in V$SESSION: ' . $row['CLIENT_INFO'] . "\n";

oci_free_statement($stid2);
oci_close($conn);
?>
CLIENT_INFO in V$SESSION: PHP-App v2.5 / Checkout-Prozess

// Wichtig · Fallstricke

Längenbegrenzung: Oracle erlaubt maximal 64 Byte für CLIENT_INFO. Längere Strings werden serverseitig ohne Fehlermeldung abgeschnitten. Multibyte-Zeichen (UTF-8) können daher die effektiv sichtbare Zeichenanzahl reduzieren.

Übertragungszeitpunkt: Die Information wird nicht sofort gesetzt, sondern erst beim nächsten Datenbankroundtrip (z. B. oci_execute) an Oracle übertragen. Ein reines oci_set_client_info ohne nachfolgende Datenbankoperation hat keinen sichtbaren Effekt.

Sicherheit: Da diese Daten im Klartext in der Oracle-Systemview V$SESSION erscheinen, sollten keine sensiblen Daten (Passwörter, Tokens) übergeben werden.