在Oracle中用于数据备份的触发器及表结构
来源:岁月联盟
时间: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; |