day16——oracle闪回
2016-03-21 21:32
190 查看
闪回查询,由一个新的包DBMS_FLASH来实现。用户使用闪回查询可以及时取得误操作DML(Delete、Update、Insert)前某一时间点数据库的映像视图,用户可以利用系统时间或系统改变号(SCN:System Change Number)来指定这个只读视图,并可以针对错误进行相应的恢复措施。闪回查询功能完全依赖于自动回滚段管理(AUM),对于Drop等误操作不能恢复。
闪回的本质是利用空间来换取过去的时间,将undo信息进行整理和"归档",按照时间片进行整理闪回日志,用户闪回到相应的时间点,剩余的数据是由redo日志和归档日志文件进行前滚,因而闪回提供了to before resetlogs选项,开启闪回功能前数据库必须运行在归档模式,开启数据库闪回后将会产生rvwr进程.查看系统闪回功能SQL> select FLASHBACK_ON from v$database;(系统默认没有开闪回功能)
设置闪回SQL> shutdown immediateSQL> startup mount;SQL> alter database archivelog;(闪回必须运行在归档模式)
SQL> alter database FLASHBACK on;(闪回启动)SQL> alter database open;SQL> select FLASHBACK_ON from v$database;
查看恢复路径SQL> show parameter recoverdb_recovery_file_dest (恢复的路径)db_recovery_file_dest_size (区域里的配额)
闪回日志的位置[oracle@sq123 ~]$ cd /oracle/app/flash_recovery_area/TEST/flashback/
闪回保留时间(默认1天)SQL> show parameter flashback
============================================闪回数据库(恢复到时间点,后的数据丢失)
查看时间点SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;2012-03-12 06:36:30SQL> drop user scott cascade;(删除scott用户)
查看最早可以恢复到的时间点SQL> select to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24:mi:ss') from v$flashback_database_log;2012-03-12 05:49:59
SQL> shutdown abortSQL> startup mount
恢复到删除用户前的时间点SQL> flashback database to timestamp to_timestamp('2012-04-24 05:40:51','yyyy-mm-dd hh24:mi:ss');
SQL> alter database open resetlogs;
scott用户又可以登陆了
===================================================监视flashback database
最早可以恢复到那个时间点SQL> select to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24-mi-ss') from v$flashback_database_log;
---------------------------------使用 闪回数据库SQL> shutdown abortSQL> startup mount;
SQL> flashback database to timestamp to_timestamp('2012-03-12 02:22:22','yyyy-mm-dd hh24:mi:ss');
-----------------------------------管理 闪回
SQL> show parameter recover
更改闪回目录SQL> alter system set db_recovery_file_dest='/home/oracle/flash';
===============================flashback drop 使用
drop表时,等于把表放到回收站中(默认情况下,Oracle是将此功能开启的。)查看回收站SQL> show parameter recyclebinSQL> show recyclebin; (没有内容,sysdba的drop操作是不会送到recyclebin)
scott下SQL> create table ttttt(d int);SQL> drop table tt;SQL> commit;
scott下SQL> show recyclebin;(有数据了)或SQL> select object_name,original_name from recyclebin;
scott下SQL> flashback table tt to before drop;
-----------------------------
什么时候是闪回不回来的
SQL> create tablespace tbs_test01 datafile '/oracle/app/oradata/TEST/tbs_test01.dbf' size 10M;
scott下SQL> create table tab_aaa tablespace tbs_test01 2 as select * from emp;
SQL> drop table tab_aaa;
SQL> flashback table tab_aaa to before drop(现在还可以闪回,再次删除)
SQL> drop table tab_aaa;
创建tab_bbb表大于 tab_aaa表SQL> create table tab_bbb tablespace tbs_test01 2 as select * from emp;
SQL> insert into tab_bbb select * from tab_bbb;SQL> / (多执行几次写满表空间)闪回不了(只要这个表里有一个字节被覆盖了,那么整个表也就恢复不会来了)(或 清空回收站也不能闪回)
删除表时 不放到回收站中SQL> drop table tab_bbb purge;(purge 为不放进回收站)SQL> show recyclebin;(没有删除记录)
-----------------------------------------回收回收站SQL> purge recyclebin;SQL> show recyclebin;(没内容了)
=============================================flashback query(Flashback Query 是利用多版本读一致性的特性从UNDO 表空间读取操作前的记录数据)SQL> create table t(id int); SQL> insert into t values(11);SQL> commit;SQL> drop table t;SQL> show recyclebin;
闪回并重命名SQL> flashback table t to before drop rename to haha; SQL> select * from haha;SQL> delete from haha;SQL> commit;
SQL> show recyclebin;(没内容,undo也不能恢复)
显示当前时间SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
显示38分这个时间点上的数据SQL> select * from haha as of timestamp to_timestamp('2012-03-12 01:38:00','yyyy-mm-dd hh24:mi:ss');no rows selected(没有数据)
显示36分这个时间点上的数据SQL> select * from haha as of timestamp to_timestamp('2012-03-12 01:36:00','yyyy-mm-dd hh24:mi:ss'); ID---------- 11(有数据)
创建个新表装haha里的数据SQL> create table hehe as select * from haha as of timestamp to_timestamp('2012-03-12 01:36:00','yyyy-mm-dd hh24:mi:ss');
(前提条件是,undo表空间不能被覆盖)
来自为知笔记(Wiz)
闪回的本质是利用空间来换取过去的时间,将undo信息进行整理和"归档",按照时间片进行整理闪回日志,用户闪回到相应的时间点,剩余的数据是由redo日志和归档日志文件进行前滚,因而闪回提供了to before resetlogs选项,开启闪回功能前数据库必须运行在归档模式,开启数据库闪回后将会产生rvwr进程.查看系统闪回功能SQL> select FLASHBACK_ON from v$database;(系统默认没有开闪回功能)
设置闪回SQL> shutdown immediateSQL> startup mount;SQL> alter database archivelog;(闪回必须运行在归档模式)
SQL> alter database FLASHBACK on;(闪回启动)SQL> alter database open;SQL> select FLASHBACK_ON from v$database;
查看恢复路径SQL> show parameter recoverdb_recovery_file_dest (恢复的路径)db_recovery_file_dest_size (区域里的配额)
闪回日志的位置[oracle@sq123 ~]$ cd /oracle/app/flash_recovery_area/TEST/flashback/
闪回保留时间(默认1天)SQL> show parameter flashback
============================================闪回数据库(恢复到时间点,后的数据丢失)
查看时间点SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;2012-03-12 06:36:30SQL> drop user scott cascade;(删除scott用户)
查看最早可以恢复到的时间点SQL> select to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24:mi:ss') from v$flashback_database_log;2012-03-12 05:49:59
SQL> shutdown abortSQL> startup mount
恢复到删除用户前的时间点SQL> flashback database to timestamp to_timestamp('2012-04-24 05:40:51','yyyy-mm-dd hh24:mi:ss');
SQL> alter database open resetlogs;
scott用户又可以登陆了
===================================================监视flashback database
最早可以恢复到那个时间点SQL> select to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24-mi-ss') from v$flashback_database_log;
---------------------------------使用 闪回数据库SQL> shutdown abortSQL> startup mount;
SQL> flashback database to timestamp to_timestamp('2012-03-12 02:22:22','yyyy-mm-dd hh24:mi:ss');
-----------------------------------管理 闪回
SQL> show parameter recover
更改闪回目录SQL> alter system set db_recovery_file_dest='/home/oracle/flash';
===============================flashback drop 使用
drop表时,等于把表放到回收站中(默认情况下,Oracle是将此功能开启的。)查看回收站SQL> show parameter recyclebinSQL> show recyclebin; (没有内容,sysdba的drop操作是不会送到recyclebin)
scott下SQL> create table ttttt(d int);SQL> drop table tt;SQL> commit;
scott下SQL> show recyclebin;(有数据了)或SQL> select object_name,original_name from recyclebin;
scott下SQL> flashback table tt to before drop;
-----------------------------
什么时候是闪回不回来的
SQL> create tablespace tbs_test01 datafile '/oracle/app/oradata/TEST/tbs_test01.dbf' size 10M;
scott下SQL> create table tab_aaa tablespace tbs_test01 2 as select * from emp;
SQL> drop table tab_aaa;
SQL> flashback table tab_aaa to before drop(现在还可以闪回,再次删除)
SQL> drop table tab_aaa;
创建tab_bbb表大于 tab_aaa表SQL> create table tab_bbb tablespace tbs_test01 2 as select * from emp;
SQL> insert into tab_bbb select * from tab_bbb;SQL> / (多执行几次写满表空间)闪回不了(只要这个表里有一个字节被覆盖了,那么整个表也就恢复不会来了)(或 清空回收站也不能闪回)
删除表时 不放到回收站中SQL> drop table tab_bbb purge;(purge 为不放进回收站)SQL> show recyclebin;(没有删除记录)
-----------------------------------------回收回收站SQL> purge recyclebin;SQL> show recyclebin;(没内容了)
=============================================flashback query(Flashback Query 是利用多版本读一致性的特性从UNDO 表空间读取操作前的记录数据)SQL> create table t(id int); SQL> insert into t values(11);SQL> commit;SQL> drop table t;SQL> show recyclebin;
闪回并重命名SQL> flashback table t to before drop rename to haha; SQL> select * from haha;SQL> delete from haha;SQL> commit;
SQL> show recyclebin;(没内容,undo也不能恢复)
显示当前时间SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
显示38分这个时间点上的数据SQL> select * from haha as of timestamp to_timestamp('2012-03-12 01:38:00','yyyy-mm-dd hh24:mi:ss');no rows selected(没有数据)
显示36分这个时间点上的数据SQL> select * from haha as of timestamp to_timestamp('2012-03-12 01:36:00','yyyy-mm-dd hh24:mi:ss'); ID---------- 11(有数据)
创建个新表装haha里的数据SQL> create table hehe as select * from haha as of timestamp to_timestamp('2012-03-12 01:36:00','yyyy-mm-dd hh24:mi:ss');
(前提条件是,undo表空间不能被覆盖)
来自为知笔记(Wiz)
相关文章推荐
- day15_oracle——RMAN
- day14_oracle前14天抽查
- day14_oracle数据库备份 恢复
- day14_oracle数据库备份
- day13_oracle—批量清空表
- day13_oracle物化视图
- day13_oracle定时任务
- day13_普通表转换成分区表——oracle学习之bulk collect用法
- day12_oracle hint——SQL优化过程中常见Oracle中HINT的30个用法
- day12_oracle hint——oracle hint例子
- day12_序列——oracle主键自动增加
- 安装oracle 11g sqlplus
- day6_oracle手工建库
- day06_oracle监听+数据传输
- day05_oracle--- Excel入库四种方法
- day05_oracle分析函数
- day05_oracle各种约束示例
- day04_oracle版本升级--10.2.0.1.0升级到10.2.0.4.0
- day01_linux中与Oracle有关的内核参数详解
- day01_oracle-10G安装过程