----闪回技术:
1)闪回删除:闪回删除的目的是防止用户错误的删除表、索引等数据库对象。
若使用drop指令删除表,该表不会从数据库中立即删除,而是保持原表的位置,但是将删除的表重新命名,并将删除的表信息存储在回收站中,回收站记录了被删表的新名字和原名字。显然此时被删除的表所占用的表空间没有被立即释放,只是数据库可以使用的潜在空间。记录在回收站中的信息会保留一段时间,直到回收站空间不足或使用purge指令删除回收站中的记录;
回收站是一个逻辑结构,不具有物理数据结构,只要删除的表信息记录在回收站中,就可以通过闪回技术恢复删除的表;
启动闪回删除:alter system set recyclebin=on scope=both;
查看回收站信息:show recyclebin或select owner,original_name,object_name,ts_name,droptime from dba_recyclebin/user_recyclebin;
恢复删除的表:flashback table xxx to before drop;
2)闪回数据库:
这种恢复是基于用户的逻辑错误,比如对表中的数据做了错误的修改、插入了大量错误数据等;
使用闪回日志以及部分归档日志来恢复;
闪回日志由oracle自动创建,并存储在闪回恢复区中,由闪回恢复区管理(空间不足时会覆盖先前的日志);
启动闪回数据库特性必须将数据库设置为归档模式;
参数DB_FLASHBACK_RETENTION_TARGET:从当前开始计算最大可以把数据库闪回到过去的时间(以分钟为单位);
启动闪回数据库:ALTER DATABASE FLASHBACK ON,也可以针对具体的用户表空间alter tablespace users flashback on;
查看闪回的最早时间:select to_char(oldest_flashback_time,'yyyy-mm-dd hh24:mi:ss') from v$flashback_database_log;
闪回恢复到某个时间点:flashback database to timestamp to_date('20140909 09:09:09','yyyy-mm-dd hh24:mi:ss');
在预先知道SCN的情况下,可以:flashback database to scn xxx;
执行闪回数据库时,需要将数据库切换到mount状态,在闪回数据库结束后,必须使用ALTER DATABASE OPEN RESETLOGS打开数据库;
----针对闪回删除以及闪回数据库可以定义两种数据库的闪回级别:
1)数据库级闪回:当误删除一个用户,或者误截断一个表时,可以采用数据库级别的闪回恢复,将整个数据库恢复到过去的某个时间点;
2)表级闪回:表级闪回可将表闪回到过去的某个时间点,或恢复到过去的某个SCN,而闪回删除闪回使用drop指令删除的表;
drop一个表时,和表相关联的其他数据库对象如触发器、索引都将被删除,一旦闪回该表时相关的数据库对象将自动恢复,但是名称不是原先的名称,而是删除后系统自动重启的名称,该名称不易阅读,需要手工修改;
闪回数据库可以恢复被删除的表,但没有闪回删除简便;
----复原点:
在闪回数据库或者闪回表操作时,往往需要一个具体的时间点或者SCN等信息,说明闪回到哪里结束,而复原点就是SCN的别名;
创建复原点:create restore point rpl(无法确保闪回数据一定成功,因为闪回空间满时闪回日志采用覆盖形式保存);
查询复原点:select name,scn,storage_size,guarantee_flashback_database from v$restore_point;
----有保证的复原点:
这种技术可以保证在快闪恢复区空间可以保证的情况下,总可以闪回到该复原点。如果快闪恢复区空间不足,则数据库关闭;
并且使用有保证的复原点与是否使用闪回日志无关,一旦使用了有保证的复原点,Oracle会自动保存自复原点之后的闪回日志,并不会删除这些日志;
创建有保证金的复原点:create restore point grpl guarantee flashback database;
----
永久删除:drop table xxx purge;drop tablesapce xxx including contents;
永久删除回收站中表:purge table xxx;
永久删除同一表空间中的回收站中的表:purge tablespace xxx;
永久删除回收站中与某个表空间相关的特定用户的表:purge tablespace xxx user scott;