PL SQL - 过程 - table 保存执行过程的用户记录
PL SQL - Procedure - table that holds a record of users who executed a procedure
您好,如果问题已经被问到,请提前致歉。我还没找到答案。
我想知道是否有一个 table 保存了执行特定过程或函数的 oracle 用户名的记录。
我正在尝试创建一个可以被另一个过程作为子程序调用的过程。我要创建的过程将在每次执行其他过程时创建一个日志条目。下面的例子;
User_Name = 执行该函数的人的 Oracle 用户名。
名称 = 过程或函数的名称。
LastCompileDT = date/time 函数或过程上次编译。
我有点不知道从哪里获取数据。
我遇到过 all_source table 但它只给了我程序的所有者而不是执行用户。
如有任何反馈,我们将不胜感激。
谢谢
可能有几种方法可以做到这一点。也许其他人可以建议一种从一个数据字典视图中提取所有这些数据的方法。但是,我的方法是这样的:
User_Name:使用关键字USER。 returns 执行过程的 Oracle 用户:
SELECT USER FROM DUAL;
但是,如果您对执行该过程的OS用户感兴趣,那么您可以使用以下
SELECT sys_context( 'userenv', 'os_user' ) FROM DUAL;
关于此的更多信息 here。据我所知,这只能即时获取,默认情况下不会记录在任何地方。所以调用过程的时候需要运行它
程序名称:&
LastCompileDT : 可以从视图中获取 USER_OBJECTS
SELECT OBJECT_NAME, LAST_DDL_TIME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'PROCEDURE'
AND OBJECT_NAME = '<YOUR PROCEDURE NAME>';
您可以使用提供的内置审核 table,而不是滚动您自己的审核。
见https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4007.htm
--Create a test procedure as an example
CREATE PROCEDURE my_test_proc
AS
BEGIN
NULL;
END my_test_proc;
--Turning on auditing executions of the proc
AUDIT EXECUTE ON my_test_proc BY ACCESS WHENEVER SUCCESSFUL;
--Run the proc
EXEC my_test_proc;
--check audit history
SELECT *
FROM dba_common_audit_trail cat
WHERE cat.object_name = 'MY_TEST_PROC';
dba_common_audit_trail table 有 DB_USER 列,OBJECT_NAME 列用于 User_Name/Name。
上次编译时间请查看 Hawk 的回答,或者如果您想查看上次 DDL 时间的历史记录,可以将其添加到审核中
--Turn on auditing of creating procs
AUDIT CREATE PROCEDURE BY ACCESS;
您好,如果问题已经被问到,请提前致歉。我还没找到答案。
我想知道是否有一个 table 保存了执行特定过程或函数的 oracle 用户名的记录。
我正在尝试创建一个可以被另一个过程作为子程序调用的过程。我要创建的过程将在每次执行其他过程时创建一个日志条目。下面的例子;
User_Name = 执行该函数的人的 Oracle 用户名。
名称 = 过程或函数的名称。
LastCompileDT = date/time 函数或过程上次编译。
我有点不知道从哪里获取数据。 我遇到过 all_source table 但它只给了我程序的所有者而不是执行用户。
如有任何反馈,我们将不胜感激。
谢谢
可能有几种方法可以做到这一点。也许其他人可以建议一种从一个数据字典视图中提取所有这些数据的方法。但是,我的方法是这样的:
User_Name:使用关键字USER。 returns 执行过程的 Oracle 用户:
SELECT USER FROM DUAL;
但是,如果您对执行该过程的OS用户感兴趣,那么您可以使用以下
SELECT sys_context( 'userenv', 'os_user' ) FROM DUAL;
关于此的更多信息 here。据我所知,这只能即时获取,默认情况下不会记录在任何地方。所以调用过程的时候需要运行它
程序名称:&
LastCompileDT : 可以从视图中获取
USER_OBJECTS
SELECT OBJECT_NAME, LAST_DDL_TIME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'PROCEDURE' AND OBJECT_NAME = '<YOUR PROCEDURE NAME>';
您可以使用提供的内置审核 table,而不是滚动您自己的审核。
见https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4007.htm
--Create a test procedure as an example
CREATE PROCEDURE my_test_proc
AS
BEGIN
NULL;
END my_test_proc;
--Turning on auditing executions of the proc
AUDIT EXECUTE ON my_test_proc BY ACCESS WHENEVER SUCCESSFUL;
--Run the proc
EXEC my_test_proc;
--check audit history
SELECT *
FROM dba_common_audit_trail cat
WHERE cat.object_name = 'MY_TEST_PROC';
dba_common_audit_trail table 有 DB_USER 列,OBJECT_NAME 列用于 User_Name/Name。
上次编译时间请查看 Hawk 的回答,或者如果您想查看上次 DDL 时间的历史记录,可以将其添加到审核中
--Turn on auditing of creating procs
AUDIT CREATE PROCEDURE BY ACCESS;