• 博客访问: 243474
  • 博文数量: 60
  • 用 户 组: 普通用户
  • 注册时间: 1970-01-01 08:00
个人简介

鏆傛棤浠嬬粛

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(60)

文章存档

2008年(3)

2007年(10)

2006年(47)

我的朋友
微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: 数据库开发技术

Oracle ERP维护人员工作再小心也难免会有在正式库中误删或者误改数据并且已经commit的情况发生,那么我就要用到 - Oracle9i中的FlashBack功能,或许很多同事们都在用,下面我谈谈我在使用中的方法和一些感想:
具体方法如下 >>
1. 我们可以使用
SELECT item_cost FROM cst_item_costs
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' hour)
WHERE organization_id = 1
AND yyyymm = 200712
AND item_number = '6384BLCCSL';
来查看1个小时前的数据.
* 这里需要说明几点:
a. AS OF TIMESTAMP expr 是SELECT语句中的FLASHBACK子句
b. SYSTIMESTAMP 是系统提供的时间函数,精确度可以达到微秒级,并提供当前时区
eg. select SYSTIMESTAMP from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
29-DEC-07 11.16.08.112686 AM +09:00
c. INTERVAL 的作用是用来指定时间区间,下面是它参与运算的法则
Operand1 Operator Operand2 Result Type
-------------------------------------------------------
Datetime - Interval Datetime

我们可以通过修改时间单位和数量来改变倒退时间
eg. TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' day) --查询一天前的数据
TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' minute ) --查询十分钟前的数据
TIMESTAMP (SYSTIMESTAMP - INTERVAL '50' second ) --查询50秒前的数据
d. 关于在FlashBack中的可回朔时间
Oracle中有两个参数能够决定可回朔时间 >>
undo 表空间大小 和 undo_retention 初始化参数.
一般的ERP正式系统里面的 undo tablespace 为 20G左右, undo_retention设置为 3600S.
业务繁忙时间最大可回朔时间约为 2-3h,非业务时间为4-5h,这里需要注意: 最大可回朔时间是由
undo表空间大小及数据库数据变更的频繁程度来决定的.
如果超过最大可回朔时间时,系统会给出有名的 ORA-01555 快照太老(Snapshot too old)错误.
e. 做FlashBack必须要有 FlashBack Any Table 的系统权限.

2. 那么依此类推,我们就可以利用FlashBack来恢复某段时间前的数据了
UPDATE cst_item_costs SET item_cost =
(SELECT item_cost FROM cst_item_costs
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' hour)
WHERE organization_id = 1
AND yyyymm = 200712
AND item_number = '6384BLCCSL)
WHERE organization_id = 1
AND yyyymm = 200712
AND item_number = '6384BLCCSL';
* 这里也要说明几点:
a. 在恢复数据前,要检查WHERE条件是否具有唯一性
b. 如果要成批恢复或全表恢复数据的话,要检查是否在指定的时间区间内还有其他会话写入的数据
[@more@]
阅读(2786) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册