⑴ sql中 drop操作是否可以回滾truncate能否釋放表空間
drop
無法回滾
truncate
截斷表,刪除表中所有數據,不寫入回滾日誌,所以無法rollback
⑵ sql中 drop操作是否可以回滾truncate能否釋放表空間
drop 無法回滾
truncate 截斷表,刪除表中所有數據,不寫入回滾日誌,所以無法rollback
⑶ 在plsql里用drop刪除表為什麼回收站沒有
確認回收站有沒有打開
SQL> show parameter recycle;
為on,就是打開的,反之就沒有打開。
第二個就是確認下當前用戶的默認表空間,如果為system表空間的話,drop table也是不會進入回收站的
⑷ DROP TABLE在刪除表時釋放表空間嗎
一、drop表
執行drop table xx 語句
drop後的表被放在回收站(user_recyclebin)里,而不是直接刪除掉。這樣,回收站里的表信息就可以被恢復,或徹底清除。
通過查詢回收站user_recyclebin獲取被刪除的表信息,然後使用語句
flashback table <user_recyclebin.object_name or user_recyclebin.original_name> to before drop [rename to <new_table_name>];
將回收站里的表恢復為原名稱或指定新名稱,表中數據不會丟失。
若要徹底刪除表,則使用語句:drop table <table_name> purge;
清除回收站里的信息
清除指定表:purge table <table_name>;
清除當前用戶的回收站:purge recyclebin;
清除所有用戶的回收站:purge dba_recyclebin;
不放入回收站,直接刪除則是:drop table xx purge;
舉例如下:
===============================================================================
SQL> select * from test1;
A B C
-- -- ----------
11 5
11 10
2 rows selected
SQL> create table test2 as select * from test1;
Table created
SQL> select * from test2;
A B C
-- -- ----------
11 5
11 10
2 rows selected
SQL> drop table test2;
Table dropped
SQL> select object_name, original_name, operation, type from user_recyclebin;
OBJECT_NAME ORIGINAL_NAME OPERATION TYPE
------------------------------ -------------------------------- --------- -------------------------
BIN$vQwemDg4R9mK9fYJNdYzvg==$0 TEST2 DROP TABLE
SQL> flashback table test2 to before drop rename to test3;--【to test3】將表重命名
Done
SQL> select * from test3;
A B C
-- -- ----------
11 5
11 10
2 rows selected
SQL> select * from test2
ORA-00942: 表或視圖不存在
--徹底刪除表
SQL> drop table test3 purge;
Table dropped
二、清除表中的數據
truncate操作 同沒有where條件的delete操作十分相似,只是把表裡的信息全部刪除,但是表依然存在。
例如:truncate table XX
Truncate不支持回滾,並且不能truncate一個帶有外鍵的表,如果要刪除首先要取消外鍵,然後再刪除。
truncate table 後,有可能表空間仍沒有釋放,可以使用如下語句:
alter table 表名稱 deallocate UNUSED KEEP 0;
注意如果不加KEEP 0的話,表空間是不會釋放的。
例如:
alter table F_MINUTE_TD_NET_FHO_B7 deallocate UNUSED KEEP 0;
或者:
TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE才能釋放表空間。
例如: truncate table test1 DROP STORAGE;
三、查詢分區表存在哪些分區:
查詢分區表的情況,可以在USER_TAB_PARTITIONS中查詢。例如:
select 'alter table '||t.table_name ||' truncate partition ' || t.partition_name from USER_TAB_PARTITIONS t where t.table_name like 'F_%'
清除指定某個分區表的分區數據:
alter table 表名稱 truncate partition 分區名稱;
四、清除分區表佔用的空間:
alter table 表名稱 DROP partition 分區名稱;
例如:
alter table F_HOUR_TD_NET_MPVOICE DROP partition P_09121913 ;
五、查詢表空間信息
可以利用如下語句查詢各表在存儲空間的使用分情況:
SELECT TABLESPACE_NAME,TO_CHAR(SUM(BYTES)/(1024*1024),'999G999D999') CNT_MB FROM DBA_EXTENTS WHERE OWNER='&OWNER' AND SEGMENT_NAME='&TABLE_NAME' AND SEGMENT_TYPE LIKE 'TABLE%' GROUP BY TABLESPACE_NAME;
可以使用如下語句,查詢存儲空間情況:
Select Tablespace_Name, Sum(bytes)/1024/1024 From Dba_Segments group By Tablespace_Name
六、查詢用戶下的表
如果你的用戶許可權不是DBA:
那你用
select * from user_tables;
可以查詢到當前用戶所擁有的表。
如果是DBA用戶:
select * from dba_tables;
⑸ sql server 2008 r2有回收站嗎drop 掉的表在不在回收站里
資料庫沒有像操作系統一樣的回收站機制。
如果備份模式為完整的話,可以嘗試從日誌中還原。不過,這不僅僅是將刪除的表恢復了。
⑹ sql server中drop怎麼用
有時候我們會需要從資料庫中清除一個表。SQL 有提供一個 DROP TABLE 的語法來讓我們清除表。 DROP TABLE 的語法是:
DROP TABLE "表名";
如果要清除在SQL CREATE 中建立的顧客表(Customer),我們就輸入:
DROP TABLE Customer;
⑺ sql語句中刪除表數據drop、truncate和delete的用法
雖然綠色資源網小編不建議大家去用命令刪除資料庫表中的東西,但是這些刪除命令總有用的著的地方。
說到刪除表數據的關鍵字,大家記得最多的可能就是delete了
然而我們做資料庫開發,讀取資料庫數據.對另外的兩兄弟用得就比較少了
現在來介紹另外兩個兄弟,都是刪除表數據的,其實也是很容易理解的
老大------drop
出沒場合:drop
table
tb
--tb表示數據表的名字,下同
絕招:刪除內容和定義,釋放空間。簡單來說就是把整個表去掉.以後要新增數據是不可能的,除非新增一個表,
例如:一個班就是一個表,學生就是表中的數據,學生的職務就是定義
drop
table
class,就是把整個班移除.學生和職務都消失
比如下面TestSchool資料庫中有兩張表[Classes]表和[Teacher]表
當執行下面代碼之後
Classes表就被清楚,一干二凈!
刪除得非常暴力,作為老大實至名歸
老二-----truncate
出沒場合:truncate
table
tb
絕招:刪除內容、釋放空間但不刪除定義。與drop不同的是,他只是清空表數據而已,他比較溫柔.
同樣也是一個班,他只去除所有的學生.班還在,職務還在,如果有新增的學生可以進去,也可以分配上職務
刪除內容很容易理解,不刪除定義也很容易理解,就是保留表的數據結構
上圖就表現了:刪除內容
執行語句之後,發現數據表的結構還在,也就是不刪除定義
至於釋放空間,看下下面兩幅圖.你們就會明白的
右圖:Id列標識列,因之前delete過行數據,所以會出現標識列不連續(體現了delete刪除是不釋放空間的)
經過truncate
table
Teacher
之後
再新增三條數據
右圖:同樣Id是標識列,發現插入數據的時候,標識列連續了(體現了truncate刪除是釋放空間)
注意:truncate
不能刪除行數據,要刪就要把表清空
老三-----delete
出沒場合:delete
table
tb
--雖然也是刪除整個表的數據,但是過程是痛苦的(系統一行一行地刪,效率較truncate低)
或
delete
table
tb
where
條件
絕招:刪除內容不刪除定義,不釋放空間。三兄弟之中最容易欺負的一個
然後關於delete的就不詳細說明了,大家都懂的
關於truncate的小小總結:
truncate
table
在功能上與不帶
WHERE
子句的
delete語句相同:二者均刪除表中的全部行。
但
truncate
比
delete速度快,且使用的系統和事務日誌資源少。
delete
語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。所以可以對delete操作進行roll
back
1、truncate
在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令Delete將被撤銷,而
truncate
則不會被撤銷。
2、truncate
是一個DDL語言,向其他所有的DDL語言一樣,他將被隱式提交,不能對
truncate
使用ROLLBACK命令。
3、truncate
將重新設置高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過
truncate
操作後的表比Delete操作後的表要快得多。
4、truncate
不能觸發任何Delete觸發器。
5、當表被清空後表和表的索引講重新設置成初始大小,而delete則不能。
6、不能清空父表
⑻ 我把資料庫直接刪除到回收站了,但是mysql顯示資料庫還有之前的資料庫,怎麼刪除
你是手動刪除的資料庫文件吧?這樣肯定不行呀,在my sql的系統庫里還有這個資料庫的信息,要刪除資料庫,你要使用drop命令,或者使用mysqladmin來執行刪除操作。
⑼ 詳解SQL中drop,delete和truncate的異同
第一:相同點:
truncate和不帶where子句的delete,以及drop
都會刪除表內的數據
第二:不同點:
1.
truncate和delete只刪除數據不刪除表的結構(定義)
drop
語句將刪除表的結構被依賴的約束(constrain)、觸發器(trigger)、索引(index);依賴於該表的存儲過程/函數將保留,但是變為
invalid
狀態。
2.
delete
語句是資料庫操作語言(dml),這個操作會放到
rollback
segement
中,事務提交之後才生效;如果有相應的trigger執行的時候將被觸發。
truncate、drop
是資料庫定義語言(ddl),操作立即生效,原數據不放到rollback
segment中,不能回滾,操作不觸發
trigger。
3.delete
語句不影響表所佔用的extent,高水線(high
watermark)保持原位置不動;
顯然drop
語句將表所佔用的空間全部釋放;
truncate
語句預設情況下見空間釋放到
minextents個
extent,除非使用reuse
storage;truncate
會將高水線復位(回到最開始)。
4.速度:一般來說:
drop>
truncate
>
delete
5.安全性:小心使用
drop
和
truncate,尤其沒有備份的時候.,否則哭都來不及。
6.使用上:想刪除部分數據行用delete,注意帶上where子句.
回滾段要足夠大。
想刪除表,當然用drop。
想保留表而將所有數據刪除,如果和事務無關,用truncate即可;如果和事務有關,或者想觸發trigger,還是用delete。
如果是整理表內部的碎片,可以用truncate跟上reuse
stroage,再重新導入/插入數據。