WEB开发网
开发学院数据库Oracle Oracle9i新特性之数据库监控系列详解 阅读

Oracle9i新特性之数据库监控系列详解

 2007-05-12 12:25:07 来源:WEB开发网   
核心提示: 下面就是触发器的主体,用来记录审计所有的DDL操作,Oracle9i新特性之数据库监控系列详解(5),CREATE OR REPLACE TRIGGER tr_trace_ddlAFTER ddlON databaseDECLAREsql_text ora_name_list_t;stat

下面就是触发器的主体,用来记录审计所有的DDL操作。  CREATE OR REPLACE TRIGGER tr_trace_ddl
  AFTER ddl
  ON database
  DECLARE
  sql_text ora_name_list_t;
  state_sql ddl$trace.ddl_sql%TYPE;
  BEGIN
  FOR i IN 1..ora_sql_txt(sql_text) LOOP
  state_sql := state_sql||sql_text(i);
  END LOOP;
  
  INSERT INTO ddl$trace(login_user,audsid,ipaddress,
  schema_user,schema_object,ddl_time,ddl_sql)
  VALUES(ora_login_user,userenv('SESSIONID'),sys_context('userenv','ip_address'),
  ora_dict_obj_owner,ora_dict_obj_name,SYSDATE,state_sql);
  EXCEPTION
  WHEN OTHERS THEN
  sp_write_log('捕获DDL语句异常错误:'||SQLERRM);
  END tr_trace_ddl;

说明:以上语句是监控整个数据库的DDL语句,如果只想监控一个用户的话,需要修改。  ON database
  为
  ON uruser.schema

6、捕获有需要的DML语句

对于某些特殊的表,可能需要记载DML语句,我们也需要创建一张表来记载这个信息:

  create table CAPT$SQL
  (
  CAPT_TIME DATE,
  USERNAME  VARCHAR2(30),
  AUDSID    NUMBER,
  CLIENT_IP VARCHAR2(20),
  SQL_TEXT  VARCHAR2(4000),
  TABLE_NAME VARCHAR2(30),
  OWNER   VARCHAR2(30)
  )

以下就是捕获特定表的DML语句的触发器:  CREATE OR REPLACE TRIGGER tr_capt_sql
  BEFORE DELETE OR INSERT OR UPDATE
  ON mtamanager.emailbox
  DECLARE
  stmt VARCHAR2(4000);
  sql_text ora_name_list_t;
  BEGIN
  FOR i IN 1..ora_sql_txt(sql_text) LOOP
  stmt := stmt || sql_text(i);
  END LOOP;
  
  INSERT INTO
  capt$sql(CAPT_TIME,USERNAME,AUDSID,CLIENT_IP,SQL_TEXT,
  TABLE_NAME,OWNER)
  VALUES(sysdate,ora_login_user,userenv('SESSIONID'),
  sys_context('userenv','ip_address'),stmt,'emailbox','mtamanager');
  EXCEPTION
  WHEN OTHERS THEN
  pkgsys_manage.sp_write_log

上一页  1 2 3 4 5 

Tags:Oraclei 特性 数据库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接