Oracle数据库中执行DBMS_SCHEDULER作业的osuser是哪个?
找出DBMS_SCHEDULER作业对应的OSUSER方法
以下几种方法可以帮你获取作业执行时的osuser:
方法1:临时创建测试作业写入OSUSER日志
如果LOGON触发器只是阻止特定作业,可创建一个极简测试作业来记录osuser:
- 先创建日志表:
CREATE TABLE job_osuser_log ( job_name VARCHAR2(100), osuser VARCHAR2(100), log_time TIMESTAMP DEFAULT SYSTIMESTAMP );
- 创建自动执行的临时测试作业:
BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'TEST_GET_OSUSER', job_type => 'PLSQL_BLOCK', job_action => 'INSERT INTO job_osuser_log (job_name, osuser) VALUES (''TEST_GET_OSUSER'', SYS_CONTEXT(''USERENV'', ''OS_USER''));', enabled => TRUE, auto_drop => TRUE ); END; /
- 作业执行后查询日志表获取osuser:
SELECT osuser FROM job_osuser_log;
方法2:查询作业执行进程的OSUSER
DBMS_SCHEDULER作业由Oracle的J00n系列slave进程(或CJQ0协调进程)执行,直接查询这些进程的osuser:
SELECT p.osuser, p.spid, s.program FROM V$PROCESS p JOIN V$SESSION s ON p.addr = s.paddr WHERE s.program LIKE '%J00%' OR s.program LIKE '%CJQ%';
结果中的osuser字段就是作业运行时使用的操作系统用户。
方法3:通过审计日志查询
如果数据库开启了会话审计,可从审计日志中提取作业对应的登录osuser:
SELECT osuser, username, timestamp FROM DBA_AUDIT_SESSION WHERE username = '<你的作业RUN_AS_USER>' -- 替换为作业的运行用户 ORDER BY timestamp DESC;
内容的提问来源于stack exchange,提问作者Potato
相关产品推荐
相关产品推荐

