Every Oracle database connection runs in the context of a database process called a session. There is a v$session view that contains a lot of information about the database sessions that are active.. By default when you use the Oracle Thin Driver, the value v$session.program is set to "JDBC Thin Client". That separates out the Java applications from sqlplus and the scores of database background programs but doesn't provide much additional information since all of the Java connections look the same. It's easy to set this and some other values on v$session using connection properties on the Oracle Thin driver. The following connection properties are supported: v$session.osuser, v$session.process, v$session.machine, v$session.terminal, and v$session.program. Setting these will set the corresponding value on the session on the database side. These values are then available from the v$session view.
The simple approach is to hard-code a value into a normal connection Property. That's fine if you want to associate a fixed value with a data source. It's more interesting if you dynamically set the value at runtime. For example, if there are multiple servers running within a domain and the
information needs to be server specific, a normal cluster deployment with one fixed value is not useful, and the option of deploying the
DataSource to every server individually and then hand-editing each one's
descriptor with unique values for these properties is not manageable. You can easily handle this using a System Property. The value that is specified is taken to be a Java system property that you set on the command line of the application server. It is retrieved using System.getProperty() and set as the value of the connection property. There's a new Encrypted Property in WLS 12.1.3; I'll write another article about that.
You can set connection properties by editing the data source configuration on the "Connection Pool" tab in the WebLogic administration console. Properties are set in the Properties and System Properties text boxes. Let's say that I set four of the values to test values and one to a system property, generating the descriptor fragment as follows.
Alternatively, you could set these values using on-line or off-line WLST.
Here's a fragment of an off-line WLST script.cd('/JDBCSystemResource/myds/JdbcResource/myds')
If $SERVER_NAME is myserver and I then go to run a query, here is the resulting output.
SQL> select program, osuser, process, machine, terminal
from v$session where program = 'myserver';
myserver test1 test2 test3 test4
If the server names aren't obvious enough, you could set the program to "WebLogic Server $SERVER_NAME". You could set -Djdbc.process=<PID> to tie connections to a specific WLS server process. You might want to add the WLS data source name to the program value. You could set osuser to the Java value "user.name".
Using system properties can make this a powerful feature for tracking information about the source of the connections, especially for large configurations.