oracle - 存储正在运行的 oracle 脚本的路径/文件名
问题描述
出于审计目的,我希望能够存储用于创建行的脚本的路径/文件名。
例如,如果我使用 C:\oracle_scripts\my_oracle_script.sql 创建数据,那么我希望能够将“C:\oracle_scripts\my_oracle_script.sql”存储在列中,这样我就可以知道用于创建数据的脚本.
是否有“会话变量”或类似的东西可以用来动态访问正在运行的脚本的路径/文件名,而无需对其进行硬编码?
解决方案
是和不是。有一个会话变量存储正在运行脚本的程序,存储在 中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上的示例和更多信息
推荐阅读
- python - 发送 html 模板时不显示 Flask-mail 图像
- pyqt5 - Python PyQt5 电影闪屏
- django - Django 允许的主机
- python - 如何将单词'and'添加到字符串列表的返回中
- javascript - 在 for 循环中使用 Math.random 的 JavaScript 函数中的不良行为
- if-statement - 计算某些列中满足任何条件的行数(类似 OR 的操作)
- export - 如何将 Jexcel 表导出到 .csv 和 .xls?
- python - Web 或代理服务器可以在没有 User-Agent 的情况下检测请求者的操作系统吗?
- javascript - 如果在创建新文档时有一个抛出异常,则回滚两个文档中的持久性?
- python - 将 sounddevice 导入 python 崩溃