首页 > 数据库 >Oracle drop table ... purge

Oracle drop table ... purge

时间:2023-06-15 10:37:33浏览次数:64  
标签:name 删除 drop purge Oracle table 回收站

https://www.cnblogs.com/hider/p/12194675.html

操作 Oracle 时,经常会删除一个表,当删除错误后,希望能够恢复该表,有时也希望删除表之后能够立刻释放表的空间。

通过 purge 的使用可以在 Oracle 中删除表、恢复表和空间释放。

drop table

当在 Oracle 中删除(drop)一个表时,数据库不会立刻释放表的空间,而是重命名这个表然后将其放入回收站,可以通过以下方式查询:

select object_name,
       original_name
from user_recyclebin
where original_name = 'TEMP'

OBJECT_NAME						ORIGINAL_NAME
-------------------------------------------------------
BIN$C1LT5U0DaV7gVAAhKENZ5A==$0	TEMP
  • object_name:对象在回收站中的名称;
  • original_name:对象的原始名称。

表放入回收站后,Oracle 不会将该表的空间给其它对象使用,表所占用的空间依然占用,除非用户手工进行 Purge 或者因为存储空间不够而被数据库清掉。如果你发现错误的删除了表,可以通过 flashback table 将表恢复。

flashback table

可以使用 flashback table 恢复已删除的表。

flashback table temp to before drop;

to before drop 表示恢复这个表及其所有依赖的对象。如果该表的名称已经被其它表使用,那么执行 flashback table 该表时则会报错:ORA-38312:original name is used by an existing object, 这时,可以在执行 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

然后可以使用那个恢复并重命名的方式依次恢复每一个。

使用 flashback table 需要注意:

  1. 数据库将从回收站恢复该表的所有索引,注意bitmap join Index不能恢复,因为该索引在表格删除后不会被放入回收站中,所以不能恢复;
  2. 数据库将恢复该表的trigger和constraint,除了指向其它表的完整性约束;
  3. 当删除一个表格时,定义在该表格上的所有物化视图日志也被删除,但不会放入回收站中,因此,物化视图日志不能随着表格被恢复;
  4. 当删除一个表格时,该表格相关的所有索引都将被放入回收站中,如果数据库空间不足,数据库将首先清除掉索引的空间,因此,在这种情况下,恢复表格将无法恢复所有的索引;
  5. 如果被删除的表格已经被 purge 了,那么将无法恢复。

如果用户在删除一个表后不会再恢复它,可以考虑使用 purge 将其彻底清除掉。

purge

purge 可以将表彻底清除,并且释放表所占用的空间。

purge table temp;
drop table table_name purge;

需要注意不能回滚一个 purge 操作,一旦对一个表执行了 purge 操作,该表将无法再恢复。

如果该表被删除了多次,purge 操作将清除最早删除的那个表,也可以清除整个回收站的内容:

purge recyclebin;

drop table ... purge

也可以将删除表格和释放空间一步完成,例如:

drop table table_name purge;

这种方式相当于先删除表格 table_name,然后在对表格执行 purge 操作。

注意,在这种情况下,不能回滚一个带上 purge 的 drop table 操作,也不能恢复一个使用 purge 删除的表格。

测试

如果在存储过程中,或者是其他代码中使用了 drop 语句删除大量表,容易在回收站中产生垃圾,DBA会投诉。

如果确定要 drop 表,则最好加上 purge,但是要慎用,因为无法回滚。

命令窗口下执行:

SQL> show parameter recycle;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_recycle                  string      
db_recycle_cache_size                big integer 0
recyclebin                           string      OFF




SQL> purge recyclebin;
 
Done -- 清空回收站


SQL> show recyclebin;
-- 查询




SQL> drop table dt;
-- 删除表  
SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
dt              BIN$2cOZCZj0Ry27btpd7ymTHg==$0 TABLE        2019-04-10:10:56:58


SQL> flashback table dt to before drop;
-- 回滚数据表

SQL> drop table dt purge;
-- 删除表并清空回收站
SQL> show recyclebin; -- 为空

参考链接1:Oracle tips:drop table和purge

参考链接2:[ORACLE]删除表的purge用法

标签:name,删除,drop,purge,Oracle,table,回收站
From: https://www.cnblogs.com/lbzwd/p/17482170.html

相关文章

  • oracle中if/else功能的实现的3种写法
    一、单个IF1、ifa=...then.........endif;2、ifa=...then......else....endif;二、多个IFifa=..then......elsifa=..then....endif;这里中间是“ELSIF”,而不是ELSEIF。这里需要特别注意https://www.cnblogs.com/yangzhilong/archi......
  • Oracle动态建表示例
    declarev_sqlvarchar2(5000);v_iscountnumber;begin--检查表是否存在selectcount(1)intov_iscountfromuser_tableswheretable_name=upper('${tableName}');--不存在执行DDL语句ifv_iscount=0then--执行建表语句v_......
  • Oracle备份状态
    colOPERATIONFORMATa20colSTATUSFORMATa20colMBYTES_PROCESSEDFORMAT999999.99selectOPERATION,STATUS,OBJECT_TYPE,MBYTES_PROCESSED,to_char(START_TIME,'yyyy-mm-ddhh24:mi:ss')ASSTART_TIME,to_char(END_TIME,'yyyy-mm-ddhh24:mi:ss�......
  • windows php7、PHPStudy(小皮)配置oracle扩展
    一、php配置oci扩展1.访问链接下载对应oracle版本的即时客户端(OracleInstantClient)https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html  2.解压下载文件,将下面两个文件放入php目录下   3.访问链接https://windows.php.net/down......
  • Oracle-日期时间
    sysdate1.获取当前时间:selectsydatefromdual;--2023-06-159:38:16selecttrunc(sysdate+1)fromdual;--明天2023-06-16通过trunc截断时间,只保留日期部分selecttrunc(sysdate-1)fromdual;--昨天selecttrunc(sysdate)+12/24fromdual;--2023-06-1512:00:00,......
  • ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效(oracle 锁表)(转载
    1、查看数据库内产生了哪些锁selectt2.username,t2.sid,t2.serial#,t2.logon_timefromv$locked_objectt1,v$sessiont2wheret1.session_id=t2.sidorderbyt2.logon_time;如:   USERNAMESIDSERIAL#LOGON_TIMElurou851241832013/7/3011:44:45知道被锁的用户l......
  • 字段修改Oracle字段可为空的技巧(oracle修改可为空)
    字段修改Oracle字段可为空的技巧(oracle修改可为空)在Oracle中,可以利用一些技巧来修改表中的字段,使其可以接受空值。首先,要创建表中的一个字段可以接受空值,我们可以在创建该字段时使用NOTNULL的SQL指令,具体指令如下:CREATETABLEtable_name(col1INTEGERNOTNULL,col2......
  • jqtreetable jquery-treeview
    jqtreetable[img]http://dl.iteye.com/upload/attachment/466717/80fc34ec-ed82-3c04-b2f4-5de688bbf990.jpg[/img]jquery-treeview[img]http://dl.iteye.com/upload/attachment/466715/3c0521cb-37e0-3fc6-8dfc-f438b48e8569.jpg[/img]......
  • mysql-主从数据一致性检查工具 pt-table-checksum
    pt-table-checksum工具介绍pt-table-checksum是PerconaToolkit的一个组件,用于检测MySQL主、从库的数据是否一致。它的原理是在主库执行基于statement的SQL语句来生成主库数据块的checksum,把相同的SQL语句传递到从库执行,并在从库上计算相同数据块的checksum,最后,比......
  • Oracle反连接HASH JOIN ANTI NA会处理驱动表连接列null值
     Oracle反连接HASHJOINANTINA会处理驱动表连接列null值 这个现象和Oracle内连接HASHJOIN/半连接HASHJOINSEMI不处理驱动表连接列null值相反。反连接中无论一下哪个结论都一样:HASHJOINANTINAHASHJOINANTISNAHASHJOINRIGHTANTINAHASHJOINRIGHTANTISN......