Chinaunix首页 | 论坛 | 博客
  • 博客访问: 723600
  • 博文数量: 94
  • 博客积分: 1937
  • 博客等级: 上尉
  • 技术积分: 1618
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-04 18:46
个人简介

专注数据库开发管理

文章分类

全部博文(94)

文章存档

2015年(1)

2014年(2)

2013年(19)

2012年(32)

2011年(10)

2010年(30)

分类: Oracle

2013-01-17 16:27:07

/********** RECYCLE BIN **********/
 
 
 -- 查询回收站的对象
    SELECT object_name ,original_name ,dropscn FROM RECYCLEBIN;
  
 -- 清空回收站
    PURGE RECYCLE BIN;
    
 -- DROP表时不放入回收站
    DROP TABLE t PURGE;   
  
 -- 从回收站清除表,object_name必须加""
    PURGE TABLE "BIN$qP/kUg1MR5+RJFI4fUy99g==$0";
    PURGE TABLE t;     --如果T表在回收站中不唯一则需例用object_name,否则purge最近drop的T表
  
 -- 权限 
 
 
 
 /********** FLASHBACK QUERY **********/
 
 -- 闪回
    flashback table t to scn 840608;
    flashback table t to timestamp sysdate-3/1440;
    -- 验证不成功(11gR2)ORA-01466: unable to read data - table definition has changed
    FLASHBACK TABLE t TO TIMESTAMP to_timestamp('2013-1-18 09:30','yyyy-mm-dd hh24:mi');
    
    -- for example
    SQL> flashback table t to scn 840608;
  
    flashback table t to scn 840608
    -- 须开启行迁移功能,默认是关闭的
    ORA-08189: cannot flashback the table because row movement is not enabled
  
    SQL> alter table t enable row movement;
  
    Table altered
  
    SQL> flashback table t to scn 840608;
    
    Done
  
 
 
 -- 闪回查询,where子句放于as of 子句之后
    select count(*) from t as of timestamp sysdate-5/1440 where id>=1000;
    select count(*) from t as of 737391;
  
 -- 闪回查询带DBLink的对象 
    select * from t@dblink as of scn 737391; 
 
 
 -- SCN与TIMESTAMP对应表,每5分钟更新一次
    select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss') from sys.smon_scn_time;
 
 
 -- 获取数据库SCN号的两种方法
    select dbms_flashback.get_system_change_number from dual;
    select current_scn FROM v$database;
 
 
 -- 版本查询
    select * from t versions between scn 737890 and 737910;
 
 
 -- 事务查询 
    select xid,commit_scn,commit_timestamp,operation,undo_sql
    from flashback_transaction_query q 
    where q.xid IN ( select versions_xid 
                   from t 
                   versions between scn 741565 and 741677);
 
 
 -- DATE转SCN
    select timestamp_to_scn(sysdate) from dual;
 -- SCN转date
    select scn_to_timestamp(741839) from dual;      
  
 
 -- 是否确保有效期内UNDO不被覆盖 
    ALTER tablespace undotbs retention GUARANTEE;    -- 确保有效期内UNDO不被覆盖
    ALTER TABLESPACE undotbs RETENTION noguarantee;  -- 可以覆盖
 
 
 -- 参数
    UNDO_MANAGEMENT = AUTO | MANUAL
    NDO_TABLESPACE  = undotbs
    UNDO_RETENTION  = 10800 
  
  
 -- 伪列说明 
    -- 该条记录操作时的SCN或时间,如果为空,表示该行记录是在查询范围外创建的
    VERSIONS_STARTSCN
    VERSIONS_STARTTIME
    -- 该条记录失效时的SCN或时间,如果为空,说明记录当前时间在当前表内不存在,或者已经被删除了,可以配合着VERSIONS_OPERATION列来看,
    -- 如果VERSIONS_OPERATION列值为D,说明该列已被删除,如果该列为空,则说明记录在这段时间无操作
    VERSIONS_ENDSCN
    VERSIONS_ENDTIME
    -- 该操作的事务ID
    VERSIONS_XID
    -- 对该行执行的操作:I表示INSERT,D表示DELETE,U表示UPDATE
    -- 提示:对于索引键的update操作,版本查询可能会将其识别成两个操作:DELETE和INSERT 
    VERSIONS_OPERATION
 
 
    select VERSIONS_STARTSCN ,VERSIONS_ENDSCN ,VERSIONS_STARTTIME ,VERSIONS_ENDTIME ,VERSIONS_XID ,VERSIONS_OPERATION
    FROM t 
    VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE;
 
 
 
 /********** FLASHBACK TABLE **********/
 
 -- 前提条件
    -- 必须启用recycle bin
    select num ,name ,value ,DISPLAY_VALUE from v$parameter where name='recyclebin';
    ALTER SYSTEM SET RECYCLEBIN = ON | OFF;
 
    -- 查询可以闪回的表
    select object_name ,original_name ,dropscn FROM RECYCLEBIN;
    SELECT * FROM User_Recyclebin;
    SHOW RECYCLEBIN;   -- 11gR2验证不成功
  
    -- 闪回表
    FLASHBACK TABLE t TO BEFORE DROP;
    -- 如果待闪回的表名已存在也可改表
    FLASHBACK TABLE t TO BEFORE DROP RENAME TO t_copy;  
  
    -- 闪回表与行相结合
    flashback table t to scn 743080;
    flashback table t to TIMESTAMP SYSDATE-10/1440;
    SQL> flashback table t to scn 743080;
    ORA-00942: table or view does not exist    --调试报错
 
 
  
 /********** FLASHBACK DATABASE **********/
 
 -- 闪回数据库
     FLASHBACK DATABASE TO SCN 743080;
     FLASHBACK DATABASE TO TIMESTAMP SYSDATE-60/1440;
  
 -- 操作步骤
    -- 1.启动数据库为MOUNT状态
    startup MOUNT FORCE;
    -- 2.闪回数据库
     FLASHBACK DATABASE TO SCN 743080;
     FLASHBACK DATABASE TO TIMESTAMP SYSDATE-10/1440;
     -- 3.打开数据库
    ALTER DATABASE OPEN RESETLOGS;  
    -- 如果以readonly打开则需recovery 
    ALTER DATABASE OPEN READ ONLY; 
    RECOVER DATABASE;
 
 
 -- 前提条件
    -- 0.ARCHIVELOG模式
    ARCHIVE LOG LIST;   -- 检查是否归档
    -- 1.必须启用flashback database和闪回区 
    select flashback_on ,force_logging from v$database;
 
 
 -- 限制条件
    0.数据库不能置为NOARCHIVELOG模式
    1.不能用flashback DATABASE作介质恢复,如恢复被删除的datafile
    2.controlfile被重建则flashback LOG失效
 
  
 -- 参数
    -- flashback log数据保留的时间,单位分钟。1440,flash recovery area的大小可设置为当前数据库大小的10%
    DB_FLASHBACK_RETENTION_TARGET     
 
 
 -- The End --

阅读(1288) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~