频道栏目
IT货架 > > 正文
闪回flashback
网友分享于:Jan 1, 1970 8:00:00 AM    来源: IT货架   

标签:des   style   blog   http   color   io   os   使用   ar   

1、flashback query(使用UNDO)查询某个scn时该表的内容
SQL > select * from t1;

        ID
- - - - - - - - - -
          1
          2

SQL > select current_scn from v$ database;

CURRENT_SCN
- - - - - - - - - - -
    10517036

SQL > update t1 set id = 11 where id = 1;

已更新 1 行。

SQL > commit;

提交完成。

SQL > select * from t1 as of scn 10517036;        // 查询之前scn时的值

        ID
- - - - - - - - - -
          1
          2
 
scn和时间戳的互相转换:
SQL > select systimestamp from dual;

SYSTIMESTAMP
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
24 - 2- 13 01. 16. 40. 854000 上午 + 08:00

SQL > select scn_to_timestamp( 10517036) from dual;

SCN_TO_TIMESTAMP( 10517036)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
24 - 2- 13 01. 12. 07.000000000 上午

SQL > select to_timestamp( ‘24-2月 -13 01.12.07.000000000 上午‘) from dual;    / / 把字符串类型转换为时间戳类型

TO_TIMESTAMP( ‘24-2月-1301.12.07.000000000上午‘)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
24 - 2- 13 01. 12. 07.000000000 上午

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

TIMESTAMP_TO_SCN(TO_TIMESTAMP( ‘24-2月-1301.12.07.000000000上午‘))
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                                          10517035

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

   MIN(SCN)
- - - - - - - - - -
   10681569


SQL > select scn_to_timestamp( 10681579) from dual;

SCN_TO_TIMESTAMP( 10681579)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
27 - 2- 13 03. 33. 58.000000000 下午

小于最早scn则无法进行运算
SQL > select scn_to_timestamp( 10681559) from dual;
select scn_to_timestamp( 10681559) from dual
        *
1 行出现错误:
ORA - 08181: 指定的编号不是有效的系统更改号
ORA - 06512: 在 "SYS.SCN_TO_TIMESTAMP", line 1
 
2、flashback table(sys用户下的表不能用这个方式,利用UNDO。而闪回表内部实际是先delete再insert)闪回表到之前某个scn的状态
SQL > select * from t12;

OBJECT_ID NAME
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     234555 aaa
          3 aaa

SQL > select current_scn from v$ database;

CURRENT_SCN
- - - - - - - - - - -
    10518096

SQL > update t12 set name = ‘bbb‘;

已更新 2行。

SQL > commit;

提交完成。

SQL > flashback table t12 to scn 10518096;
flashback table t12 to scn 10518096
                 *
1 行出现错误:
ORA - 08189: 因为未启用行移动功能, 不能闪回表(因为闪回 2个时间点,行位置可能被占用,存储位置可能发生变化)

SQL > select t12. *,rowid from t12;

 OBJECT_ID NAME                 ROWID
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     234555 bbb                  AAAXMiAAEAAAMFTAAA
          3 bbb                  AAAXMiAAEAAAMFTAAB

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

SQL > alter table t12 enable row movement;

表已更改。

SQL > flashback table t12 to scn 10518096;

闪回完成。

SQL > select t12. *,rowid from t12;

 OBJECT_ID NAME                 ROWID
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     234555 aaa                  AAAXMiAAEAAAMFTAAC
          3 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;
bubuko.com,布布扣
 
bubuko.com,布布扣
 
4、flashback transaction query(闪回事务查询,使用undo)
SQL > conn scott /tiger
已连接。
SQL > create table t1 (id number, name varchar2( 20));

表已创建。

SQL > insert into t1 values( 1, ‘aaa‘);

已创建 1 行。

SQL > insert into t1 values( 2, ‘aaa‘);

已创建 1 行。

SQL > commit;

提交完成。
此时执行了错误事务,做了update:
SQL > update t1 set name = ‘bbb‘;

已更新 2行。

SQL > commit;

提交完成。
 
查询该事务的事务id,versions_xid:
bubuko.com,布布扣
 
查询该事务的信息:
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;

表已创建。

SQL > drop table t_recycle;

表已删除。

SQL > show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                 OBJECT TYPE   DROP TIME
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
T11              BIN$ 7lppGUw4Sb +BkxnXqIaQOw = =$ 0 TABLE         2013 - 02 - 06:00: 38: 56
T11              BIN$ 3Ii282AMTjaGfNBlizJytg = =$ 0 TABLE         2013 - 02 - 06:00: 36: 56
T_RECYCLE        BIN$ 7C3WUnHsSEaw / 49R0PlbUQ = =$ 0 TABLE         2013 - 03 - 31: 17: 49: 10
以上信息来自视图 dba_recyclebin;
可以直接查询: select * from scott."BIN$7C3WUnHsSEaw/49R0PlbUQ==$0";
回收站不支持DDL DML操作,闪回需要闪回的操作:
SQL > flashback table "BIN$7C3WUnHsSEaw/49R0PlbUQ==$0" to before drop;

闪回完成。
 
删除的表上如果有索引,删除闪回后索引也会被闪回,但是索引名字已经改变
是否允许闪回drop:
bubuko.com,布布扣
 
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   627732480 bytes
Fixed Size                   1386456 bytes
Variable Size              381683752 bytes
Database Buffers           239075328 bytes
Redo Buffers                 5586944 bytes
数据库装载完毕。
SQL > archive log list
数据库日志模式            存档模式
自动存档             启用
存档终点            D:\app\arch
最早的联机日志序列      666
下一个存档日志序列    668
当前日志序列            668
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;

数据库已更改。
这时系统出现闪回日志:
bubuko.com,布布扣
闪回日志由RVWR进程写入:
bubuko.com,布布扣
闪回日志可存放的最大时间,1440分钟,24小时。这个时间不是强制的,当闪回区满时,优先删除闪回日志:
SQL > show parameter db_flashback

NAME                                  TYPE         VALUE
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
db_flashback_retention_target         integer      1440
闪回库最早可闪回的scn点:
SQL > select * from v$flashback_database_log;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBA RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------
             13243422 31 - 3- 13                  1440       104857600                        0
查看闪回状态:
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
31 - 3- 13      31 - 3- 13             8101888     7086080     4808192                         0
开始闪回数据库:
SQL > select current_scn from v$ database;

CURRENT_SCN
- - - - - - - - - - -
    13246550

SQL > drop user scott cascade;

用户已删除。

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

Total System Global Area   627732480 bytes
Fixed Size                   1386456 bytes
Variable Size              381683752 bytes
Database Buffers           239075328 bytes
Redo Buffers                 5586944 bytes
数据库装载完毕。
SQL > flashback database to scn 13246550;

闪回完成。

SQL > alter database open read only;

数据库已更改。

SQL > conn scott /tiger
已连接。
alter database open 要 resetlog
 
11g有个新的闪回表空间,不依赖undo

 

闪回flashback

标签:des   style   blog   http   color   io   os   使用   ar   

广告服务联系QQ:1134687142 | 网站地图

版权所有: IT货架- 内容来自互联网,仅供用于技术学习,请遵循相关法律法规. 京ICP备11030978号-1