ORACLE 误删数据的恢复[转]

2 篇文章 0 订阅
1 篇文章 0 订阅
ORACLE 误删数据的恢复
有很多原因导致了数据记录的误删,怎样恢复误删的记录呢?先来看看这个概念:
SCN(系统改变号),它的英文全拼为:System Change Number ,它是数据库中
非常重要的一个数据结构。
SCN 提供了Oracle 的内部时钟机制,可被看作逻辑时钟,这对于恢复操作是至
关重要的
注释:Oracle 仅根据 SCN 执行恢复。
它定义了数据库在某个确切时刻提交的版本。在事物提交时,它被赋予一个唯一
的标示事物的SCN 。一些人认为 SCN 是指, System Commit Number ,而通常
SCN 在提交时才变化,所以很多情况下,
这两个名词经常被交替使用。
究竟是哪个词其实对我们来说并不是最重要的,重要的是我们知道 SCN 是
Oracle 内部的时钟机制, Oracle 通过 SCN 来维护数据库的一致性,并通过
SCN 实施 Oracle 至关重要的恢复机制。
具体执行流程我们可从以下几个示例图中体会;
1.原表记录 $ sqlplus eygle/eygle
Sql 代码
1. SQL*Plus: Release 10.1.0.2.0 - Production on Wed Mar 30 08:52:0
4 2005
2. Copyright (c) 1982, 2004, Oracle. All rights reserved.
3. Connected to:
4. Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64b
it Production
5. With the Partitioning, OLAP and Data Mining options
6. SQL>select count(*) from t1;
7. COUNT(*)
8. ----------
9. 9318
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 代码
1. SQL>delete from t1;
2. 9318 rows deleted.
3. SQL>commit;
4. Commit complete.
5. SQL>select count(*) from t1;
6. COUNT(*)
2
7. ----------
8. 0
SQL>delete from t1; 9318 rows deleted. SQL>commit; Commit complete.
SQL>select count(*) from t1; COUNT(*) ---------- 0
3.获得当前SCN
如果能够确切知道删除之前SCN 最好,如果不知道,可以进行闪回查询尝试.
Sql 代码
1. SQL>select dbms_flashback.get_system_change_number from dual;
2. GET_SYSTEM_CHANGE_NUMBER
3. ------------------------
4. 10671006
5. SQL>select count(*) from t1 as of scn 10671000;
6. COUNT(*)
7. ----------
8. 0
9. SQL>select count(*) from t1 as of scn 10670000;
10. COUNT(*)
11.----------
12. 9318
13.--我们看到在SCN=10670000 时,数据都在。
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 代码
1. SQL>insert into t1 select * from t1 as of scn 10670000;
2. 9318 rows created.
3. SQL>commit;
4. Commit complete.
5. SQL>select count(*) from t1;
6. COUNT(*)
7. ----------
8. 9318
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
3
Sql 代码
1. --文章2
2.
3. --误删数据后的还原
4. select timestamp_to_scn(to_timestamp('2009-03-13 09:00:00','YYY
Y-MM-DD HH:MI:SS')) from dual;
5. --结果:13526973
6. --将删除时间转换为scn
7. select * from reportinfo AS OF SCN 13526973
8. --将reportinfo 表中的scn 点的数据取出然后可以根据这个数据进行还
原操作
9. create table reporttest as select * from reportinfo where 1=0;
10.insert into reporttest select * from reportinfo AS OF SCN 13526
973;
11.--上面两句应该可以合成一句
12.--create table reporttest as select * from reportinfo AS OF SCN
13526973;
13.
14.--这是reporttest 表中就是scn 点的reportinfo 数据.处理即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值