在Oracle中用于数据备份的触发器及表结构

来源:岁月联盟 编辑:zhuzhu 时间:2008-01-28

运行本文的示例前,请对当前的数据表的插入、删除、更新等进行记录,并把操作日期、操作者、原来数据、现在数据都作为备份,以便在当前备出现问题的时候能够给以恢复。

注释:最好把备份表放在不同的磁盘上或不同的数据库中:

1、建立用于数据备份及操作记录的表:

CREATE TABLE AUD_PRGAMD1(W_ROWID VARCHAR2(50), --行IDW_ACTION VARCHAR2(1), --操作DTTM     DATE, --操作日期OPUSER VARCHAR2(30), --操作者B$CODE VARCHAR2(10), --原表中的CODEA$CODE VARCHAR2(10), --现表中的CODEB$FTY VARCHAR2(1), --原表中的FTYA$FTY VARCHAR2(1) –现表中的FTY);

2、建立实际数据表:

create table prgamd(code varchar2(20),fty varchar2(20))

3、创建自动备份触发器:

CREATE or replace TRIGGER AUD_PRGAMD_TRIGGERAFTER INSERT OR UPDATE OR DELETEON PRGAMDFOR EACH ROWDECLAREV_ROWID VARCHAR2(50);V_ACTION VARCHAR2(1);V_OPUSER VARCHAR(30):='UNKNOW';BEGINIF 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;