闪回flashback

扫码查看
1、flashback query(使用UNDO)查询某个scn时该表的内容

SQL> select current_scn

;

已更新 行。

;        //查询之前scn时的值

ID

scn和时间戳的互相转换:
月 ... 上午 :00

) from
dual;

SCN_TO_TIMESTAMP()
月 ...000000000 上午

SQL> select to_timestamp('24-2月 -13
01.12.07.000000000 上午') from
dual;   月 ...000000000 上午

SQL> select timestamp_to_scn(to_timestamp('24-2月 -13 01.12.07.000000000 上午')) from
dual;

TIMESTAMP_TO_SCN(TO_TIMESTAMP(

查询smon维护的最早scn
SQL> select min(scn)
from sys.smon_scn_time
;

) from
dual;

SCN_TO_TIMESTAMP()
月 ...000000000 下午

小于最早scn则无法进行运算
) from
dual;
) from
dual
        行出现错误:
ORA:
指定的编号不是有效的系统更改号
ORA: 在 "SYS.SCN_TO_TIMESTAMP",
line

 
2、flashback
table
(sys用户下的表不能用这个方式,利用UNDO。而闪回表内部实际是先delete再insert)闪回表到之前某个scn的状态
SQL> select * from t12;

OBJECT_ID NAME
----------

aaa
          aaa

SQL> select current_scn

行。

SQL> commit;

提交完成。

SQL> flashback table t12 to scn
;
flashback table t12 to scn

                 行出现错误:
ORA: 因为未启用行移动功能,
不能闪回表(因为闪回个时间点,行位置可能被占用,存储位置可能发生变化)

bbb                  AAAXMiAAEAAAMFTAAA
         
bbb                  AAAXMiAAEAAAMFTAAB

是否允许行移动,查询dba_tables表中row_movement=DISABLED|ENABLE

SQL> alter table t12
enable row movement;

表已更改。

SQL> flashback table t12 to scn
;

闪回完成。

aaa                  AAAXMiAAEAAAMFTAAC
         
aaa                  AAAXMiAAEAAAMFTAAD

 
3、flashback version
query(返回版本查询)
查询对此表做过哪些动作,versions_endscn有值,说明这个版本已经结束,数据表中已经没有该值
startscn是事务提交时的scn。startscn相同说明是一个事务中的操作。而且别绪事务已经提交才会有信息,未提交不会记录。

select
versions_startscn,versions_endscn,versions_xid,versions_operation,versions_starttime,versions_endtime,id,name 
from
scott.t1 versions between scn minvalue and maxvalue order by versions_startscn;

闪回flashback-LMLPHP

 
闪回flashback-LMLPHP
 
4、flashback transaction
query(闪回事务查询,使用undo)
SQL> conn scott/tiger
已连接。
SQL> create table t1
(id ));

表已创建。

SQL> insert into t1
,
行。

SQL>
insert into
t1 ,
行。

SQL>
commit;

提交完成。

此时执行了错误事务,做了update:
SQL> update t1 set
行。

SQL> commit;

提交完成。

 
查询该事务的事务id,versions_xid:
闪回flashback-LMLPHP
 
查询该事务的信息:
select * from flashback_transaction_query where
xid='0A00170079230000';
后面有个undo_sql,可以执行以恢复
 
5、flashback drop(system表空间的无法闪回)
10g以后drop只是改名重新放入回收站,清除数据字典
SQL> create table
t_recycle (id number) tablespace
users;

表已创建。

:00::
T11              BIN$ :00::
T_RECYCLE        BIN$ :::

以上信息来自视图dba_recyclebin;
可以直接查询:select * from scott."BIN$7C3WUnHsSEaw/49R0PlbUQ==$0";
回收站不支持DDL DML操作,闪回需要闪回的操作:
SQL> flashback table "BIN$7C3WUnHsSEaw/49R0PlbUQ==$0" to before drop;

闪回完成。

 
删除的表上如果有索引,删除闪回后索引也会被闪回,但是索引名字已经改变
是否允许闪回drop:
闪回flashback-LMLPHP
 
6、flashback database(利用不完全恢复)
SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------
NO

开启闪回数据库的2个条件:
a:开启归档
b:使用闪回区,用来存放闪回日志:
SQL> show parameter
db_recover

NAME                                 TYPE        VALUE
------------------------------------
-----------
--------------------------------
db_recovery_file_dest                string      D:\app\Lenovo\fast_recovery_area
db_recovery_file_dest_size           big
integer 10000M

 
开启闪回数据库:
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE
例程已经关闭。
SQL>
startup mount
ORACLE 例程已经启动。

Total System Global
Area   bytes
Fixed bytes
Variable
bytes
Database
Buffers           bytes
Redo
Buffers                 bytes
数据库装载完毕。
SQL> archive log
list
数据库日志模式            存档模式
自动存档             启用
存档终点            D:\app\arch
最早的联机日志序列     
下一个存档日志序列   
当前日志序列           
SQL> show parameter db_recover

NAME                                 TYPE        VALUE
------------------------------------
-----------
------------------------------
db_recovery_file_dest                string      D:\app\Lenovo\fast_recovery_area
db_recovery_file_dest_size           big
integer 10000M
SQL> alter database flashback on;

数据库已更改。

SQL> alter database
open;

数据库已更改。

这时系统出现闪回日志:
闪回flashback-LMLPHP
闪回日志由RVWR进程写入:
闪回flashback-LMLPHP
闪回日志可存放的最大时间,1440分钟,24小时。这个时间不是强制的,当闪回区满时,优先删除闪回日志:
SQL> show parameter
db_flashback

NAME                                 TYPE        VALUE
------------------------------------
-----------

闪回库最早可闪回的scn点:

SQL> select * from
v$flashback_database_log;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBA
RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE
月                        

查看闪回状态:
flashback_data db_data
redo_data单位是字节,表示从begin_time至今产生的闪回日志、数据、redo的大小,可以粗略的估算闪回需要的时间和闪回的量
SQL> select * from
v$flashback_database_stat;

BEGIN_TIME     END_TIME       FLASHBACK_DATA    DB_DATA  REDO_DATA
ESTIMATED_FLASHBACK_SIZE
--------------

     月
                                            

开始闪回数据库:

SQL> drop user scott cascade;

用户已删除。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE
例程已经关闭。
SQL>
startup mount
ORACLE 例程已经启动。

Total System Global
Area   bytes
Fixed bytes
Variable
bytes
Database
Buffers           bytes
Redo
Buffers                 bytes
数据库装载完毕。
SQL> flashback database to scn
;

闪回完成。

SQL> alter database
open read
only;

数据库已更改。

SQL> conn scott/tiger
已连接。

alter database open 要
resetlog
 
11g有个新的闪回表空间,不依赖undo
04-08 03:49
查看更多