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

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 运行本文的示例前,请对当前的数据表的插入、删除、更新等进行记录,并把操作日期、操作者、原来数据、现在数据都作为备份,以便在当前备出现问题的时候能够给以恢复。 注释:最好把备份表放在不同

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

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

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

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;

test.jsp?url=http%3A%2F%2Fwww.chinaitlab.com%2Fcms%2Fimages%2Flogo14.gif&refer=http%3A%2F%2Foracle.chinaitlab.com%2Fbackup%2F737604.html

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值