Set script name as module/action in V$Session if SQL*Plus-session starts
Setting module and action info via DBMS_Application_Info.Set_Module gives valuable context info in V$Session, Active Session History etc.
For jobs executing SQL via SQL*Plus mostly needed information in module/action is the name of the process executing sqlplus.
To prevent jobs from directly executing DBMS_Application_Info.Set_Module and to ensure that every sqlplus-process is setting this context info,
you can use the startup-script feature via login.sql.
To prevent jobs from directly executing DBMS_Application_Info.Set_Module and to ensure that every sqlplus-process is setting this context info,
you can use the startup-script feature via login.sql.
Ensure that environment variable SQLPATH will target to the directory that contains login.sql,
so all executions of sqlplus will immediately set their context info in v$Session.
so all executions of sqlplus will immediately set their context info in v$Session.
Example for login.sql:
-- Description : Default login sequence for SQL*Plus, executed at start time of every SQLPlus-process if file is in search path
-- Unix environment variable SQLPATH must contain directory of file "login.sql"
SET TERMOUT OFF;
-- Determine unique session identifier for unique tempfile name
COLUMN Session_ID_Col NEW_VALUE Session_ID
SELECT SYS_CONTEXT('USERENV','SESSIONID') AS Session_ID_Col FROM DUAL;
-- filename for generated SQL commands
DEFINE SCRIPT='/tmp/&Session_ID..sql'
-- Generate call for DBMS_Application_Info.Set_Module and output in tempfile
-- Determine name of parent prozess of SQLPLus
HOST ps -ocommand= -p `ps -oppid= -p $PPID` | awk '{print "EXEC DBMS_Application_Info.Set_Module('\''" substr( $0, length($0) - 47, length($0) ) "'\'', '\''sqlplus started with defaults'\'');"}' >&SCRIPT
-- execute generated script
START &SCRIPT
-- remove generated script from file system
HOST rm &SCRIPT
SET TERMOUT ON;
Comments
Post a Comment