Chinaunix首页 | 论坛 | 博客
  • 博客访问: 66682
  • 博文数量: 6
  • 博客积分: 2045
  • 博客等级: 大尉
  • 技术积分: 190
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-06 17:40
文章分类

全部博文(6)

文章存档

2008年(6)

我的朋友
最近访客

分类: Oracle

2008-03-05 16:25:28

一个闪回查询实验的例子:

数据库版本:Oracle 9.2.0.4

操作系统:linux AS4

进行闪回查询必须设置自动回滚段管理,在init.ora设置参数UNDO_MANAGEMENT=AUTO,参数undo_retention=n,决定了能往前闪回的最大时间,值越大就需要越多Undo空间。

# sqlplus test/test

SQL*Plus: Release 9.2.0.4.0 - Production on Fri Jul 22 11:27:19 2007

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production

SQL>  select dbms_flashback.get_system_change_number fscn from dual; (查询当前的SCN号)


      FSCN
----------
 897271357

SQL> select count(*) from customer; (查询customer表的总大小)

  COUNT(*)
----------
    247064

SQL> select dbms_flashback.get_system_change_number fscn from dual;  (再次查询当前的SCN号)

      FSCN
----------
 897271368

SQL> delete customer where rownum<100;    (删除customer表前99行数据)

99 rows deleted.


SQL> commit;

Commit complete.

SQL>  select dbms_flashback.get_system_change_number fscn from dual;  (查询此时当前的SCN号)

      FSCN
----------
 897271383

SQL> select count(*) from customer;  (此时customer表数据的大小已变化,发现数据少了前99条)

  COUNT(*)
----------
    246965

SQL> create table customer_bak as select * from customer where 1=0;  (创建一个恢复表)

Table created.

SQL> select count(*) from customer_bak;

  COUNT(*)
----------
         0

SQL> select count(*) from customer as of scn 897271357; (选择SCN向前恢复)

  COUNT(*)
----------
    247064


SQL> select count(*) from customer as of scn 897271368; (尝试更多的SCN,获取最佳值)

  COUNT(*)
----------
    247064

选择恢复到SCN为897271357的时间点:

SQL> insert into customer_bak select * from customer  as of scn 897271357; 


247064 rows created.

SQL> commit;

Commit complete.

SQL> select count(*) from customer_bak where rownum <100;

  COUNT(*)
----------
        99

SQL> insert into customer select * from customer_bak where rownum< 100;  (找回前99条记录,插回原表)

99 rows created.

SQL> commit;

Commit complete.

SQL> select count(*) from customer;

  COUNT(*)
----------
    247064

至此,闪回恢复成功完成。

阅读(1196) | 评论(0) | 转发(0) |
0

上一篇:10046 event的详细解释和用法

下一篇:没有了

给主人留下些什么吧!~~