在操作Oracle时,我们经常都会删除一个表,当删除错误后,我们希望能够恢复该表,有时也希望删除表之后能够立刻释放表的空间。下面将介绍在Oracle中表的删除、恢复和空间释放。
select object_name,original_name from user_recyclebin where original_name = 'TEMP'; OBJECT_NAME ORIGINAL_NAME ------------------------------------------------------- BIN$C1LT5U0DaV7gVAAhKENZ5A==$0 TEMPobject_name:对象在回收站中的名称;
FLASHBACK TABLE temp TO BEFORE DROP;TO BEFORE DROP表示恢复这个表及其所有依赖的对象。如果该表的名称已经被其它表使用,那么执行FLASHBACK TABLE该表时则会报错:
FLASHBACK TABLE temp TO BEFORE DROP RENAME TO temp_old;RENAME TO表示将该表恢复后重命名。如果该表已经被删除了多次,那么使用FLASHBACK TABLE恢复该表将默认恢复最后一次删除的那个,如果你想恢复之前的一个版本,你需要在回收站中查询该表:
select object_name,original_name,droptime from user_recyclebin where original_name = 'TEMP'; OBJECT_NAME ORIGINAL_NAME DROPTIME ------------------------------------------------------------------------ BIN$C1LT5U0FaV7gVAAhKENZ5A==$0 TEMP 2014-12-29:10:59:41 BIN$C1LT5U0HaV7gVAAhKENZ5A==$0 TEMP 2014-12-29:10:59:54 BIN$C1LT5U0GaV7gVAAhKENZ5A==$0 TEMP 2014-12-29:10:59:47然后可以使用那个恢复并重命名的方式依次恢复每一个。
purge table temp;需要注意你不能回滚一个purge操作,一旦对一个表执行了purge操作,该表将无法再恢复。
PURGE RECYCLEBIN;
drop table temp purge;这种方式相当于你先删除表格temp,然后在对表格执行purge操作。注意,你不能回滚一个带上PURGE的DROP TABLE操作,也不能恢复一个使用PURGE删除的表格。