--**********************
1.Flashback Query 闪回查询(Undo)
Select * From dba_users
Select * From dba_tables Where owner= 'A' --存在表TT
sqlplus a/a@testdb
Select * From tt; --**此处为临时出现的问题;报错:ORA-25153:Temporary Tablespace is Empty
Select * From Dba_temp_files; --临时表空间的文件列表为空,需要增加临时表空间文件
Alter Tablespace temp Add Tempfile 'C:\oracle\product\10.2.0\oradata\testDB\TEMP01.DBF' Size 20m Reuse; --由于该文件已经存在,加上reuse后,重新创建新文件将原来的覆盖
Select * From tt; --查询成功
ID NAME
---------- ----------
1 a
2 b
Select current_scn From v$database; --729198
Delete From tt; --删除TT表的所有数据
Commit;
--使用不完全恢复比较麻烦,这里直接演示闪回查询
Select * From tt As Of Scn 729198; --查询该SCN的TT表,实际上使用的是UNDO
Insert Into tt Select * From tt As Of Scn 729198;
Commit
Select * From tt; --删除的2条数据已经恢复成功
--**错误删除数据后恢复的方法:
a.使用dbms_logmnr对日志进行挖掘,确定错误操作的语句和执行时间
b.使用timestamp和SCN的转换,找到错误操作的SCN号
c.使用闪回查询将删除的数据恢复
2.Flashback Drop 闪回删除的表(recyclebin回收站)
SQL> show user;
USER 为 "A"
SQL> drop table tt;
SQL> show recyclebin; --TT数据不能存放在system表空间,否则无法进入回收站;另外对象不能在DMT表空间(DMT,字典管理的表空间)
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TT BIN$WcXRGpe4Rp2yAECUp7FecQ==$0 TABLE 2014-02-18:13:22:58
SQL> show parameter recyclebin; --on代表启动回收站删除时候只是更改表名,off代表删除时直接删除定义
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string On
select * from dba_recyclebin; --查看回收站的所有信息
select * from user_recyclebin; --查看回收站本用户下的信息
SQL> flashback table tt to before drop;
闪回完成。
Flashback Table tt To Before Drop t1; --闪回的时候进行重命名
--升级,切换系统,跨平台
--1.利用实体化视图日志,实现数据的同步,同步过程中产生的数据写入日志,在数据库进行切换时,只需要停很短的时间,就可以完成设备的切换
--2.流
--回收站数据的释放
表空间优先使用空余空间,不足时释放回收站中的空间,仍然不足进行扩展,扩展不成功报错
Purge Recyclebin --手动清除回收站当前用户下所有内容
Purge Tablespace users; --手动清除回收站指定表空间下所有内容
Purge Recyclebin Tablespace test User a; --手动清楚回收站test表空间a用户下的内容
3.Flashback Table(sys User)(Undo)
sqlplus a/a@testdb
Create Table t(Id Int) Tablespace a;
Insert Into t Values(1);
Commit
Insert Into t Values(2);
Commit
Select current_scn From v$database; --695332
Update t Set Id = 3
Commit
Select * From t; --id都为3
select * from t as of scn 695332; --用闪回查询可以查询到scn=695332时的表T
SQL> flashback table t to scn 695332; --闪回表语句
ORA-08189: cannot flashback the table because row movement is not enabled
Select table_name,row_movement From dba_tables Where owner='A' --row_movement NO,表示除了删除以外的DML都不允许改变数据的rowid,而闪回时可能会改变rowid
SQL> alter table t enable row movement;
SQL> flashback table t to scn 695332; --闪回成功
4.Flashback version Query闪回版本查询(Undo)
--对做过的动作版本的回放
sqlplus a/a@testdb
SQL> create table t(id int,name varchar2(10));
SQL> insert into t values(1,'a');
SQL> insert into t values(2,'b');
SQL> commit;
SQL> insert into t values(3,'c');
SQL> insert into t values(4,'d');
SQL> commit;
SQL> insert into t values(5,'e');
SQL> commit;
Select Versions_Xid, Versions_Operation, Versions_Startscn, Versions_Starttime, Versions_Endscn, Versions_Endtime, Id,
Name
From t Versions Between Scn Minvalue And Maxvalue
/*
VERSIONS_XID VERSIONS_OPERATION VERSIONS_STARTSCN VERSIONS_STARTTIME VERSIONS_ENDSCN VERSIONS_ENDTIME ID NAME
1 0100270012010000 I 755710 19-2月 -14 11.11.03 上午 5 e
2 0A001B0010010000 I 755701 19-2月 -14 11.10.57 上午 4 d
3 0A001B0010010000 I 755701 19-2月 -14 11.10.57 上午 3 c
4 04001D000C010000 I 755210 19-2月 -14 11.10.45 上午 2 b
5 04001D000C010000 I 755210 19-2月 -14 11.10.45 上午 1 a
*/
SQL> update t set name='update' where id=1;
SQL> commit;
SQL> delete from t where id = 3;
SQL> commit;
Select Versions_Xid, Versions_Operation, Versions_Startscn, Versions_Starttime, Versions_Endscn, Versions_Endtime, Id,
Name
From t Versions Between Scn Minvalue And Maxvalue
/*
VERSIONS_XID VERSIONS_OPERATION VERSIONS_STARTSCN VERSIONS_STARTTIME VERSIONS_ENDSCN VERSIONS_ENDTIME ID NAME
1 0A00190012010000 D 759962 19-2月 -14 01.09.57 下午 3 c
2 0300190060010000 U 759953 19-2月 -14 01.09.36 下午 1 update
3 0100270012010000 I 755710 19-2月 -14 11.11.03 上午 5 e
4 0A001B0010010000 I 755701 19-2月 -14 11.10.57 上午 4 d
5 0A001B0010010000 I 755701 19-2月 -14 11.10.57 上午 759962 19-2月 -14 01.09.57 下午 3 c
6 04001D000C010000 I 755210 19-2月 -14 11.10.45 上午 2 b
7 04001D000C010000 I 755210 19-2月 -14 11.10.45 上午 759953 19-2月 -14 01.09.36 下午 1 a
*/
5.Flashback Transaction Query闪回事务查询
Select * From flashback_transaction_query Where Xid = '0300190060010000' --撤销update语句的undo_sql = update "A"."T" set "NAME" = 'a' where ROWID = 'AAAC/CAAFAAAAAcAAA';
Select * From flashback_transaction_query Where Xid = '0A00190012010000' --撤销delete语句的undo_sql = insert into "A"."T"("ID","NAME") values ('3','c');
6.Flashback database闪回数据库(基于不完全恢复)
Select flashback_on From v$database --查看数据库是否支持闪回数据库 NO 代表不支持
--**开启闪回数据库 必须在归档模式 必须要使用闪回恢复区
SQL> shutdown Immediate
SQL> startup mount;
SQL> alter database flashback on; --启用闪回数据库
SQL> show parameter db_recovery --查看db_recovery_file_dest属性有值,代表使用了闪回恢复区
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
db_recovery_file_dest string C:\oracle\product\10.2.0\flash
_recovery_area
Select flashback_on From v$database --yes 开启了闪回数据库
Alter Database Open;
Select * From DBA_USERS;
Select current_scn From v$database; --765337 这个SCN时用户C还在
Drop User C Cascade; --删除用户C及相关对象,使其产生闪回日志
Select * From v$flashback_database_logfile --查询闪回日志文件信息
/* NAME LOG# THREAD# SEQUENCE# BYTES FIRST_CHANGE# FIRST_TIME
1 C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TESTDB\FLASHBACK\O1_MF_9J8JPXD6_.FLB 1 1 1 8192000 763996 2014-2-19 13:36:29*/
Select * From v$flashback_database_log --查询闪回日志汇总信息
/* OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TIME RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE
1 763855 2014-2-19 13:36:29 1440 8192000 87515136 */
OLDEST_FLASHBACK_SCN --最远能闪回到的SCN点
SQL> show parameter Flashback --最小保留flashback的时间参数 1440分钟=1天
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440
Select * From v$flashback_database_stat --查询闪回日志的数据统计信息
/* BEGIN_TIME END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE
1 2014-2-19 13:36:29 2014-2-19 14:01:38 3457024 1900544 1299456 0 */
sqlplus Sys@testdb As Sysdba
Shutdown Immediate
startup Mount
Flashback Database To Scn 765337;
SQL> select file#,checkpoint_change# from v$datafile;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 765343
2 765343
3 765343
4 765343
5 765343
--**oracle建议先以只读方式开启数据库,确定需要的数据闪回成功后再启动数据库
SQL> alter database open read only; --只读方式不能开启审计功能,即 alter system set audit_trail=none scope=spfile;
Select * From DBA_USERS; --查询到用户C已经恢复
Shutdown Immediate
startup Mount
Alter Database Open Resetlogs; --由于闪回数据库基于不完全恢复,所以需要加RESETLOGS
Select * From v$process --该进程负责生成闪回日志
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15810196/viewspace-1146682/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15810196/viewspace-1146682/