视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle回收站(RecycleBin)
2020-11-09 11:44:40 责编:小采
文档


我们都比较熟悉windows中的回收站,文件删除后放到回收站里还可以再复原.Oracle回收站的原理完全一样,只是实现的细节方面有些差异

我们都比较熟悉windows中的回收站,文件删除后放到回收站里还可以再复原.Oracle回收站的原理完全一样,只是实现的细节方面有些差异.另外回收站中只能回收表和相关的对象包括索引、约束、触发器、嵌套表、大的二进制对象(LOB)段和LOB索引段.从Orace 10g开始有回收站的功能.

1.回收站启动和关闭

回收站默认是开启的.不过我们可以通过参数recyclebin来关闭和开启.

如果只是针对每个session可以通过alter session set recyclebin=off; 和 alter session set recyclebin=on;来关闭和开启

如果是针对所有session可以通过修改系统参数recyclebin来实现,不过这里要注意10g和11g有点不一样,它们的参数类型不同

10g可以用:alter system set recyclebin=off; 和alter system set recyclebin=on;来关闭和开启

11g可以用:alter system set recyclebin=off deferred; 和alter system set recyclebin=on deferred;来关闭和开启

补充:我们来简单的了解下Oracle参数类型

Oracle参数信息可以通过视图v$parameter查看,其中有一列issys_modifiable表示参数类型,有immediate,false,deferred三种,其中false表示是静态参数,只要当instance重新启动时才会生效,其他两种是动态参数,immediate表示修改参数后立即生效,deferred表示修改后要等下一个session才能生效,修改时已经连接的session是不会生效的.在用alter修改参数时如果是false或immediate一般可以不写,如果是deferred则要写

10g: select ISSYS_MODIFIABLE from v$parameter where name = 'recyclebin';的结果是immediate

11g: select ISSYS_MODIFIABLE from v$parameter where name = 'recyclebin';的结果是deferred

2.查看回收站内容

select * from user_recyclebin;或select * from recyclebin;查看当前用户所drop的对象(里面有对象之前的名字和drop之后的名字)

select * from dba_recyclebin;查看所有用户drop掉的对象

其实当一个对象drop后,并且开启了回收站功能.它并没有真正被删除,实际上只是修改了一下名字,我们用select * from user_objects where type= 'TABLE'还能查到.只是它的名字有点怪,例如BIN$qAUuckGyd3TgQKjAFAFTAg==$0,它的命名规范是BIN$unique_id$version 其中BIN代表RecycleBin, unique_id是数据库中该对象的唯一标志,,26个字符长度 ,version表示该对象的版本号.

3.还原回收站内容

假如有表test被drop,drop后的object_name是BIN$qAUuckGyd3TgQKjAFAFTAg==$0

可以用flashback table "BIN$qAUuckGyd3TgQKjAFAFTAg==$0" to before drop ;(记得名字加双引号)

或者flashback table test to before drop ;来还原.不过假如drop掉一个表test,再新建一个表test,然后再drop.那么flashback table test to before drop只能还原最后被drop掉的表test.最先drop掉的表还原时会出错,因为表名不能重名.所以必须改名flashback table test to before drop rename to test2

4.清空回收站

如果一次只清空一个表,可以用PURGE table test 或PURGE table "BIN$qAUuckGyd3TgQKjAFAFTAg==$0";

如果一次清空所有的可以用PURGE recyclebin 或者PURGE dba_recyclebin

还原时是只能一次还原一个表,不能像清空一样一次还原所有表

5,注意事项

如果表是在system表空间下面则不能使用回收站的功能,不知道为啥有这啊

如果表空间快满时系统会自动的去清空回收站中一部分内容,先清空最早drop的对象

下载本文
显示全文
专题