存储运行

时间:2018-05-23 19:20:42

标签: oracle

出于审计目的,我希望能够存储用于创建行的脚本的路径/文件名。

例如,如果我使用C:\ oracle_scripts \ my_oracle_script.sql来创建数据,那么我希望能够在一列中存储“C:\ oracle_scripts \ my_oracle_script.sql”,这样我就可以知道使用了什么脚本创建数据。

是否存在“会话变量”或某些我可以用来动态访问正在运行的脚本的路径/文件名而无需对其进行硬编码?

1 个答案:

答案 0 :(得分:0)

是和否。有一个会话变量,用于存储运行脚本的程序,存储在V$SESSION.PROGRAM中,但不存储脚本的文件名。

但是,最常用于您目的的会话变量称为DBMS_APPLICATION_INFO.METHOD。它不受脚本约束,但也可以被其他输入方法使用(GUI等更改的数据)。

要使用它,您需要在脚本中设置值

DBMS_APPLICATION_INFO.SET_MODULE('my_oracle_script.sql','');

并在数据库中读取它,例如在触发器中,使用

DBMS_APPLICATION_INFO.READ_MODULE()

此外,还有另外两个会话变量ACTIONCLIENT_INFO

甚至在数据字典视图V$SESSIONV$SQLAREA中跟踪这些变量,因此如果脚本运行时间过长或以其他方式行为不当,DBA可以轻松跟踪会话和执行脚本的SQL。

示例和更多信息 https://docs.oracle.com/database/121/ARPLS/d_appinf.htm#ARPLS65225