oracle使用闪回技术中恢复误删除和修改的表及数据
2013-05-28 09:05
901 查看
数据库的恢复在我的之前的文章中讲到了10g的新特性闪回技术。现在来使用oracle10g提供的闪回技术对数据库中的修改恢复到上一个时间点。使用恢复技术之前要保证闪回技术是开放状态。恢复主要涉及表的恢复以及表的记录的恢复两种情况。以下就这两种情况进行详细分析。
1、表的恢复当用户不小心把一个表删除之后,希望恢复表。以下使用实例进行讲解如何进行恢复。
1)创建示例表
ecdsnl:/home/ap/ecds/> sql1 "create table A (Sno int,Sname char(10));"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>
Table created.
ecdsnl:/home/ap/ecds/> sql1 "desc A;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Name Null? Type
SNO NUMBER(38)
SNAME CHAR(10)
2)删除示例表
ecdsnl:/home/ap/ecds/> sql1 "drop table A;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>
Table dropped.
ecdsnl:/home/ap/ecds/> sql1 "desc A;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> ERROR:
ORA-04043: object A does not exist
ecdsnl:/home/ap/ecds/> sql1 "select * from cat;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>
TABLE_NAME |TABLE_TYPE
BIN$3aoxxMMASMngRAAaSwkV3g==$0|TABLE
以上查询表明数据表A已经被删除,但删除的记录保存在闪回区域可以进行闪回技术回复表。
3)表的恢复
(1)从flash back里查询被删除的表
ecdsnl:/home/ap/ecds/> sql1 "select * from recyclebin;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>
OBJECT_NAME |ORIGINAL_NAME |OPERATION|TYPE |TS_NAME |CREATETIME |DROPTIME | DROPSCN|PARTITION_NAME |CAN|CAN| RELATED| BASE_OBJECT|PURGE_OBJECT| SPACE
1|2|3|4|5|6|7|8|9|10 |11 |12|13|14|15|
1|2 |3|4 |5|6|7|8|9|10 |11 |12|13|14|15|
---------------------------------------------------------------------
BIN$3aoxxMMASMngRAAaSwkV3g==$0|A |DROP |TABLE |TBS_DATA2 |2013-05-27:10:43:10|2013-05-27:10:49:16| 654231737| |YES|YES| 1160212| 1160212| 1160212| 8
1 row selected.
(2)执行表的恢复
①ecdsnl:/home/ap/ecds/> sql1 "flashback table A to before drop;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Flashback complete.②ecdsnl:/home/ap/ecds/> sql1 "desc A;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Name TypeSNO NUMBER(38)
SNAME CHAR(10)
③ecdsnl:/home/ap/ecds/> sql1 "select * from cat;"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> TABLE_NAME |TABLE_TYPEA |TABLE2、表记录的恢复对误删的表记录,只要没有truncate语句,就可以根据事务的提交时间进行选择恢复,一般步骤如下:1)删除表中的记录①ecdsnl:/home/ap/ecds/> sql "select * from A;"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SNO|SNAME---------------------------------------------------------------------1|1231 row selected.② ecdsnl:/home/ap/ecds/> sql "delete from A where Sno=1;"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> 1 row deleted.③ecdsnl:/home/ap/ecds/> sql "select * from A;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> no rows selected2)从flashback_transaction_query视图里查询,视图提供了供查询用的表名称、事务提交时间、UNDO_SQL等字段
ecdsnl:/home/ap/ecds/> sql "select * from flashback_transaction_query where TABLE_NAME='A';"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> XID | START_SCN|START_TIMEST| COMMIT_SCN|COMMIT_TIMES|LOGON_USER |UNDO_CHANGE#|OPERATION |TABLE_NAME |TABLE_OWNER |ROW_ID1|2|3|4|5|6|7|8|9|10|11|1|||||||||||---------------------------------------------------------------------UNDO_SQL00010005000049A8| 0|27-MAY-13 | 38164029|27-MAY-13 |PECDS | 1|DELETE |A |PECDS |AAAY0jAAEAAABREAAAinsert into "PECDS"."A"("SNO","SNAME") values ('1','123 ');3)执行表记录恢复①先开启行移动模式
ecdsnl:/home/ap/ecds/>sql "alter table A enable row movement;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Table altered.②恢复数据(可以进行多次flashback,一边闪回一边进行数据的比较,直到找到正确的时间点为止。)ecdsnl:/home/ap/ecds/>sql "flashback table A to timestamp systimestamp - interval '20' minute;"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Flashback complete.ecdsnl:/home/ap/ecds/> sql "select * from A;"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SNO|SNAME1|1231 row selected.或sql "flashback table A to timestamp to_date('2013-05-27 15:30:00','yyyy-mm-dd hh24:mi:ss');"
1、表的恢复当用户不小心把一个表删除之后,希望恢复表。以下使用实例进行讲解如何进行恢复。
1)创建示例表
ecdsnl:/home/ap/ecds/> sql1 "create table A (Sno int,Sname char(10));"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>
Table created.
ecdsnl:/home/ap/ecds/> sql1 "desc A;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Name Null? Type
SNO NUMBER(38)
SNAME CHAR(10)
2)删除示例表
ecdsnl:/home/ap/ecds/> sql1 "drop table A;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>
Table dropped.
ecdsnl:/home/ap/ecds/> sql1 "desc A;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> ERROR:
ORA-04043: object A does not exist
ecdsnl:/home/ap/ecds/> sql1 "select * from cat;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>
TABLE_NAME |TABLE_TYPE
BIN$3aoxxMMASMngRAAaSwkV3g==$0|TABLE
以上查询表明数据表A已经被删除,但删除的记录保存在闪回区域可以进行闪回技术回复表。
3)表的恢复
(1)从flash back里查询被删除的表
ecdsnl:/home/ap/ecds/> sql1 "select * from recyclebin;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>
OBJECT_NAME |ORIGINAL_NAME |OPERATION|TYPE |TS_NAME |CREATETIME |DROPTIME | DROPSCN|PARTITION_NAME |CAN|CAN| RELATED| BASE_OBJECT|PURGE_OBJECT| SPACE
1|2|3|4|5|6|7|8|9|10 |11 |12|13|14|15|
1|2 |3|4 |5|6|7|8|9|10 |11 |12|13|14|15|
---------------------------------------------------------------------
BIN$3aoxxMMASMngRAAaSwkV3g==$0|A |DROP |TABLE |TBS_DATA2 |2013-05-27:10:43:10|2013-05-27:10:49:16| 654231737| |YES|YES| 1160212| 1160212| 1160212| 8
1 row selected.
(2)执行表的恢复
①ecdsnl:/home/ap/ecds/> sql1 "flashback table A to before drop;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Flashback complete.②ecdsnl:/home/ap/ecds/> sql1 "desc A;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Name TypeSNO NUMBER(38)
SNAME CHAR(10)
③ecdsnl:/home/ap/ecds/> sql1 "select * from cat;"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> TABLE_NAME |TABLE_TYPEA |TABLE2、表记录的恢复对误删的表记录,只要没有truncate语句,就可以根据事务的提交时间进行选择恢复,一般步骤如下:1)删除表中的记录①ecdsnl:/home/ap/ecds/> sql "select * from A;"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SNO|SNAME---------------------------------------------------------------------1|1231 row selected.② ecdsnl:/home/ap/ecds/> sql "delete from A where Sno=1;"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> 1 row deleted.③ecdsnl:/home/ap/ecds/> sql "select * from A;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> no rows selected2)从flashback_transaction_query视图里查询,视图提供了供查询用的表名称、事务提交时间、UNDO_SQL等字段
ecdsnl:/home/ap/ecds/> sql "select * from flashback_transaction_query where TABLE_NAME='A';"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> XID | START_SCN|START_TIMEST| COMMIT_SCN|COMMIT_TIMES|LOGON_USER |UNDO_CHANGE#|OPERATION |TABLE_NAME |TABLE_OWNER |ROW_ID1|2|3|4|5|6|7|8|9|10|11|1|||||||||||---------------------------------------------------------------------UNDO_SQL00010005000049A8| 0|27-MAY-13 | 38164029|27-MAY-13 |PECDS | 1|DELETE |A |PECDS |AAAY0jAAEAAABREAAAinsert into "PECDS"."A"("SNO","SNAME") values ('1','123 ');3)执行表记录恢复①先开启行移动模式
ecdsnl:/home/ap/ecds/>sql "alter table A enable row movement;"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Table altered.②恢复数据(可以进行多次flashback,一边闪回一边进行数据的比较,直到找到正确的时间点为止。)ecdsnl:/home/ap/ecds/>sql "flashback table A to timestamp systimestamp - interval '20' minute;"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Flashback complete.ecdsnl:/home/ap/ecds/> sql "select * from A;"SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SNO|SNAME1|1231 row selected.或sql "flashback table A to timestamp to_date('2013-05-27 15:30:00','yyyy-mm-dd hh24:mi:ss');"
相关文章推荐
- oracle 使用flashback(闪回)恢复误删除的数据 或 误删除的表
- oracle 使用flashback(闪回)恢复误删除的数据 或 误删除的表
- 使用oracle闪回查询功能恢复之前删除的数据
- oracle使用闪回功能恢复删除的表数据
- Oracle的闪回特性之恢复truncate删除表的数据
- Oracle闪回查询恢复delete删除数据
- Oracle数据表的删除与闪回技术
- Oracle闪回技术之一Oracle 11g 利用FlashTable (闪回表)恢复(用delete)误删的数据
- 利用oracle flashback技术恢复数据之 ――事务级别闪回
- Oracle闪回查询恢复delete删除数据
- oracle删除数据后如何恢复(闪回数据)-误删除数据提交后如何立即恢复
- 使用oracle快照恢复删除的数据
- Oracle闪回查询恢复delete删除数据
- oracle使用闪回技术还原表数据。
- Oracle闪回查询恢复delete删除数据
- oracle 使用DBMS_FLASHBACK恢复意外删除的数据
- 用Oracle闪回功能(flashback)恢复删除的数据
- oracle闪回使用以及删除存储过程恢复
- 用Oracle闪回功能(flashback)恢复删除的数据
- oracle闪回技术恢复误操作数据