oracle闪回技术

来源:互联网 发布:sql清除两天前的数据 编辑:程序博客网 时间:2024/05/16 12:29
1、闪回数据库到之前某时间点(在使用时需要开放闪回功能)
不支持表空间删除
select name from v$database;
--看是否打开闪回功能
select flashback_on,name fromv$database;
select name from v$bgprocess wherepaddr<>'00' order by 1;


打开闪回功能
SQL> shutdownimmediat
SQL> startupmount
SQL> alter databaseflashback on;
SQL> alter databaseopen;
修改闪回时间(默认是一天1440)
SQL> alter system setdb_flashback_retention_target=2880

RMAN> backup recoveryfiles;--执行此程序,必须要有磁带
执行数据库闪回,必须是在mount,readonly状态
如果重建了控制文件,则修改控制文件以前的数据是不可以闪回的。
例子;
create table t2( a int);
insert into t2 values(1);
insert into t2 values(2);
insert into t2 values(5);
alter system switch logfile;
t2 10:35
insert into t2 values(100);
alter system switch logfile;
insert into t2 values(200);
闪回到某时间点
FLASHBACK DATABASE TO TIME =TO_DATE('2004-05-27 16:00:00','YYYY-MM-DD HH24:MI:SS');
FLASHBACK DATABASE  2  TOTIMESTAMP(SYSDATE-1/24);
查日志进程
select * from v$log;
恢复到某过程sequence为查询的sequence,THREAD
把状态置为mount状态
flashback database to sequence=58thread=1;
打开数据库
alter database open resetlogs;

2、闪回drop表,数据(普通用户都可以操作)
原理:是把放到数据库回收站的对象,数据拉回来
凡不放回收站的对象都不能闪回.
SQL>create table t1(aint);
SQL>drop tablet1;
闪回后,把删除的表,及索引都会恢复
SQL>flashback table t1to before drop;
语法:FLASHBACKTABLE TO BEFORE DROP [RENAME TO ]

可以用下面的命令或查询查看删除的表;
show recyclebin;
select * from recyclebin --whereORIGINAL_NAME='T1';
DBA的回收站
SELECT owner, original_name,object_name,
type, ts_name, droptime, related,space
FROM dba_recyclebin
WHERE can_undrop = 'YES';
用户回收站
SELECT original_name,object_name,
type, ts_name, droptime, related,space
FROM user_recyclebin
WHERE can_undrop = 'YES';

表实际不没有删除,只是改了一个名子,放到回收站了
索引名子依然没变。
a,用SYS用户删除的表不可以闪回。
conn / as sysdba
alter table cbsd.t1 move tablespacesystem;
drop table cbsd.t1;
则不可以闪回
b.索引,物化视图,删除后不可以闪回

3、闪回事务查询
alter table t1 enable rowmovement;
查询所有可以撤消的操作
SELECT versions_xid as xid,
versions_startscn,
versions_endscn,
versions_operation
FROM t1 VERSIONS between scn minvalueand maxvalue
WHERE a = 20;

撤消数据
update 3-->5 undodata
数据放在undo tablespace

sql>show parameterundo;
sql>select file_namefrom dba_data_files where tablespace_name='UNDOTBS1';
闪回数据:RVWR 闪回日志 归档日志
闪回现有表:undo tablespace
闪回删除表:表原来物理位置



转载出处:http://blog.csdn.net/aptweasel/archive/2009/02/07/3867059.aspx
0 0