如何监视用户的查询?

crabhole 2010-01-07 05:23:26
问题是这样的:
数据库中有部分存放数据的表填加了一个字段 CLICK_COUNTS, 数值型的, 要求, 当表中的某一记录被用户查询命中, 那么CLICK_COUNTS 加1.

已经搞好了一个方案并实现: 用C#写了一个类, 使用时传入 ORACLE 连接, 表名, 查询条件, 程序就会将 CLICK_COUNTS 加1.

缺点很明显, 每次查询都要调用, 如果有人用其它程序(如TOAD)连接到数据库上查询, 那么根本无法控制.

另一个方案就是, 在数据库端监视. 想过 半夜查询V$SQL视图的方式, 而且已经可以准确的找到其中的 SQL 语句, 但问题是, 1. V$SQL查出来的内容是否完整, 会不会出现丢失?; 2. 时间如何确定?

还有没有更好的方案?

附 查询视图的SQL:
SELECT SUBSTR(SQL_TEXT, (INSTR(UPPER(SQL_TEXT), ' FROM ')+6), INSTR(SUBSTR(SQL_TEXT, (INSTR(UPPER(SQL_TEXT), ' FROM ')+6), 20), ' ')-1) INSTERESTED,
SQL_TEXT
FROM V$SQL
WHERE UPPER(SQL_TEXT) LIKE 'SELECT % FROM %' AND UPPER(SQL_TEXT) NOT LIKE '%V%SQL%'
AND SUBSTR(SQL_TEXT, (INSTR(UPPER(SQL_TEXT), ' FROM ')+6), INSTR(SUBSTR(SQL_TEXT, (INSTR(UPPER(SQL_TEXT), ' FROM ')+6), 20), ' ')-1) IN
(SELECT TNAME FROM COL WHERE CNAME LIKE 'CLICK_COUNTS')
AND FETCHES > 0
ORDER BY LAST_ACTIVE_TIME DESC
...全文
123 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
crabhole 2010-05-25
  • 打赏
  • 举报
回复
我一共这么多分,分了吧。
zswangg 2010-04-13
  • 打赏
  • 举报
回复
audit trail
inthirties 2010-01-08
  • 打赏
  • 举报
回复
使用audit trail功能了。

先可以大致了解一下
huangyunzeng2008 2010-01-07
  • 打赏
  • 举报
回复
审计
crabhole 2010-01-07
  • 打赏
  • 举报
回复
似乎有审计可以解决这个问题, 尝试以后第一时间上来汇报.
wh62592855 2010-01-07
  • 打赏
  • 举报
回复
碧水幽幽泉 2010-01-07
  • 打赏
  • 举报
回复
不懂!帮顶了!
iqlife 2010-01-07
  • 打赏
  • 举报
回复
听说还有审计这个功能,你去GOOGLE下
starseeker7 2010-01-07
  • 打赏
  • 举报
回复
查询都要监控,,真变态,,,
最保险的,,就是所有查询,,全部写成存储过程- -,,,保证一个不会漏,,,
累死人还是没有问题的, ,,
或者做视图,,,对视图做触发器行不?
程序中不同查询发起源用不同视图- -
crabhole 2010-01-07
  • 打赏
  • 举报
回复
没办法, 现在有这个需求, 有没有朋友给些好的建议, 感激不尽
crazylaa 2010-01-07
  • 打赏
  • 举报
回复
晕。toad的也要监视。。。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧