分类: 服务器与存储
2008-06-14 13:48:26
注释:最好把备份表放在不同的磁盘上或不同的数据库中:
1、建立用于数据备份及操作记录的表:
CREATE TABLE AUD_PRGAMD1( W_ROWID VARCHAR2(50), --行ID W_ACTION VARCHAR2(1), --操作 DTTM DATE, --操作日期 OPUSER VARCHAR2(30), --操作者 B$CODE VARCHAR2(10), --原表中的CODE A$CODE VARCHAR2(10), --现表中的CODE B$FTY VARCHAR2(1), --原表中的FTY A$FTY VARCHAR2(1) –现表中的FTY ); |
2、建立实际数据表:
create table prgamd ( code varchar2(20), fty varchar2(20) ) |
3、创建自动备份触发器:
CREATE or replace TRIGGER AUD_PRGAMD_TRIGGER AFTER INSERT OR UPDATE OR DELETE ON PRGAMD FOR EACH ROW DECLARE V_ROWID VARCHAR2(50); V_ACTION VARCHAR2(1); V_OPUSER VARCHAR(30):='UNKNOW'; BEGIN IF INSERTING THEN V_ROWID:=:NEW.ROWID; V_ACTION:='I'; ELSIF UPDATING THEN V_ROWID:=:NEW.ROWID; V_ACTION:='U'; ELSIF DELETING THEN V_ROWID:=:OLD.ROWID; V_ACTION:='D'; END IF; V_OPUSER:=USER; INSERT INTO AUD_PRGAMD1( W_ROWID, W_ACTION, DTTM, OPUSER, B$CODE, B$FTY, A$CODE, A$FTY ) VALUES( V_ROWID, V_ACTION, SYSDATE, V_OPUSER, :OLD.CODE, :OLD.FTY, :NEW.CODE, :NEW.FTY ); END; |
注释:以上的OLD表示被操作表中原来的数据指向,NEW表示被操作表中现在的数据指向。
4、操作测试:
insert into prgamd values('x','x'); select * from AUD_PRGAMD1 select * from prgamd; update prgamd set code='m1' where fty='x'; commit; |