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


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

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

  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;

—-想了解更多的数据库相关异常处理怎么解决关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/83315.html

(0)
上一篇 2020年4月22日
下一篇 2020年4月22日

精彩推荐