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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值