【转】恢复ORACLE被误更新或删除数据的办法

标签: oracle 更新 删除 | 发表时间:2014-01-18 16:41 | 作者:xielin2008
出处:http://www.iteye.com

有时候我们在操作ORACLE数据库的时候,可能由于SQL写错了导致把数据update错了,或者delete删除掉了,那么这时候如何去恢复之前的数据呢?

莫着急,我们可以采用oracle的基于时间查询as of timestamp的办法进行恢复数据。下面以具体例子进行讲解用法。

 

1、比如,我的wl_notify_task表目前有三条数据,大家重点关注PARAMETER字段。

image

 

2、我现在做一个update操作,要把id=1的parameter字段更新为param_test8,但是由于我操作的失误,id=1条件忘了加了,导致整表更新了。导致其他记录的parameter字段全部都是param_test8

update wl_notify_task set parameter = ‘param_test8′

image

 

杯具发生了,那么如何再找到我之前的记录是什么呢??

3、没事,我们可以采用oracle的基于时间查询的办法查询出3分钟前的表的记录情况,查询SQL如下:

SELECT * FROM wl_notify_task  AS OF TIMESTAMP SYSDATE – 3/1440

 

对SQL的解释说明:

SYSDATE :当前时间

1440 :24h*60m=1440m

3:3分钟前

 

image

 

4、通过上面的查询,我们看到了在update之前的数据情况。那么把数据恢复回去就很简单了,通过ID关联的方式更新回去即可。如下:

update wl_notify_task t1
set t1.parameter =
(select parameter
from wl_notify_task AS OF TIMESTAMP SYSDATE – 3 / 1440
where t1.id = id)

image

 

这种做法也是DBA常用的恢复数据的手段。对于删除的情况,那么就通过insert办法重新把记录插入表即可。

最后需要 特别提醒大家注意的是,SQL中的  SYSDATE-3/1440 代表查询3分钟前的记录情况,由于是和当前时间SYSDATE的距离3分钟前,所以这个随着隔的时间不同及时间的推移是会变化的,一般的做法是在真正做恢复时的update前,需要先select查询一下比如3分钟前的数据是否是我们想要的数据,确认无误后立即做恢复的update。如果数据不是我们想要的,那么就需要通过调节分钟数直到找到我们想要的数据。这种办法适合小批量数据,如果是大批量数据且很重要的数据的话,建议大家新建一张结构相同的表,先把as of timestamp查询出来的数据存到新表中,再进行恢复操作,因为这样数据不再受时间差的影响,确保数据是准确的,无论你何时开始做恢复操作。

 

 转自: http://wangchongan.com/articles/oracle-data-update-delete-recover.html



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [oracle 更新 删除] 推荐:

【转】恢复ORACLE被误更新或删除数据的办法

- - Oracle - 数据库 - ITeye博客
有时候我们在操作ORACLE数据库的时候,可能由于SQL写错了导致把数据update错了,或者delete删除掉了,那么这时候如何去恢复之前的数据呢. 莫着急,我们可以采用oracle的基于时间查询as of timestamp的办法进行恢复数据. 1、比如,我的wl_notify_task表目前有三条数据,大家重点关注PARAMETER字段.

oracle恢复删除的数据(转载)

- - 数据库 - ITeye博客
oracle恢复删除的数据. 分为两种方法:scn和时间戳两种方法恢复. 一、通过scn恢复删除且已提交的数据.   1、获得当前数据库的scn号.     select current_scn from v$database; (切换到sys用户或system用户查询).     查询到的scn号为:1499223.

Oracle 各种删除操作对空间返还的说明

- - IT技术博客大学习
标签:   oracle   空间. Oracle 各种删除操作对空间返还的说明. 操作 表空间是否回收空间. 文件系统或ASM是否回收空间. 在本地管理表空间(LMT 9i以后)是否造成表空间碎片. 在字典管理表空间(DMT 9i以前)是否造成表空间碎片. 注意现在的oracle版本不太可能用DMT 是否造成索引碎片.

9月7日 gfwlist 更新: 增加 2 条, 删除 2 条

- EinVerne - gfwlist 更新记录

Oracle更新的两种方式(merge/update内联视图)

- - 数据库 - ITeye博客
对于Oracle的两表联合更新的场景(有A、B两表,以A.id=B.id关联,根据B表中的记录更新A表中的相应字段),一般有update内联视图和merge两种方式,下面举例介绍:. merge方法是最简洁,效率最高的方式,在大数据量更新时优先使用这种方式. update内联视图方式:. 使用这种方式必须在test2.id上有主键(这里很好理解,必须保证每一个test1.id对应在test2里只有一条记录,如果test2中有多条对应的记录,怎么更新test1.

ORACLE----TimeStamp(时间戳)字段自动更新

- -
之前对id的自增长进行了设置,原以为时间戳的更新也类似,使用序列之类的,但最终发现跟序列没半毛钱关系. 触发器是肯定要用的,但编写脚本也是需要的. 图2中,我们要选择事件(即例子中的INSERT,UPDATE),触发时间(即INSERT,UPDATE事件的前或后,例子中是before),列(例子中为MODIFIED_DATE,为TimeStamp类型),新旧值(为系统默认值OLD和NEW).

Oracle Java SE 8 发行版更新:限制商业或生产用途

- - 开源中国社区最新新闻
Oracle Java SE 8 发行版更新. Oracle Java SE 8 的公开更新仍面向单独的个人使用提供,至少持续至 2020 年底. 2019 年 1 月以后发布的 Oracle Java SE 8 公开更新将不向没有商用许可证的业务、商用或生产用途提供. 如果您是使用者,将 Java 用于单独的个人用途,则至少在 2020 年底之前,您对 Oracle Java SE 8 更新仍具有与现在相同的访问权限.

Oracle 收购 Ksplice

- feng823 - LinuxTOY
实现无需重启即可为 Linux 内核打安全补丁的 Ksplice 被 Oracle 收购. 在被收购前, Ksplice 为 Fedora, Ubuntu 免费提供该功能,对于 RHEL 和 CentOS 则需要订阅其产品. Oracle 表示将把 Ksplice 带来的零宕机安全更新功能添加到 Oracle 产品订阅服务中,同时停止对其他企业级 Linux 发行版的支持,将 Oracle Unbreakable Linux 打造成唯一具备零宕机安全更新功能的企业级 Linux 发行版.

Linux Ksplice,MySQL and Oracle

- Syn - DBA Notes
Oracle 在 7 月份收购了 Ksplice. 使用了 Ksplice 的 Linux 系统,为 Kernel 打补丁无需重启动,做系统维护的朋友应该明白这是一个杀手级特性. 现在该产品已经合并到 Oracle Linux 中. 目前已经有超过 700 家客户,超过 10 万套系统使用了 Ksplice (不知道国内是否已经有用户了.

oracle license计算

- Fenng - eagle&#39;s home
Oracle license的计算是基于CPU core的. 用core的数目乘以一个系数core factor就可以得到所需的oracle license的数目. 对于不同的CPU,core factor是不一样的,可以从oracle提供的这张列表中查到 Oracle Processor Core Factor Table.