HardBirch

【误删数据不要慌,Oracle闪回表来帮忙】之五

时间:09-06-10 栏目:iOS移动应用开发技术 作者:张飞不张,文采横飞 评论:0 点击: 1,237 次

下面进行把数据恢复到某个点上的实验。

要实现把数据闪回到过去的某个点上,必须确保与撤销的表空间有关的参数设置合理。

DBA身份登录数据库,查看撤销表空间有关参数:

SQL> conn sys/admin_0522 as sysdba;

已连接。

SQL> show parameter undo;

 

NAME                                 TYPE        VALUE

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

undo_management                      string      AUTO

undo_retention                         integer     900

undo_tablespace                        string      UNDOTBS1

 

              undo_management  表示系统采用撤销表空间记录增、删、该数据。

              undo_tablespace 表示撤销表空间名称是UNDOTBS1

       undo_retention 表示记录在用撤销表空间内的记录增、删、该数据保留的时间,这里是900秒。也可以修改该参数,使保留时间更长。

SQL> alter system set undo_retention=1800 scope=both;

 

系统已更改。

        下面测试一下查看闪回版本以及根据时间点恢复相应数据。

        SQL> conn zygdemo/fhwlcatv@zygora

已连接。

SQL> select * from test;

 

        ID

----------

         1

         2

         3

下面依次执行如下操作:

1

DELETE FROM TEST WHERE ID=3;

Commit;

select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;

结果为:

SQL> DELETE FROM TEST WHERE ID=3;

 

已删除 1 行。

 

SQL> Commit;

 

提交完成。

 

SQL> select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;

 

TO_CHAR(SYSDATE,'

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

20090604 10:57:35

 

2

DELETE FROM TEST WHERE ID=2;

Commit;

select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;

结果为:

SQL> DELETE FROM TEST WHERE ID=2;

 

已删除 1 行。

 

SQL> Commit;

 

提交完成。

 

SQL> select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;

 

TO_CHAR(SYSDATE,'

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

20090604 10:59:44

 

20090604 10:57:3520090604 10:59:44分别删除了ID=3ID=2的记录。

 

查询当前TEST表中记录:

Select * from test;

SQL> Select * from test;

 

        ID

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

         1

查询10:59:43时刻TEST表中记录:

SQL> select * from test

  2   as of timestamp

  3   to_timestamp('20090604 10:59:43','yyyymmdd hh24:mi:ss');

 

        ID

----------

         1

         2

查询10:57:34时刻TEST表中记录:

SQL> select * from test

  2   as of timestamp

  3   to_timestamp('20090604 10:57:34','yyyymmdd hh24:mi:ss');

 

        ID

----------

         1

         2

         3

现在想把数据恢复到只有ID12时的状态,可以如下操作:

alter table test enable row movement;

flashback table test to timestamp

to_timestamp('20090604 10:59:43','yyyymmdd hh24:mi:ss');

select * from test;

结果为:

SQL> alter table test enable row movement;

 

表已更改。

 

SQL> flashback table test to timestamp

  2  to_timestamp('20090604 10:59:43','yyyymmdd hh24:mi:ss');

 

闪回完成。

 

SQL> select * from test;

 

        ID

----------

         1

         2

 

【误删数据不要慌,Oracle闪回表来帮忙】之五:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐