0
点赞
收藏
分享

微信扫一扫

Oracle表的删除和简单恢复


                                          Oracle表的删除和简单恢复

Oracle数据库可以看做一个独立的系统,因此,它提供了回收站功能,以防止误操作。

假设我现在安装了一个Oracle11g数据库,安装时选择了其中自带范例emp表,以下操作均在OracleSQLdevelope下操作:

1.查看表(emp表也可以自己手工建立,SQL语句见博文

Oracle表的删除和简单恢复_python

2,,删除表数据

delete from emp;  在查询表,可以看到没有内容了,只有表结构。因为,desc emp;可以看到输出为:

名称       空值 类型           
-------- -- ------------
EMPNO NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)

 还有第二种删除表数据的方法,

truncate table emp; 此时执行rollback,回退,会发现数据并没有回来,截断删除是真的删除了表数据了,delete 方法是并没有真正的删除哦,除非提交。

简单的说,truncate是delete+comit组合的效果,并且是全部表数据,delete可以后面加where选择删除列

3. 删除表结构,当然,表结构都没有了,自然表数据也没有了。

drop table emp;  删除表整体,也就是drop后rollback回退是没有用的。但Oracle系统默认是放入回收站了,此时如果查询该用户下的所有表,会看到bin打头的一个回收站表。

Oracle表的删除和简单恢复_数据库_02

当然了,如果你确定要删除这个表,那么,bin打头的表对你来说就是垃圾了,这个时候需要清除垃圾,毕竟垃圾也占磁盘空间的对吧。

如果,你是误删除了,那么,这个bin打头的表就是你的后悔药了。先看看是否开启回收站功能: show parameter bin;

Oracle表的删除和简单恢复_java_03

可以看到回收站功能是开启的,如果要关闭整个系统的回收站,需要将数据库更改状态为mount时,执行ALTER SYSTEM SET recyclebin = ON; ALTER SYSTEM SET recyclebin = OFF; 以开启或者关闭回收站功能

如果是当前会话级的回收站功能开关,则命令为:ALTER SESSION SET recyclebin = ON;ALTER SESSION SET recyclebin = OFF;(仅在当前会话生效,更改session后失效)。也就是如果在当前会话执行off,那么回收站功能关闭,drop删除表没有后悔药。

(1),使用后悔药

首先,你可能有很多份后悔药(很多表都被误删除了……),但是,有些药你并不后悔,只想要其中的某一份。那么,问题来了,假设有n个bin表,单从名字看基本都一样,你并不会知道哪个bin表对应于哪个表,怎么办?

SELECT * FROM RECYCLEBIN;  或者SELECT * FROM USER_RECYCLEBIN;可以查询到bin表原来属于哪个表,例如,

Oracle表的删除和简单恢复_python_04

这我们就可以指定BIN$uTo/4dQLfzXgUKjAFQAeBw==$0 这个表是通过删除emps这个表而得到的,是通过drop这个操作得到的。

然后,执行以下命令就可以恢复了,恢复成功会提示,flashback 成功的。

flashback table "BIN$uTo/4dQNfzXgUKjAFQAeBw==$0" to before drop; --查询到的bin表名称,当然后面可以加rename to,直接恢复的时候改名,比如:

flashback table "BIN$uTo/4dQPfzXgUKjAFQAeBw==$0" to before drop rename to abcde; 恢复的同时改名为abcde这个表。

(2),清除垃圾

全部垃圾清除:purge recyclebin; --清空回收站

清除指定垃圾:purge table bin表名;--删除指定的垃圾

 

 

 

 

 

 

 

 

 

 

 

 

举报

相关推荐

0 条评论