PL/SQL Debugging im ORDS

Manchmal ist es erforderlich den PL/SQL-Code samt Bind-Variablen zu sehen, der vom ORDS erzeugt wird, um einem Fehler auf die Spur zu kommen. Der ORDS bietet in seinen Einstellungen zwar eine DEBUG-Möglichkeit, diese schreibt aber nicht den PL/SQL-Code oder die Bind-Variablen in eine Protokolldatei. Diese Informationen bekommt man jedoch mit einer eigenen Logging-Konfiguration.

# Log messages to file only
handlers=java.util.logging.FileHandler
# specify the log file name
java.util.logging.FileHandler.pattern=<PATH-TO-LOGFILE>/listener.log
# Ensure the log file uses UTF-8
java.util.logging.FileHandler.encoding=UTF-8
# Log messages as plain text, rather than XML
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
# Set non Listener code to log errors only 
.level=SEVERE
# Tell the File Handler to log ALL messages
java.util.logging.FileHandler.level=ALL
# Set Listener code to log all messages
oracle.dbtools.level=FINEST

Nun muss der ORDS noch die Information bekommen, dass es eine Konfiguraitonsdatei für das Logging gibt:

java -Djava.util.logging.config.file=<PATH-TO-PROPERTIESFILE>/logging.properties -jar ords.war

Wird der ORDS innerhalb des Oracle WLS betrieben, so ist der Parameter in die Serverstart-Argumente einzutragen. Nach einem Neustart des ORDS werden alle Zugriffe und die generierten PL/SQL-Blöcke sowie die Übergabeparameter in das neue Log geschrieben.

Achtung! Dieses Log wird sehr schnell sehr groß und darf daher nicht im regulären Betrieb geschrieben werden. Anderenfalls muss man sich nicht wundern, wenn die Platte sehr schnell voll ist. Das Log wird bei jedem Neustart des ORDS überschrieben!