Chinaunix首页 | 论坛 | 博客

  • 博客访问: 57139
  • 博文数量: 16
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 169
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-16 09:39
文章分类

全部博文(16)

文章存档

2011年(1)

2010年(15)

我的朋友

分类: Oracle

2010-08-27 15:02:36

使用FLASHBACK,必须将初始化参数undo_management设置为AUTO,合理设置初始化参数undo_retention。

*****使用FLASHBACK查询实现行级恢复*****
SQL> select * from a;
         A          B
---------- ----------
         1       2000
         2       2000
SQL> select * from a as of timestamp
    to_timestamp('2010-08-26 14:45:00','yyyy-mm-ff hh24:mi:ss') ;
         A          B
---------- ----------
         1          1
         2          3
SQL>
SQL> select * from a as of scn 1295000 ;
         A          B
---------- ----------
         1          1
         2          3
SQL>
1、模拟用户误操作
 
  SQL> ho date
  当前日期: 2010/08/26
  输入新日期: (年月日)
  
  SQL> ho time
  当前时间: 14:59:45.31
  输入新时间:
  
  SQL> delete from a ;
  
  已删除2行。
  
  SQL> commit;
  
  提交完成。
  
  SQL>
2、使用FLASHBACK查询取得早期时间点表行数据
   SQL> select * from a as of timestamp
     to_timestamp('2010-08-26 14:59:00','yyyy-mm-ff hh24:mi:ss') ;
         A          B
---------- ----------
         1          1
         2          3
     
3、使用FLASHBACK查询恢复表行数据
  SQL> insert into a select * from a as of timestamp
      to_timestamp('2010-08-26 14:59:00','yyyy-mm-ff hh24:mi:ss') ;
  
  已创建2行。
  
  SQL> commit;        
  
  
  
  
  
  
*****使用FLASHBACK恢复表到先前状态*****
  
1、激活行移动特征
 SQL> alter table a enable row movement;
2、模拟用户DML操作
 
  SQL> select * from b ;
  
           A          B
  ---------- ----------
           1          1
           2          3
  
  SQL> update a set b=b*11 ;
  
  已更新2行。
  
  SQL> select * from a ;
  
           A          B
  ---------- ----------
           1         11
           2         33   
3、使用FLASHBACK TABLE 恢复表数据到先前时间点
  SQL> flashback table a to timestamp
    2  to_timestamp('2010-08-26 15:39:00','yyyy-mm-dd hh24:mi:ss');
  
  闪回完成。
  
  SQL> select * from a ;
  
           A          B
  ---------- ----------
           1          1
           2          3
            
            
            
            
*****使用FLASHBACK TABLE恢复被删除表*****
1、显示当前用户的回收站对像
 SQL> show recyclebin ;
  select * from recyclebin;            
2、显示数据库的所有回收站对像
 select * from dba_recyclebin;
3、清除回收站对像
 SQL>purge table a;    清除表及对像
 SQL>purge  BIN$jeaHohcCQ4+lFiKEzq/Y4g==$0 ;
 purge index idx_a_id;   清除索引
 purge tablespace user01; 清除特定对像表空间的所有对像
 purge tablespace users user scott;
 purge recyclebin 清除当前用户回收站的所有对像
 purge dba_recyclebin; 清除数据库的所有回收站对像
 
 
*****恢复被删除表*****
1、模拟用户误操作
 drop table a;
2、显示回收站对像
 SQL> show recyclebin
3、恢复被删除表
  SQL> flashback table a to before drop ;
  闪回完成。      
 
  SQL> flashback table a to before drop rename to b ; 通过rename to 改变删除表的名称
  闪回完成。  
  
  
  
*****使用FLASHBACK DATABASE恢复数据库到先前状态*****
1、配置数据支持
  SQL> shutdown immediate
  数据库已经关闭。
  已经卸载数据库。
  ORACLE 例程已经关闭。
  SQL> startup mount
  ORACLE 例程已经启动。
  
  Total System Global Area  171966464 bytes
  Fixed Size                   787988 bytes
  Variable Size             145750508 bytes
  Database Buffers           25165824 bytes
  Redo Buffers                 262144 bytes
  数据库装载完毕。
  SQL> alter database flashback on;
  
  数据库已更改。
  
  SQL> alter system set db_flashback_retention_target=3600;
  
  系统已更改。
  
  SQL> alter database open ;
  
  数据库已更改。
  
  注意:如果禁止特定表空间的FLASHACK特征,执行 alter tablespace test1 flashbacj off;
2、模拟用户误操作
  SQL> select current_scn from v$database ;
  SQL> drop table scott.emp;
3、确定FLASHBACK DATABASE可以恢复到的最早SCN值或时间
  SQL> select * from v$flashback_database_log;
4、使用FLASHBACK DATABASE命令恢复数据库到先前状态
 (1)、在SQL*PLUS中使用FLASHBACK DATABASE命令
    SQL>shutdown immediate
    SQL>startup mount
    SQL> flashback database to scn  1306023 ;
    SQL> alter database open resetlogs ;
  (2)、在RMAN中使用FLASHBACK DATABASE命令
   c:\set  nls_date_format=yyyy-mm-dd hh24:mi:ss
   c:\rman nocatalog
   RMAN>shutdown immediate
   RMAN>startup mount
   RMAN>flashback database to time '2010-08-27 10:52:02';
   RMAN>alter database open resetlogs;
   
    
阅读(849) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~