在实际应用的过程中我遇到这样一种情况需要监控一个频繁操作的表(EMLPOYEE)我通过新建立一张新表(RECORD)记录在EMLPOYEE上所做的操作
要求有 当前时间、应用程序、机器名、SQL语句、对应操作例如:create table EMPLOYEE
(
  ID          VARCHAR2(4) not null,
  FIRST_NAME  VARCHAR2(10),
  LAST_NAME   VARCHAR2(10),
  START_DATE  DATE,
  END_DATE    DATE,
  SALARY      NUMBER(8,2),
  CITY        VARCHAR2(10),
  DESCRIPTION VARCHAR2(15)
)
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('09', 'Jason1', 'Martin2', to_date('25-07-1996', 'dd-mm-yyyy'), to_date('25-07-2006', 'dd-mm-yyyy'), 1234.56, 'Toronto', 'Programmer');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('10', 'Alison1', 'Mathews2', to_date('21-03-1976', 'dd-mm-yyyy'), to_date('21-02-1986', 'dd-mm-yyyy'), 6661.78, 'Vancouver', 'Tester');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('11', 'James1', 'Smith2', to_date('12-12-1978', 'dd-mm-yyyy'), to_date('15-03-1990', 'dd-mm-yyyy'), 6544.78, 'Vancouver', 'Tester');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('12', 'Celia1', 'Rice2', to_date('24-10-1982', 'dd-mm-yyyy'), to_date('21-04-1999', 'dd-mm-yyyy'), 2344.78, 'Vancouver', 'Manager');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('13', 'Robert1', 'Black2', to_date('15-01-1984', 'dd-mm-yyyy'), to_date('08-08-1998', 'dd-mm-yyyy'), 2334.78, 'Vancouver', 'Tester');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('14', 'Linda1', 'Green2', to_date('30-07-1987', 'dd-mm-yyyy'), to_date('04-01-1996', 'dd-mm-yyyy'), 4322.78, 'New York', 'Tester');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('15', 'David1', 'Larry2', to_date('31-12-1990', 'dd-mm-yyyy'), to_date('12-02-1998', 'dd-mm-yyyy'), 7897.78, 'New York', 'Manager');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('16', 'James1', 'Cat2', to_date('17-09-1996', 'dd-mm-yyyy'), to_date('15-04-2002', 'dd-mm-yyyy'), 1232.78, 'Vancouver', 'Tester');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('01', 'Jason', 'Martin', to_date('25-07-1996', 'dd-mm-yyyy'), to_date('25-07-2006', 'dd-mm-yyyy'), 1234.56, 'Toronto', 'Programmer');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('02', 'Alison', 'Mathews', to_date('21-03-1976', 'dd-mm-yyyy'), to_date('21-02-1986', 'dd-mm-yyyy'), 6661.78, 'Vancouver', 'Tester');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('03', 'James', 'Smith', to_date('12-12-1978', 'dd-mm-yyyy'), to_date('15-03-1990', 'dd-mm-yyyy'), 6544.78, 'Vancouver', 'Tester');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('04', 'Celia', 'Rice', to_date('24-10-1982', 'dd-mm-yyyy'), to_date('21-04-1999', 'dd-mm-yyyy'), 2344.78, 'Vancouver', 'Manager');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('05', 'Robert', 'Black', to_date('15-01-1984', 'dd-mm-yyyy'), to_date('08-08-1998', 'dd-mm-yyyy'), 2334.78, 'Vancouver', 'Tester');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('06', 'Linda', 'Green', to_date('30-07-1987', 'dd-mm-yyyy'), to_date('04-01-1996', 'dd-mm-yyyy'), 4322.78, 'New York', 'Tester');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('07', 'David', 'Larry', to_date('31-12-1990', 'dd-mm-yyyy'), to_date('12-02-1998', 'dd-mm-yyyy'), 7897.78, 'New York', 'Manager');
insert into EMPLOYEE (ID, FIRST_NAME, LAST_NAME, START_DATE, END_DATE, SALARY, CITY, DESCRIPTION)
values ('08', 'James', 'Cat', to_date('17-09-1996', 'dd-mm-yyyy'), to_date('15-04-2002', 'dd-mm-yyyy'), 1232.78, 'Vancouver', 'Tester');
commit;
新表create table record(multime date,mul varchar2(40),machine varchar2(40),program varchar2(40),sqltext varchar2(1000));
用触发器WHEN INSERT OR UPDATE OR DELETE

解决方案 »

  1.   

    create or replace trigger tri_mul
      before insert or delete or update on employee
      for each row
    declare
     --cursor c_program_machine is select program,machine from v$session where username='SHNW';
    begin
     if inserting then
       --execute immediate 'alter session set sql_trace=true';
      insert into record values (sysdate,'insert',USER,'','','');
      --execute immediate 'alter session set sql_trace=false';
      elsif updating then
      insert into record values (sysdate,'update',USER,'','','');
      elsif deleting then
      insert into record values (sysdate,'delete',USER,'','','');
    end if;
    end tri_mul;这只帮你解决了
    当前的时间和对应操作我估计你的MACHINE 和PROGRAM 要通过追踪过滤
      

  2.   

    在GOOGLE查一下动态物化视图v$session、v$sql、v$sqlarea之间有关系就行了。
      

  3.   

    机器名、SQL语句这个需要从v$session、v$sql调出来。麻烦些。触发器思路很简单。