Signatur
Beschreibung
oci_set_action weist der aktuellen Oracle-Verbindung einen Aktionsnamen zu, der in der Oracle-Datenbank für Überwachungs-, Auditing- und Diagnosezwecke gespeichert wird. Der gesetzte Name ist über Datenbankviews wie V$SESSION und V$SQLAREA sowie über Oracle Enterprise Manager und andere Monitoring-Werkzeuge einsehbar.
Diese Funktion ist besonders nützlich, um im Datenbankprofiling gezielt nachvollziehen zu können, welche Aktion (z. B. ein bestimmter Verarbeitungsschritt oder eine Controller-Methode) eine bestimmte SQL-Anfrage ausgelöst hat. Zusammen mit oci_set_module_name und oci_set_client_info ermöglicht sie eine fein granulierte Kennzeichnung von Datenbankoperationen.
Der Aktionsname wird erst bei der nächsten Datenbankkommunikation (z. B. beim Ausführen einer Abfrage) an den Server übertragen. Die maximale Länge des Aktionsnamens beträgt 32 Byte; längere Zeichenketten werden abgeschnitten.
Diese Funktion steht nur zur Verfügung, wenn PHP mit der Oracle Database 10g Client-Bibliothek oder neuer kompiliert wurde.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | resource | Eine gültige Oracle-Verbindungsressource, die z. B. von oci_connect, oci_pconnect oder oci_new_connect zurückgegeben wurde. |
|
| $action Pflicht | string | Der Aktionsname, der der Verbindung zugewiesen werden soll. Maximale Länge: 32 Byte. Längere Zeichenketten werden ohne Fehlermeldung abgeschnitten. |
Rückgabewert
true zurück, wenn der Aktionsname erfolgreich gesetzt wurde, oder false im Fehlerfall (z. B. wenn die Verbindungsressource ungültig ist).Beispiele
Aktionsnamen vor einer Datenbankabfrage setzen
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
// Modul und Aktion für die Verbindung setzen
oci_set_module_name($conn, 'MeinShop');
oci_set_action($conn, 'Bestellung_erstellen');
// Die Aktion ist nun in V$SESSION sichtbar, sobald die nächste Abfrage ausgeführt wird
$stid = oci_parse($conn, 'INSERT INTO bestellungen (id, betrag) VALUES (seq_bestellungen.NEXTVAL, :betrag)');
oci_bind_by_name($stid, ':betrag', $betrag);
$betrag = 99.95;
oci_execute($stid);
echo "Bestellung erfolgreich angelegt.\n";
oci_free_statement($stid);
oci_close($conn);
Aktionsnamen dynamisch je nach Controller-Methode setzen
<?php
function verarbeiteAnfrage(resource $conn, string $controllerAction): void
{
// Aktionsnamen für das DB-Monitoring setzen
oci_set_module_name($conn, 'WebApp\\UserController');
oci_set_action($conn, $controllerAction);
$stid = oci_parse($conn, 'SELECT COUNT(*) AS anzahl FROM benutzer');
oci_execute($stid);
$row = oci_fetch_assoc($stid);
echo "Benutzeranzahl: " . $row['ANZAHL'] . "\n";
oci_free_statement($stid);
}
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
verarbeiteAnfrage($conn, 'listUsers');
oci_close($conn);
// Wichtig · Fallstricke
Verfügbarkeit: oci_set_action erfordert Oracle-Clientbibliotheken ab Version 10g. Bei älteren Client-Versionen steht die Funktion nicht zur Verfügung.
Länge: Oracle begrenzt den Aktionsnamen auf 32 Byte. Mehrbyte-Zeichen (z. B. UTF-8) können dazu führen, dass weniger als 32 sichtbare Zeichen übertragen werden.
Übertragungszeitpunkt: Der Aktionsname wird nicht sofort, sondern erst mit dem nächsten Roundtrip zur Datenbank (z. B. beim Ausführen einer Abfrage) übermittelt. Wird die Verbindung danach für andere Aktionen wiederverwendet, sollte der Aktionsname entsprechend aktualisiert werden.
Persistente Verbindungen: Bei der Verwendung von oci_pconnect (persistente Verbindungen) sollte der Aktionsname zu Beginn jedes Requests neu gesetzt werden, da persistente Verbindungen wiederverwendet werden und den zuletzt gesetzten Wert beibehalten könnten.