还好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))
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原文链接:https://www.f2er.com/oracle/206908.html