oracle数据库的回收站的使用

前端之家收集整理的这篇文章主要介绍了oracle数据库的回收站的使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

还好oracle 有回收站,不然这次就死翘翘了。长点姿势。

回收站(Recycle Bin)从原理上来说就是一个数据字典表,放置用户删除(drop)掉的数据库对象信息。用户进行删除操作的对象并没有被数据库删除,仍然会占用空间。除非是由于用户手工进行Purge或者因为存储空间不够而被数据库清掉。

在Oracle 10g数据库中,引入了一个回收站(Recycle Bin)的数据库对象。

回收站,顾名思义,它就是存储被删掉的东西。从原理上来说就是一个数据字典表,放置用户删除(drop)掉的数据库对象信息。用户进行删除操作的对象并没有被数据库删除,仍然会占用空间。除非是由于用户手工进行Purge或者因为存储空间不够而被数据库清掉。数据库有了这样的功能,能够减少很多不必要的麻烦。如果一个表被删除,那么与该表有关联的对象,例如索引、约束和其他依赖对象都会在前面加bin$$这个前缀。

对于oracle数据库,为了保证数据的安全性,我们需要设置好数据库的回收站功能,默认这个功能是开启的。我们可以通过以下步骤进行查看和修改

1, 查看数据库是否设置了数据库的回收站(recyclebin功能

show parameter recyclebin;
show parameter recyclebin;
sql> show parameter recyclebin;
 
NAME                                 TYPE        VALUE
------------------------------------ -----------  
recyclebin                           string      on

2, 如果这个value是on则表示已经开启的回收站功能,如果是off状态,则我们需要通过命令开启数据库的回收站功能

开启和关闭recyclebin的命令
开启reclebin命令
查看状态

sql> show parameter recyclebin;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      OFF

修改会on状态,需要注意的是要指定scope=spfile,因为这个参数是不能再内存中修改的,也有10g和11g的差别需要使用不同的参数

sql> alter system set recyclebin=on scope=spfile;
 
System altered

开启后需要重启数据库才生效

sql> shutdown

sql> startup

3, 清除回收站的数据

清空回收站里面的所有数据

sql> purge recyclebin;

清空回收站里面的具体的一个表

sql> purge table dept;

4, 数据还原功能(最重要的),开启数据库的回收站功能就是防止误删除,可以进行数据的回收

(还原是需要注意是那个用户(schema))

直接恢复被删除的BONUS表,恢复到删除时前

sql> flashback table BONUS to before drop;

这种以示恢复时重新命名

-- 重命名的方式进行数据的还原
flashback table SALGRADE to before drop  rename to SALGRADE_bak;
-- 修改数据库中的表名
alter table SALGRADE_bak rename to SALGRADE

10g一些命令

SELECT Value FROM V$parameter WHERE Name = 'recyclebin'; 
ALTER SYSTEM SET recyclebin = ON;
ALTER SYSTEM SET recyclebin = OFF; 
ALTER SESSION SET recyclebin = ON; 
ALTER SESSION SET recyclebin = OFF
-- 分别是session级别和system级别

11g相关资料

在Oracle 11g中,recyclebin参数发生了微小的变化.
This supported parameter was introduced in Oracle 10.2.0

@H_404_63@ 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将受到影响。

sql> select name,isses_modifiable,issys_modifiable from v$parameter where name='recyclebin';

NAME        ISSES_MODIFIABLE ISSYS_MODIFIABLE
----------- ---------------- ----------------
recyclebin  TRUE             DEFERRED

11g中,要修改系统一级的 recyclebin则需要加 DEFERRED 参数

可以看到,在system一级,不加DEFERRED参数是不允许修改的,但在session一级可以修改.
sql> alter system set recyclebin=off DEFERRED;
System altered

猜你在找的Oracle相关文章