oracle如何清空回收站recycle bin以及如何用回收站闪回数据-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 69112
  • 博文数量: 19
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 186
  • 用 户 组: 普通用户
  • 注册时间: 2019-09-19 15:07
个人简介

线上无小事

文章分类

全部博文(19)

文章存档

2024年(4)

2023年(1)

2022年(3)

2020年(3)

2019年(8)

我的朋友
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: oracle

2019-12-13 10:40:40

转载
   https://blog.csdn.net/joy_love_data/article/details/94331324

今天的日记解答下面几点疑问:
1.怎么查询回收站内容?
2.怎么用flashback闪回回收站内容?
3. system表空间到底有没有回收站?
4. 如果回收站有同名文件,闪回的时候先恢复谁?
5. 如果用purge/cascade命令删除objects,是否进入了回收站?
6. 如何清理回收站节省表空间?


首先我们要了解oracle回收站的本质,其实它不是真正的一个物理存在,他只是存在相应表空间结构下的一种逻辑概念。怎么说?譬如我删除了users tablespace上的一张表(没有用purge或者cascade的情况下),表并非真正就直接从数据库消失了。而是在修改了表名字继续存在users tablespace上。
来测试下:
首先,我们在example表空间创建一张名字为ttt的表,数据来源引用dba_users;
sql> create table ttt tablespace example as select * from dba_users;


table created.
然后,我们删除这张表(没有用purge或者cascade的情况下)
sql> drop table ttt;


table dropped.
怎么去回收站查找到这张被正常删掉的表呢?


=下面代码很重要,直接进回收站找内容============
sql> show recyclebin;
original name recyclebin name object type drop time


ttt bin$jcyehemvlsrguweaah/yaw==$0 table 2019-06-26:05:21:53


这样我们查到了ttt这张表,并且它已经被改名字了,虽然名字有些乱码,删除日期也看到了。
请问,数据还能被查询到吗?答案是yes。
sql> select username from “bin$jcyehemvlsrguweaah/yaw==$0”;


注意这个时候,查询的时候要用回收站被重命名的表名,并且因为乱码的原因,表名要双引号括起来====
username
sys
system
test123
t54321
joy1
hr
test11
test
user1
t321
test88
然后我们可以继续闪回flashback这种表,闪回后测试发现回收站内容清空了。
sql> flashback table ttt to before drop;


flashback complete.


sql> desc ttt;
name null? type


username not null varchar2(30)
user_id not null number


sql> show recyclebin;


测试结果显示,表闪回后,回收站内容被清空了


接着我们用sys账户创建非指定表空间的一张表(sys默认所在表空间自然是system表空间了),接着删除它,然后看其回收站是否有内容。


sql> create table bbb as select * from dba_users;


table created.


sql> select table_name,tablespace_name from dba_tables where table_name=‘bbb’;


table_name tablespace_name


bbb system


sql> create table bbb as select * from dba_users;


table created.


sql> select table_name,tablespace_name from dba_tables where table_name=‘bbb’;


table_name tablespace_name


bbb system
sql> flashback table bbb to before drop;
flashback table bbb to before drop
*
error at line 1:
ora-38305: object not in recycle bin


sql> desc bbb;
error:
ora-04043: object bbb does not exist


回收站内容一片空白,闪回提示回收站没有这表,描述也检索不到它,证明了,system表空间是不存在回收站概念的,一旦对象建立在这上面,删除就是永久删除了,闪回不回来了,所以尽可能不要将对象创建在system表空间上。


接着我们再次测试把两个同名对象删入回收站,用闪回看它的机制是什么?


sql> create table ddd tablespace example as select * from dba_users;


table created.


sql> drop table ddd;


table dropped.


sql> create table ddd tablespace example as select * from dba_tables;


table created.


sql> drop table ddd;


table dropped.


sql> show recyclebin;
original name recyclebin name object type drop time


ddd bin$jcyehenclsrguweaah/yaw==0table2019?06?26:05:50:54dddbin 0 table 2019-06-26:05:50:54ddd bin0table2019?06?26:05:50:54dddbinjcyehem/lsrguweaah/yaw==$0 table 2019-06-26:05:50:25
好的,经过我们不懈努力的创建和删除,现在example表空间的回收站有两张同名表啦。
拭目以待,如果我们闪回的话,是哪张ddd表被闪回呢?
sql> flashback table ddd to before drop;


flashback complete.


sql> desc ddd;
name null? type


owner not null varchar2(30)
table_name not null


sql> show recyclebin;
original name recyclebin name object type drop time


ddd bin$jcyehem/lsrguweaah/yaw==$0 table 2019-06-26:05:50:25


结果很显然,2019-06-26:05:50:54的ddd被闪回了,而 2019-06-26:05:50:25的ddd乖乖还躺在回收站,记住回收站同名闪回遵循last in first out规则,越新鲜越闪回。
那么又有另一个问题,我还想继续闪回另外一个同名文件怎么办呢?
sql> flashback table ddd to before drop rename to hhh;


flashback complete.


sql> select count(*) from hhh;


count(*)
    45
1
sql> show recyclebin;
答案很简单,加个rename to table_name就可以了。
接下来我们测试drop purge/cascade
sql> create user abc identified by abc123 default tablespace example;


user created.
sql> grant dba to abc;


grant succeeded.
sql> create table sss tablespace example as select * from dba_users;


table created.


sql> drop table sss purge;


table dropped.


sql> show recyclebin;
sql> conn / as sysdba
connected.
sql> drop user abc;
drop user abc
*
error at line 1:
ora-01922: cascade must be specified to drop ‘abc’


sql> drop user abc cascade;
drop user abc cascade;


user dropped.
sql> show recyclebin;
sql> show recyclebin;
sql>
====答案来了,对objects用drop…purge命令时,是不会进入回收站的,而是永久性删除,对user用drop …cascade命令时,所有对象也都全部删除了。所以purge和cascade慎用 ====。


最后一个,如何彻底情况回收站垃圾。
简单一行语句:
简单一行语句:如果是dba_recyclebin是将所有用户的回收站对象清空。
sql> purge recyclebin;


recyclebin purged.


sql> purge dba_recyclebin;
recyclebin purged.


点赞
————————————————
凯发k8官网下载客户端中心的版权声明:本文为csdn博主「袋鼠船长路飞」的原创文章,遵循 cc 4.0 by-sa 凯发k8官网下载客户端中心的版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/joy_love_data/article/details/94331324
阅读(1769) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图