Oracle-触发器备份表数据

1.通过行触发器备份表数据

-- 创建备份表,首次将数据全部备份
create table emp2_bak as select * from emp2;
-- 给备份表增加备份时间和是否被删除字段(1为删除)
alter table emp2_bak add bakTime date;
alter table emp2_bak add deleted number;
-- 创建行触发器:当emp2有数据被删除时,将数据备份到emp2_bak表中,并记录删除时间
create or replace trigger autoBakEmp2
before delete on emp2
for each row
begin
  insert into emp2_bak values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno,sysdate,1);
end;
        优点:备份数据教全面(每次删除被备份表数据时,都会自动将删除的记录插入到备份表中)。
        缺点:大量删除时备份数据慢,业务数据冗余度高,当有重复数据删除或多次添加删除时,每次都会备份(不会区分差异数据)。

2.通过表级触发器备份表数据

-- 创建备份表
create table emp3_bak as select * from emp3 where 1!=1;
-- 每次删除表数据时,将删除前表数据与备份表数据根据id进行差异比较,如果存在差异,则将差异数据插入到备份表中,否则不处理。
create or replace trigger autoBakEmp3
before delete on emp3
begin
  insert into emp3_bak (select * from emp3 where emp3.deptno not in(select deptno from emp3_bak));
end;
        优点:数据备份快,数据冗余度低(差异备份)。
        缺点:不会备份每次删除的数据(必须保证被备份表的id每次都唯一,删除后不能再添加相同主键id,否则将无法再次备份删除该id的数据)。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kenick

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值