出于审计目的,我希望能够存储用于创建行的脚本的路径/文件名。
例如,如果我使用C:\ oracle_scripts \ my_oracle_script.sql来创建数据,那么我希望能够在一列中存储“C:\ oracle_scripts \ my_oracle_script.sql”,这样我就可以知道使用了什么脚本创建数据。
是否存在“会话变量”或某些我可以用来动态访问正在运行的脚本的路径/文件名而无需对其进行硬编码?
答案 0 :(得分:0)
是和否。有一个会话变量,用于存储运行脚本的程序,存储在V$SESSION.PROGRAM
中,但不存储脚本的文件名。
但是,最常用于您目的的会话变量称为DBMS_APPLICATION_INFO.METHOD
。它不受脚本约束,但也可以被其他输入方法使用(GUI等更改的数据)。
要使用它,您需要在脚本中设置值
DBMS_APPLICATION_INFO.SET_MODULE('my_oracle_script.sql','');
并在数据库中读取它,例如在触发器中,使用
DBMS_APPLICATION_INFO.READ_MODULE()
此外,还有另外两个会话变量ACTION
和CLIENT_INFO
。
甚至在数据字典视图V$SESSION
和V$SQLAREA
中跟踪这些变量,因此如果脚本运行时间过长或以其他方式行为不当,DBA可以轻松跟踪会话和执行脚本的SQL。
示例和更多信息 https://docs.oracle.com/database/121/ARPLS/d_appinf.htm#ARPLS65225