免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 10041 | 回复: 22

oracle 9i 如何监视某个Schema,在某段时间内的执行的SQL? [复制链接]

论坛徽章:
0
发表于 2010-05-31 14:21 |显示全部楼层
30可用积分
本帖最后由 TOADLover 于 2010-06-02 08:25 编辑

假设Schema的名字是Zhang,如何监控这个Schema在过去一天里执行了哪些SQL?

---Sorry,数据库的版本是10g.

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi

最佳答案

查看完整内容

以下面的例子说明一下设置吧测试表 CREATE TABLE SAMPLE_TABLE ( ID NUMBER(10,0) NOT NULL, NAME VARCHAR2(250) )设置 BEGIN DBMS_FGA.ADD_POLICY( OBJECT_NAME => 'SAMPLE_TABLE', POLICY_NAME => 'CHECK_DANGER', AUDIT_COLUMN => 'NAME', AUDIT_CONDITION => 'NAME = ''ADMIN'' ', STATEMENT_TYPES => 'INSERT,UPDATE,DELETE' ); END;SQL操作TRUNCATE TABL ...

论坛徽章:
0
发表于 2010-05-31 14:21 |显示全部楼层
回复  wq_1228


    如果升级到10g,所有的dml语句都可以监视,发生的SQL也可以被记录

---怎么做?
TOADLover 发表于 2010-06-02 08:21



    以下面的例子说明一下设置吧
测试表
CREATE TABLE SAMPLE_TABLE
(
        ID                             NUMBER(10,0) NOT NULL,
        NAME                           VARCHAR2(250)
)

设置
  BEGIN
        DBMS_FGA.ADD_POLICY(
                OBJECT_NAME => 'SAMPLE_TABLE',
                POLICY_NAME => 'CHECK_DANGER',
                AUDIT_COLUMN => 'NAME',
                AUDIT_CONDITION => 'NAME = ''ADMIN'' ',  
                STATEMENT_TYPES => 'INSERT,UPDATE,DELETE'
        );
END;

SQL操作
TRUNCATE TABLE SAMPLE_TABLE;
INSERT INTO SAMPLE_TABLE (ID, NAME) VALUES (1,'SCOTT');
INSERT INTO SAMPLE_TABLE (ID, NAME) VALUES (2,'TIGER');
--  Check
INSERT INTO SAMPLE_TABLE (ID, NAME) VALUES (3,'ADMIN');
INSERT INTO SAMPLE_TABLE (ID, NAME) VALUES (4,'ADMINISTRATOR');

UPDATE SAMPLE_TABLE SET ID=10 WHERE NAME='ADMINISTRATOR';

-- ↓ ※※※ Not Check ※※※ ↓
UPDATE SAMPLE_TABLE SET ID=11 WHERE ID=3;
--  Check
UPDATE SAMPLE_TABLE SET NAME='GUEST' WHERE NAME='ADMIN';
--  Check
UPDATE SAMPLE_TABLE SET NAME='ADMIN' WHERE NAME='SCOTT';
UPDATE SAMPLE_TABLE SET NAME='SCOTT' WHERE NAME='GUEST';

--  Check
DELETE FROM SAMPLE_TABLE WHERE NAME='ADMIN';

查看结果

SELECT DB_USER || ':' || SQL_TEXT FGA_LOG  FROM DBA_FGA_AUDIT_TRAIL
WHERE TIMESTAMP >= SYSDATE - INTERVAL '1' MINUTE;

/* 结果 */
FGA_LOG                                                                        
--------------------------------------------------------------------------------
TEST:INSERT INTO SAMPLE_TABLE (ID, NAME) VALUES (3,'ADMIN')                     
TEST:UPDATE SAMPLE_TABLE SET NAME='GUEST' WHERE NAME='ADMIN'                    
TEST:UPDATE SAMPLE_TABLE SET NAME='ADMIN' WHERE NAME='SCOTT'                    
TESTELETE FROM SAMPLE_TABLE WHERE NAME='ADMIN'

论坛徽章:
0
发表于 2010-05-31 14:29 |显示全部楼层
路过的朋友们,谁知道?
在日志中应该可以查到,怎么查?

论坛徽章:
0
发表于 2010-05-31 14:48 |显示全部楼层
啊,怎么没有兄弟们做过?

论坛徽章:
0
发表于 2010-05-31 14:50 |显示全部楼层
数据库正在NOARCHIVELOG方式下使用。

论坛徽章:
0
发表于 2010-05-31 15:04 |显示全部楼层
查询该用户在过去一天内进行的DML操作,不包括Select。

论坛徽章:
0
发表于 2010-05-31 15:11 |显示全部楼层
本帖最后由 TOADLover 于 2010-05-31 15:12 编辑

怎么没人回?
大家都没涉及过,如果你的一个用户不小心在Delete数据时,使用了错误的where子句,怎么办?

--------
LogMiner需要数据字典来完全地翻译重做日志文件内容,并将内部对象标识符和数据类型转换为对象名和外部数据格式。如果不能使用数据字典,LogMiner将会返回以十六进制格式标识的数据和以内部对象ID表示的对象信息。
有三种选择来获得一个供LogMiner使用的数据字典:

● 将数据字典信息提取到一个平面文件中。
● 将数据字典提取到重做日志文件中。
● 从当前的数据库中使用联机数据字典。

论坛徽章:
0
发表于 2010-05-31 15:15 |显示全部楼层
审计功能

论坛徽章:
0
发表于 2010-05-31 15:16 |显示全部楼层
本帖最后由 ilsyx 于 2010-05-31 15:18 编辑

回复 5# TOADLover


    你下面也已经提到了 用logmnr. 挖日志来查看数据库已经发生过的dml操作。
跟踪某个schema查看这个schema执行的语句,目前我不知道数据库能跟踪到这么精细。不过数据库可以跟踪记录某个session。将这个session所在期间做的dml操作记录到trace文件。

论坛徽章:
0
发表于 2010-05-31 15:39 |显示全部楼层
回复 7# sunfire999


    怎么使用这个审计功能?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP