Oracle中用于数据备份的触发器及表结构
程序员文章站
2022-05-28 20:59:29
...
欢迎进入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; |
推荐阅读
-
Sqlserver数据库中char、varchar、nchar、nvarchar的区别及查询表结构
-
oracle查询锁表及解锁,修改表字段名与复制表结构和数据的方法
-
oracle 触发器,当一个表更新或插入时将数据同步至另个库中的某个表中
-
详解Oracle数据库中自带的所有表结构(sql代码)
-
Sqlserver数据库中char、varchar、nchar、nvarchar的区别及查询表结构
-
oracle数据库中查询该某个表的主键被哪些表引用及该表中的外键来源于哪些表
-
Oracle中用于数据备份的触发器及表结构
-
使用PowerDesigner****生成及更新Oracle数据库的表结构文件(物理模型图.pdm)
-
oracle查询锁表及解锁,修改表字段名与复制表结构和数据的方法
-
在oracle数据库中的一个表给多个字段添加触发器