Oracle 11g回收站recyclebin的使用详解
Oracle 11g回收站(recyclebin)的使用是本文我们主要要介绍的内容,我们知道,Flashback是以undo segment中的内容为基础的,因此受限于undo_retenton参数,要使用flashback的特征,必须启动自动撤销表空间。
在Oracle 11g中,出现了一个新的特征,oracle flashback data archive(FDA),通过将变化的数据另外存储到创建的一个闪回归档去(flashback archive),以和undo区别开,这样可以单独设置存储策略,使其可以山回到指定时间之前的旧数据而不影响undo策略。 在Oracle 11g中,recyclebin参数发生了微小的变化.
This supported parameter was introduced in Oracle 10.2.0
Version |
Parameter Name |
Data Type |
Session Modifiable |
System Modifiable |
10.2.0 |
recyclebin |
String |
TRUE |
IMMEDIATE |
11.1.0 |
recyclebin |
String |
TRUE |
DEFERRED |
从文档上我们可以看到这个变化说明,到了11g中,这个参数在session依然可以立即修改并影响当前的session,但如果是在系统一级修改的话,那么就要加deferred参数,对当前已经连接的sesion没有影响,但新连接的session将受到影响。
Flashback不支持sys用户,system表空间下面的对象,也不能从回收站里拿到。故使用sys或是system用户登录时,show recyclebin为空。
启动闪回数据库的步骤:
1.开启归档模式:alter database archivelog;
2.配置闪回区:alter system set db_recovery_file_dest=’/../’
3.配置闪回保留时间,默认是1440minutes:alter system set db_flashback_retention_target=’2880’;
4.启动闪回数据库:
shutdown immediate;startup mount
Alter database flashback on/off;
5.执行闪回操作:
shutdown immediate;startup mount;
Flashback database to timestamp to_date(‘2001-02-03’,’yyyy-mm-dd hh24:mi:ss’);
或是:flashback database to scn 2323534;
Alter database open ready only;检查闪回时刻是否是所需的数据,如果不是,可以继续修改。
检查完毕之后:shutdown immediate;startup mount; alter database open resetlogs;resetlogs是将control file中的scn#与数据文件中的scn#同步,消除时间间隔。
V$flashback_database_log视图,可以查看闪回日志所占的空间,最早能闪回到的scn,最早能闪回到的时间点。
--闪回表提示出错误
04:01:56 SQL> flashback table t to SCN 941737;
flashback table t to SCN 941737
*
第 1 行出现错误:
ORA-08189: 因为未启用行移动功能, 不能闪回表
04:01:58 SQL> alter table t enable row movement;
表已更改。
04:02:20 SQL> flashback table t to SCN 941737;
闪回完成。
7.查看回收站:show recyclebin; 或是select * from sys.recyclebin$查 所有的回收站。
8.恢复被删除的表:flashback table t_name to before drop;如果闪回的表名与当前的表名相同,需要重命名才可以闪回。
Flashback table t_name to before drop rename to t_new;
9.闪回指定的表
查看表结构:desc “BIN$qrjyuHuVotHgQAB/AQAQ3w==$0”;
查看表的记录:select count(*) from “BIN$qrjyuHuVotHgQAB/AQAQ3w==$0”;
安装表名称恢复:flashback table “BIN$qrjyuHuVotHgQAB/AQAQ3w==$0” to before drop;
越过回收站直接删除:drop table t purge;drop user cascade; drop tablespace users including contents;
清空回收站:purge index idx_1; purge user_recyclebin; purge dba_recyclebin;
当设置db_recovery_file_dest为空的时候,也可以取消闪回区,如果已经启用flashback database;则这个方法不能取消。
查看当前的scn:select current_scn from v$database;
查看哪些对象可以利用闪回恢复区来存放:
- SQL> select file_type from v$flash_recovery_area_usage;
- FILE_TYPE
- --------------------
- CONTROL FILE
- REDO LOG
- ARCHIVED LOG
- BACKUP PIECE
- IMAGE COPY
- FLASHBACK LOG
- FOREIGN ARCHIVED LOG
- 7 rows selected.
查看闪回恢复区空间的使用情况:
- SQL> select * from v$flash_recovery_area_usage;
- FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
- -------------------- ------------------ -------------------------
- NUMBER_OF_FILES
- ---------------
- CONTROL FILE 0 0
- 0
- REDO LOG 0 0
- 0
- ARCHIVED LOG 0 0
- 0
- FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
- -------------------- ------------------ -------------------------
- NUMBER_OF_FILES
- ---------------
- BACKUP PIECE 0 0
- 0
- IMAGE COPY 0 0
- 0
- FLASHBACK LOG 0 0
- 0
- FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
- -------------------- ------------------ -------------------------
- NUMBER_OF_FILES
- ---------------
- FOREIGN ARCHIVED LOG 0 0
- 0
- 7 rows selected.
计算flash recovery area已经占用的空间:
- SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
- SUM(PERCENT_SPACE_USED)*3/100
- -----------------------------
- 0
如果flash recovery area空间不足导致db不能打开或是hang住的处理方法:Alter system set db_recovery_file_dest_size=3G scope=spfile;
关于Oracle 11g回收站(recyclebin)的使用方法就介绍这里了,希望本次的介绍能够对您有所收获!