Oracle的闪回功能受到3个数据库结构之一的支持: 撤消数据、闪回恢复区和回收站。
撤消表空间中的撤销数据不仅支持事务回滚,也支持大多数闪回表操作。Flashback Data
Archives允许查询先前版本的表行,它在撤销表空间之外的一个或多个表空间中提供一个区域,支持的保留期比撤销表空间还长。闪回日志保存在闪回恢复区中,从而无需执行传统的还原和恢复操作,即可方便地将整个数据库回滚到过去的时间点。每个表空间中的回收站包含一个或多个版本的已删除的表和索引,如果表空间中的空间充裕,用户可以方便地将其还原。
一、各种闪回技术:
闪回数据库
闪回表、查询、事物
闪回删除
闪回数据归档
二、闪回数据库
Oracle的闪回数据库功能使用Flashback database命令将数据库返回到过去的时间或SCN,从而为执行不完全数据库恢复提供了快捷替代方法。
文件损坏了是不能使用闪回数据库的
启用闪回数据库时,会将前映像数据保存在闪回缓冲区中,然后使用恢复写入器(Recovery
Write,RVWR)后台进程,将闪回缓冲区中的前映像信息保存在闪回恢复区的闪回数据库日志中。循环地重用闪回恢复区中的日志,将数据库回搠到多久远的时间取决于闪回恢复区中的空间量以及配置的担保还原点。??????
要启用闪回数据库功能,必须设置数据库为归档模式,必须配置归档到快速恢复区.
2、配置闪回数据库
1)确保数据库是归档模式
2)配置闪回恢复区
alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';
alter system set db_recovery_file_dest_size=40G;
3) 配置保留时间
alter system set db_flashback_retention_target=2880;
4) 干净的关闭数据库并且启动到mount状态。
5) alter database flashback on; 然后打开数据库。
3、监视是否启用
select flashback_on from database;--是否启用。
或者RVWR进程(linux)
select retention_target,flashback_size ,oldest_flashback_time from v$flashback_database_log ---闪回日志的空间和可恢复的时间。
select end_time,flashback_data,db_data,redo_data from v$flashback_database_stat;---产生的数据量。
select * from v$sgastat where name=‘flashback generation buff’
4、使用闪回数据库 (rman salplus dbcontrol 都可以)
①关闭数据库
②启动到mount
③闪回数据库到某一时间点、SCN或者sequence#
④resetlog 方式打开数据库。
③代码: flashback database to timestamp to_timestamp (‘asasaasas’)
可以先 alter database open read only ;看看是否正常,如果不正确再重新恢复。
三、闪回删除
1、实现闪回 oracle drop命令实际上就是将表修改了名字。 drop table XXX purge是本意的删除。
2、使用闪回删除: flashback table emp1 to before drop;
flashback table "BIN$49nL2H4iEtngRAgAJzxnug==$0" to before drop rename to emp2;--重命名(如果已经有了)
3、管理回收站 show receybin ;
purge recyclebin
select * from dba_recyclebin;
四、闪回查询
所有的闪回都是依赖于 undo。
1)基本的闪回查询: select * from table_name as of timestamp to_timestamp(xxxxxx);
2)闪回表
先启用表移动功能,alter table xxx enable movement;
flashback table tablename1 ,tablename2等 to timestamp to_timestamp(xxxxxx);
很多种原因导致其可能闪回不成功。
3)闪回版本
伪列如下:
伪列 |
描述 |
VERSIONS_STARTSCN VERSIONS_STARTTIME |
行版本被创建时的SCN或TIMESTAMP。这个伪列标识了最初拥有这个行版本的值的时候的时间。 使用这个值为闪回表或闪回查询确定过去的目标时间。 如果这个伪列为NULL,则行版本在start之前被创建。(使用start和end确定一个时间范围) |
VERSIONS_ENDSCN VERSIONS_ENDTIME |
行版本过期的SCN或TIMESTAMP 如果为NULL,则表明行版本是在查询的时间为当前版本,或对应于删除操作的行。 |
VERSIONS_XID |
标识创建行版本的事务 |
VERSIONS_OPERATION |
事务执行的操作(I-INSERT, D-DELETE,U-UPDATE)。版本就是被插入、删除、更新的行。即插入和更新操作之后、删除操作之前的行。 对于索引键的用户更新,闪回版本查询会将一个UPDATE操作2个操作,即DELETE和INSERT。 |
-表明从2003.09.09-2003.10.25日,salary一直是10243
VERSIONS_START_TIME VERSIONS_END_TIME SALARY
------------------- ----------------- ------
09-SEP-2003 25-NOV-2003 10243
--闪回版本查询的典型应用
SELECT versions_startscn, versions_starttime, versions_endscn, versions_endtime, versions_xid, versions_operation, last_name, salary
FROM employees
VERSIONS BETWEEN TIMESTAMP
TO_TIMESTAMP('2008-12-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('2008-12-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE first_name = 'John';
4)闪回事物
待补充
5)v$undostat
五、闪回数据归档
1)闪回数据归档的过程:
1.创建闪回数据归档。
2.指定默认闪回数据归档。
3.启用闪回数据归档。
4.查看闪回数据归档数据。
1.创建测试数据:
create tablespace arch_tbs datafile '/u01/app/oracle/oradata/PROD/arch_tbs.dbf' size 100m autoextend on
maxsize 1G;
2.创建测试用户并授权:
create user archive_admin identified by archive_admin default tablespace arch_tbs;
grant dba,flashback archive administer to archive_admin;
3.创建闪回归档(设置默认的闪回归档时,需要使用sys用户)
conn archive_admin/archive_admin
create flashback archive fda1 tablespace arch_tbs quota 10m retention 1 year;
alter flashback archive fdb1 set default;
--sys用户下
create flashback archive default fda1 tablespace arch_tbs quota 10m retention 1 year;
--或者直接设置默认闪回归档(sys用户下)
4.设置表的闪回归档
alter table test_user1.emp flashback archive;
5.验证
conn test_user1/test
desc dba_flashback_archive_tables;
select table_name,archive_table_name from dba_flashback_archive_tables;
-查看与当前设置闪回归档相关的历史跟踪表
select owner,table_name,tablespace_name from dba_tables where table_name='SYS_FBA_HIST_88707';
--确定历史表的名称,所有者,及位置
在emp表上插入,更新以及删除操作,然后查看历史跟踪表内容:
可以选择更改保留时间:
ALTER FLASHBACK ARCHIVE fla1 MODIFY RETENTION 2 YEAR;
可以选择清除数据:
ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' day);
可以选择删除闪回数据归档:
DROP FLASHBACK ARCHIVE fla1;
查看闪回数据归档 :
视图名称 (DBA/USER) 说明
*_FLASHBACK_ARCHIVE 显示有关闪回数据归档的信息
*_FLASHBACK_ARCHIVE_TS 显示闪回数据归档的表空间
*_FLASHBACK_ARCHIVE_TABLES 显示有关启用了闪回归档的表的信息
可使用动态数据字典视图查看跟踪的表和闪回数据归档元数据。要访问 USER_FLASHBACK_* 视图,必须拥有表的所有权。要检查
DBA_FLASHBACK_* 视图,您需要 SYSDBA 权限。
闪回数据归档的 DDL 限制 :
对启用了闪回数据归档的表执行以下任一 DDL 语句都会产生 ORA-55610 错误: