首页 > 解决方案 > 存储正在运行的 oracle 脚本的路径/文件名

问题描述

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

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

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

标签: oracle

解决方案


是和不是。有一个会话变量存储正在运行脚本的程序,存储在 中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上的示例和更多信息


推荐阅读