如何查询oracle数据库的操作记录?
发布网友
发布时间:2022-04-23 20:55
我来回答
共5个回答
热心网友
时间:2022-04-07 18:01
首先,向你介绍一个动态视图:v$sql
该视图展示最近一段时间所有执行过的sql语句:
select * from v$sql
即可。
如果报错找不到v$sql,一般是权限问题,换sysdba就肯定能查到。
但要注意的是“隐式sql”,很多sql语句是调用执行的,(比如,存储过程中对dbms包的调用,再如执行create 语句所触发的对系统表空间、数据字典的修改等等。),这些语句同样会展现在v$sql中。
还有其它与sql历史记录相关的v$视图,详情可以参考Oracle官方文档《Oracle® Reference》,直接给你个10.2的文档链接,够方便了吧:
http://www.oracle.com/pls/db102/homepage?remark=tahiti
热心网友
时间:2022-04-07 19:19
方法1:使用LogMiner工具
优点:可以完全挖掘日志内容,找出所有执行过的SQL语句
缺点:
1. 如果没有启用归档日志,则只能对联机日志进行挖掘
2. 需要掌握LogMiner的用法
访法2:查看HIST视图
优点:简单,只要使用普通的select语句查询
缺点:Oracle保留约1周的历史,所以要查太早的就不可能了
-- 找出哪个数据库用户用什么程序在最近三天执行过delete或truncate table的操作
举例如下:
SELECT c.username,
a.program,
b.sql_text,
b.command_type,
a.sample_time
FROM dba_hist_active_sess_history a
JOIN dba_hist_sqltext b
ON a.sql_id = b.sql_id
JOIN dba_users c
ON a.user_id = c.user_id
WHERE a.sample_time BETWEEN SYSDATE - 3 AND SYSDATE
AND b.command_type IN (7, 85)
ORDER BY a.sample_time DESC;
热心网友
时间:2022-04-07 20:54
查询视图:v$sqlarea,它是oracle中专门存储操作的视图,可以通过它查询历史操作。
授权某用户,查看动态性能视图的权限(如v$latch,v$lock,v$sqlarea,v$sql,v$sysstat)
grant select any dictionary to xxx;
如通过以下查询语句就可以得知那个用户进行了删除操作。
select t.SQL_TEXT, t.FIRST_LOAD_TIME
from v$sqlarea t
where t.SQL_TEXT like 'delete%' and t.FIRST_LOAD_TIME like '2013-03-30%'
order by t.FIRST_LOAD_TIME desc
热心网友
时间:2022-04-07 22:45
用sys用户以dba身份登录。
然后,查看视图:V_$SQL,如下参考:
select *
from V_$SQL t
WHERE t.SERVICE = 'orcl'
and t.PARSING_SCHEMA_NAME = 'BHOA'
AND T.SQL_TEXT LIKE 'update %'
order by t.LAST_ACTIVE_TIME
可直接查出当前update的那条sql语句。从语句中可看出对什么表进行了什么操作。
热心网友
时间:2022-04-08 00:53
select count(stuId) from stuInfo;
count 函数;
一般是主键:stuId;学生编号
stuInfo: 学生信息表