Stored procedures PL SQL-Procedure-保存执行过程的用户记录的表

Stored procedures PL SQL-Procedure-保存执行过程的用户记录的表,stored-procedures,plsql,procedure,plsqldeveloper,Stored Procedures,Plsql,Procedure,Plsqldeveloper,您好,如果问题已经被提出,请提前道歉。我还没有找到答案 我想知道是否有一个表包含执行特定过程或函数的oracle用户名的记录 我试图创建一个可以被另一个过程作为子程序调用的过程。我要创建的过程将在每次执行另一个过程时创建一个日志条目。下面的例子 User_Name=执行函数的人员的Oracle用户名 Name=过程或函数的名称 LastCompileDT=上次编译函数或过程的日期/时间 我有点纠结于数据的来源。 我遇到过all_源表,但它只给我过程的所有者,而不是执行用户 如有任何反馈,将不胜感

您好,如果问题已经被提出,请提前道歉。我还没有找到答案

我想知道是否有一个表包含执行特定过程或函数的oracle用户名的记录

我试图创建一个可以被另一个过程作为子程序调用的过程。我要创建的过程将在每次执行另一个过程时创建一个日志条目。下面的例子

User_Name=执行函数的人员的Oracle用户名

Name=过程或函数的名称

LastCompileDT=上次编译函数或过程的日期/时间

我有点纠结于数据的来源。 我遇到过all_源表,但它只给我过程的所有者,而不是执行用户

如有任何反馈,将不胜感激


谢谢

可能有几种方法可以做到这一点。也许其他人可以建议从一个数据字典视图中提取所有这些数据的方法。但是,我的方法是这样的:

  • 用户名:使用关键字。它返回执行该过程的Oracle用户:

    SELECT USER FROM DUAL;
    
    但是,如果您对执行该过程的OS用户感兴趣,则可以使用以下命令

    SELECT sys_context( 'userenv', 'os_user' ) FROM DUAL;
    
    更多关于这个。据我所知,这只能动态获取,默认情况下不会记录在任何地方。因此,您需要在调用过程时运行它

  • 程序名称:&

  • LastCompileDT:可以从视图
    USER\u对象中获取

    SELECT OBJECT_NAME, LAST_DDL_TIME
    FROM USER_OBJECTS
    WHERE OBJECT_TYPE = 'PROCEDURE'
    AND OBJECT_NAME = '<YOUR PROCEDURE NAME>';
    
    选择对象名称、上次DDL\u时间
    来自用户对象
    其中OBJECT_TYPE='PROCEDURE'
    对象名称=“”;
    

  • 可能有几种方法可以做到这一点。也许其他人可以建议从一个数据字典视图中提取所有这些数据的方法。但是,我的方法是这样的:

  • 用户名:使用关键字。它返回执行该过程的Oracle用户:

    SELECT USER FROM DUAL;
    
    但是,如果您对执行该过程的OS用户感兴趣,则可以使用以下命令

    SELECT sys_context( 'userenv', 'os_user' ) FROM DUAL;
    
    更多关于这个。据我所知,这只能动态获取,默认情况下不会记录在任何地方。因此,您需要在调用过程时运行它

  • 程序名称:&

  • LastCompileDT:可以从视图
    USER\u对象中获取

    SELECT OBJECT_NAME, LAST_DDL_TIME
    FROM USER_OBJECTS
    WHERE OBJECT_TYPE = 'PROCEDURE'
    AND OBJECT_NAME = '<YOUR PROCEDURE NAME>';
    
    选择对象名称、上次DDL\u时间
    来自用户对象
    其中OBJECT_TYPE='PROCEDURE'
    对象名称=“”;
    

  • 您可以使用提供的内置审计表,而不是滚动自己的审计

    dba_common_audit_trail表有DB_USER列和OBJECT_NAME列,分别代表您的用户名/名称

    关于上次编译的时间,请参见Hawk的答案,或者如果您想查看上次DDL时间的历史记录,可以将其添加到审计中

    --Turn on auditing of creating procs
    AUDIT CREATE PROCEDURE BY ACCESS;
    

    您可以使用提供的内置审计表,而不是滚动自己的审计

    dba_common_audit_trail表有DB_USER列和OBJECT_NAME列,分别代表您的用户名/名称

    关于上次编译的时间,请参见Hawk的答案,或者如果您想查看上次DDL时间的历史记录,可以将其添加到审计中

    --Turn on auditing of creating procs
    AUDIT CREATE PROCEDURE BY ACCESS;
    

    答案很好。但是,需要记住的一点是,正常的存储过程将与调用的存储过程一起回滚,这通常不是用于审计目的的存储过程所需要的。您可能希望使您的审计存储过程具有自主性—给出了一个很好的答案。但是,需要记住的一点是,正常的存储过程将与调用的存储过程一起回滚,这通常不是用于审计目的的存储过程所需要的。您可能希望使您的审计存储过程自主谢谢Hawk,这正是我要找的。谢谢Hawk,这正是我要找的。