You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle数据库中执行DBMS_SCHEDULER作业的osuser是哪个?

找出DBMS_SCHEDULER作业对应的OSUSER方法

以下几种方法可以帮你获取作业执行时的osuser:

方法1:临时创建测试作业写入OSUSER日志

如果LOGON触发器只是阻止特定作业,可创建一个极简测试作业来记录osuser:

  1. 先创建日志表:
CREATE TABLE job_osuser_log (
    job_name VARCHAR2(100),
    osuser VARCHAR2(100),
    log_time TIMESTAMP DEFAULT SYSTIMESTAMP
);
  1. 创建自动执行的临时测试作业:
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;
/
  1. 作业执行后查询日志表获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:02:54