复杂的故事简单说,复杂的问题简单做,您好,这里是简露一手,欢迎浏览。
概述
1:数据不小心删除怎么办?
2:存储过程、函数多次编译错了怎样办?
关键点
闪回。
方法
- 删除的数据恢复:
例如:找回User表1个小时前删除的数据。
create table tmp_161228_user as
select * from User as of timestamp sysdate-1/24;
表tmp_161228_user 就是1个小时前的数据。
sysdate-1/24 可以写具体的时间,如找回2016-12-28 22:10:01的数据则select * from User as of timestamp to_timestamp('2016-12-28 22:10:01','yyyy-mm-dd hh24:mi:ss');
- 删除、修改的存储过程(还有包或函数):
例如恢复TEST用户下存储过程SP_UP_ADDR
create table tmp_161228_sp_up_addr as
SELECT * FROM ALL_SOURCE AS OF TIMESTAMP TO_TIMESTAMP ('2016-12-28 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE OWNER='TEST' AND NAME ='SP_UP_ADDR'
存储过程一般编译次数频繁,可以取多个时间段的存储过程数据来得到准确的结果。
注:ALL_SOURCE是系统视图,针对其恢复需要DBA权限,如果没有DBA权限账号 , 可以找管理员在后台用SYS账户执行, 然后查询 SYS.tmp_161228_sp_up_addr表得到相应时间点的存储过程数据。
提点
失误:凡人操作,总有失误。而数据操作的删除失误往往是致命的,导致的结果大到能使整个系统瘫痪。
防范:通常的防范手段是备份,误删后从备份中取数据进行恢复,但备份需要额外的消耗和额外的程序处理,备份需要考虑的情况多,需要专业的人专业处理才有效果。
或许:不是专业的人,误删的时候,若能默默的恢复,弥补过错,总是好的。
简单应用,希望对你有用。
<small>条件:Oracle10或以上版本且打开了闪回。</small>