专注数据库开发管理
分类: 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 --