Oracle中清除BIN$开头的垃圾表
oracle中删除表后会有残留,Oracle中清除BIN$开头的垃圾表的解决方案如下:
10g的新特性flashback闪回区。
当误删除某些表时,可以通过命令恢复回来:
flashback table tablename to befor drop;
查看是否开启了闪回功能:
select flashback_on from v$
如果确定某些表确实可以删除,可以使用下面的语句,就不会出现BIN$开头的表了
drop table table_
删除Bin开头的表,即已经drop但存在于回收站中的表:
查询所有此类表SQL& select * from recyclebin where type='TABLE';
用来删除回收站中所有的表SQL&
用来删除指定的表SQL& PURGE TABLE TABLE_NAME
用来闪回被删除的表SQL& FLASHBACK TABLE table_name TO BEFORE DROP;
可以在的Drop表时不产生Bin型表SQL& DROP TABLE "TableName" purge;
me TO BEFORE DROP;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。三种删除表或表记录的方式
核心提示:到三种删除表或表记录的方式TRANCATE TABLETABLE_NAME(删除记录)DELETE FROMTABLE_NAME (DELETETABLE_NAME亦可,和个人的书写习惯有关)(删除记录)DROPTABLE TABLE_NAME(删除表)1...
在Oracle操作中一般常用到三种删除表或表记录的方式
TRANCATE TABLETABLE_NAME(删除记录)
DELETE FROMTABLE_NAME
(DELETETABLE_NAME亦可,和个人的书写习惯有关)(删除记录)
TABLE_NAME(删除表)
1、Truncate是一个能够快速清空资料表内所有资料的SQL语法。并且能针对具有自动递增值的字段,做计数重置归零重新计算的作用;
2、DELETE删除所有记录后再插入新的记录,标识列随删除前的记录继续增长,而用TRUNCATE删除,标识列从初始开始增长。
TRUNCATETABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比DELETE 速度快,且使用的系统和事务日志资源少。
DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放(所以,truncate要比delete删除记录快)
TRUNCATE TABLE删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。
如果要删除表定义及其数据,请使用 DROP TABLE语句。
对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
TRUNCATE TABLE不能用于参与了索引视图的表。所以它不能激活触发器。
TRUNCATE TABLE 不能用于参与了索引视图的表。
对用TRUNCATE TABLE删除数据的表上增加数据时,要使用UPDATESTATISTICS来维护索引信息。如果有ROLLBACK语句,DELETE操作将被撤销,但TRUNCATE不会撤销总结:区别主要两个1。 Truncate是整体删除, delete是逐条删除2.truncate不写服务器log,delete写服务器log,这就是为什么truncate要快过delete所以,影响有:1、truncate 快
2、 truncate不激活 trigger
3、 truncate 重置 Identity
--------------------------------------------------------------------------------------------看一下在MySQL怎么讲的:
如果要删除表中的部分记录,只能使用DELETE语句。 DELETE FROM table1 WHERE ;
如果DELETE不加WHERE子句,那么它和TRUNCATETABLE是一样的,但它们有一点不同,那就是DELETE可以返回被删除的记录数,而TRUNCATETABLE返回的是0。
如果一个表中有自增字段,使用TRUNCATETABLE和没有WHERE子句的DELETE删除所有记录后,这个自增字段将起始值恢复成1.如果你不想这样做的话,可以在DELETE语句中加上永真的WHERE,如WHERE 1或WHERE true。 DELETE FROM table1 WHERE 1;
上面的语句在执行时将扫描每一条记录。但它并不比较,因为这个WHERE条件永远为true。这样做虽然可以保持自增的最大值,但由于它是扫描了所有的记录,因此,它的执行成本要比没有WHERE子句的DELETE大得多。
DELETE和TRUNCATETABLE的最大区别是DELETE可以通过WHERE语句选择要删除的记录。但执行得速度不快。而且还可以返回被删除的记录数。而TRUNCATETABLE无法删除指定的记录,而且不能返回被删除的记录。但它执行得非常快。
与标准的SQL语句不同,DELETE支持ORDERBY和LIMIT子句,通过这两个子句,我们可以更好地控制要删除的记录。如当我们只想删除WHERE子句过滤出来的记录的一部分,可以使用LIMIB,如果要删除后几条记录,可以通过ORDERBY和LIMIT配合使用。
假设我们要删除users表中name等于 Mike 的前6条记录。可以使用如下的DELETE语句:
DELETE FROM users WHERE name =
LIMIT 6;
一般MySQL并不确定删除的这6条记录是哪6条,为了更保险,我们可以使用ORDER BY对记录进行排序:
DELETE FROM users WHERE name =
ORDER BYid DESC LIMIT 6-------------------------------------------------------------------------------------------------------------DROP TABLE Oracle10g 回收站及彻底删除table : drop table xxpurge
drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉。这样,回收站里的表信息就可以被恢复,或彻底清除。
1.通过查询回收站user_recyclebin获取被删除的表信息,然后使用语句
flashback table to before drop[rename to ];
将回收站里的表恢复为原名称或指定新名称,表中数据不会丢失。若要彻底删除表,则使用语句:
2.清除回收站里的信息
清除指定表:
清除当前用户的回收站:
清除所有用户的回收站:purge dba_
==================================================================Connected to Oracle Database 10g Enterprise Edition Release10.2.0.1.0Connected as testSQL& select * from test1;A B C-- -- ----------11 511 1011 1013 1014 1015 1016 1017 1018 1019 1020 1111 rows selectedSQL& create table test2 as select * from test1;sTable createdSQL& select * from test2;A B C-- -- ----------11 511 1011 1013 1014 1015 1016 1017 1018 1019 1020 1111 rows selectedSQL& drop table test2;Table droppedSQL& select object_name, original_name, operation, type fromuser_
OBJECT_NAME ORIGINAL_NAME OPERATION TYPE------------------------------ ----------------------------------------- -------------------------BIN$g5jFmA/OShC6+wsWKJiv2w==$0 TEST1 DROP TABLEBIN$vQwemDg4R9mK9fYJNdYzvg==$0 TEST2 DROP TABLE
SQL& flashback table test2 to before drop rename totest3;--【to test3】将表重命名DoneSQL& select * from test3;A B C-- -- ----------11 511 1011 1013 1014 1015 1016 1017 1018 1019 1020 1111 rows selected
SQL& select * from test2;select * from test2ORA-: 表或视图不存在
--彻底删除表
SQL& drop table test3Table droppedSQL& select * from user_recyclebin where original_name = TEST3 ;
OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME CREATETIMEDROPTIME DROPSCN PARTITION_NAME CAN_UNDROP CAN_PURGE RELATEDBASE_OBJECT PURGE_OBJECT SPACE------------------------------ ----------------------------------------- ------------------------- ------------------------------------------------- ------------------- --------------------------------------- ---------- --------- ------------------ ------------ -----SQL& select * from user_
OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME CREATETIMEDROPTIME DROPSCN PARTITION_NAME CAN_UNDROP CAN_PURGE RELATEDBASE_OBJECT PURGE_OBJECT SPACE------------------------------ ----------------------------------------- ------------------------- ------------------------------------------------- ------------------- --------------------------------------- ---------- --------- ------------------ ------------ -----BIN$g5jFmA/OShC6+wsWKJiv2w==$0 TEST1 DROP TABLE TP_TEST-23:07:57:28 :07:58:51
--清除回收站里的表信息test1
SQL& purge table test1;
SQL& select * From user_
OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME CREATETIMEDROPTIME DROPSCN PARTITION_NAME CAN_UNDROP CAN_PURGE RELATEDBASE_OBJECT PURGE_OBJECT SPACE
综合整理来源:/link?url=CqL1mk4bK22ewyfWsQe_JEiqzv4Z21runMRxRfs1C5pkiKXUIYvE8eA9Vv7JH9E7ZYEU3AdFAw0j7RP1pnwyK/doc/11.html/wildwave/article/details/不小心在PLSQL中将一张表删掉了,并且都不知道自己删的是哪张表,一时大为紧张,寻思了一下找到了一种恢复误删除表的方法。
1、查看你删除的是哪张表:
&&&&&& select * from user_recyclebin where DROPTIME &' 00:00:00';
我们会看到我们删除的是ASS_REQ_LOG_STAT_BAK表,这下松了一口气,原来是它,还是张备份表。
2、那还是把它恢复过来吧:
&&&&& 我们从上条查询语句中得到一个OBJECT_NAME这是有用的,下面我们就使用它来恢复表:
&&&& flashback Table &BIN$5WCRYXHwI6/gQBKsPzBBtw==$0& to before drop
就这样,大功告成。不禁感叹Oracle的回收站还是很有用的。
3、如果是删了或修改里面的数据,可以先建立一个快表将删除修改之前状态的数据找回到这个表中:
CREATE TABLE QUICK_TABLE AS
SELECT * FROM TABLE_NAME AS OF TIMESTAMP SYSDATE-1/24 (一小时前的),减去的时间可以自己定 如:select * from TABLE_NAME AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' MINUTE)
4、关于数据库的回收站:
select * from user_recyclebin t where t.TYPE='TABLE'& 可以看到历史对数据库表、索引等的操作,进而实现闪回。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:24999次
排名:千里之外
原创:37篇
转载:26篇
(1)(2)(1)(1)(3)(1)(1)(4)(1)(7)(15)(12)(11)(1)(2)