oracle误删数据恢复方法小结

oracle误删数据恢复方法小结,第1张

如果用户误删/更新了数据后,作为用户并没有什么直接的方法来进行恢复,他们必须求助DBA来对数据库进行恢复,到了Oracle9i,这一个难堪局面有所改善。Or(www.jb51.net)acle

9i中提供了一项新的技术手段--闪回查询,用户使用闪回查询可以及时取得误 *** 作前的数据,并可以针对错误进行相应的恢复措施,而这一切都无需DBA干预

因为一时手贱,生产上的数据被我给delete掉了。

用的是delete语句,然后很迅速的还给commit了

下面这两个语句:

ALTER

TABLE

tablename

ENABLE

row

movement

flashback

table

tablename

to

timestamp

to_timestamp('2012-09-13

13:00:00','yyyy-mm-dd

hh24:mi:ss')

记得大概是两点半左右运行的delete---commit;

具体执行流程我们可从以下几个示例图中体会

1.原表记录

$

sqlplus

eygle/eygle

SQL*Plus:

Release

10.1.0.2.0

-

Production

on

Wed

Mar

30

08:52:04

2005

Copyright

(c)

1982,

2004,

Oracle.

All

rights

reserved.

Connected

to:

Oracle

Database

10g

Enterprise

Edition

Release

10.1.0.2.0

-

64bit

Production

With

the

Partitioning,

OLAP

and

Data

Mining

options

SQL>select

count(*)

from

t1

COUNT(*)

----------

9318

2.误删除所有记录

并且提交更改。

SQL>delete

from

t1

9318

rows

deleted.

SQL>commit

Commit

complete.

SQL>select

count(*)

from

t1

COUNT(*)

----------

0

3.获得当前SCN

如果能够确切知道删除之前SCN最好,如果不知道,可以进行闪回查询尝试.

SQL>select

dbms_flashback.get_system_change_number

from

dual

GET_SYSTEM_CHANGE_NUMBER

------------------------

10671006

SQL>select

count(*)

from

t1

as

of

scn

10671000

COUNT(*)

----------

0

SQL>select

count(*)

from

t1

as

of

scn

10670000

COUNT(*)

----------

9318

我们看到在SCN=10670000时,数据都在。

4.恢复数据.

SQL>insert

into

t1

select

*

from

t1

as

of

scn

10670000

9318

rows

created.

SQL>commit

Commit

complete.

SQL>select

count(*)

from

t1

COUNT(*)

----------

9318

其它网友用的教程

进行数据库 *** 作,delete后面一定要加where”。今天无意中在网上看到了关于oracle误删除数据恢复的一条信息,发现的确很好使,下面就我的测试向大家汇报下。

1.

select

*

from

t_viradsl2

t

//查询t_viradsl2中所有的数据,可以看到三条数据

2.

delete

t_viradsl2

//删除t_viradsl2中所有的数据,三条数据消失

3.

select

*

from

t_viradsl2

t

//无数据。

4.

insert

into

t_viradsl2

select

*

from

t_viradsl2

as

of

timestamp

to_Date('2011-01-19

15:28:00',

'yyyy-mm-dd

hh24:mi:ss')

//已将误删除数据插入表中

5.

select

*

from

t_viradsl2

t

//又会看到三条数据。

我们来分析下第四步,注意这句:

select

*

from

t_viradsl2

as

of

timestamp

to_Date('2011-01-19

15:28:00',

'yyyy-mm-dd

hh24:mi:ss'),什么意思呢,

找到t_viradsl2在2011-01-19

15:28:00这个时间点的所有数据,既然找到了,你想怎么 *** 作都可以了。

在此分享给大家

1、首先新建一张测试表TEST,里面输入记录。由于删除/更新/插入恢复步骤相同,这里仅演示删除数据的情况。

2、删除其中1条记录,查看表中记录情况,由下图可见,记录2被删除了。

3、恢复之前先确定要恢复到的时间点,下图可以看出2018-03-07 15:33:00数据是正确的。

SELECT *

FROM TEST AS OF TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS')

4、下面进行表数据恢复。

FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS')

可以看到报错了,原因是没有开启行移动。

5、开启该表的行移动。

ALTER TABLE TEST ENABLE ROW MOVEMENT

6、再次执行数据恢复。

FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS')

然后查看数据情况,可以看到已经恢复了。

Oracle DBA神器:PRM灾难恢复工具,Schema级别数据恢复。PRM For Oracle Database – schema级别oracle数据库数据恢复特性 ,PRM即ParnassusData Recovery Manager是企业级别Oracle数据库灾难恢复工具。PRM可以在无备份的情况下恢复被truncated/drop掉的表,也可以恢复无法打开的Oracle数据库(Alter Database Open失败)中的数据。 PRM是图形化增强版的Oracle DUL工具,同时具备很多Oracle DUL不具备的特性


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6761061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存