sql釋放表空間
Ⅰ 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中 drop操作是否可以回滾truncate能否釋放表空間
drop
無法回滾
truncate
截斷表,刪除表中所有數據,不寫入回滾日誌,所以無法rollback
Ⅲ MS SQL truncate能釋放表空間嗎
MS SQL truncate table只能刪除表中的所有行或表中指定的分區,無法釋放表空間。
如需釋放,請執行DBCC SHRINKFILE命令收縮數據文件。
DBCC SHRINKFILE官方文檔
使用方式及注意事項請參閱MSDN
Ⅳ 如何釋放臨時表空間中的空間
當database重新啟動後,自動釋放,你的問題可以通過增加臨時表空間的大小解決
alter tablespace temp add tempfile 'd:\data\temp05.dbf' size 500m
如果您對我的回答有不滿意的地方,還請您繼續追問;
答題不易,互相理解,互相幫助!
Ⅳ 資料庫表空間不足,怎麼解決
以MySQL 8.0 來說,通過查看 8.0 的官方文檔得知,8.0 的臨時表空間分為會話臨時表空間和全局臨時表空間,會話臨時表空間存儲用戶創建的臨時表和當 InnoDB 配置為磁碟內部臨時表的存儲引擎時由優化器創建的內部臨時表,當會話斷開連接時,其臨時表空間將被截斷並釋放回池中;也就是說,在 8.0 中有一個專門的會話臨時表空間,當會話被殺掉後,可以回收磁碟空間;而原來的 ibtmp1 是現在的全局臨時表空間,存放的是對用戶創建的臨時表進行更改的回滾段,在 5.7 中 ibtmp1 存放的是用戶創建的臨時表和磁碟內部臨時表;
也就是在 8.0 和 5.7 中 ibtmp1 的用途發生了變化,5.7 版本臨時表的數據存放在 ibtmp1 中,在 8.0 版本中臨時表的數據存放在會話臨時表空間,如果臨時表發生更改,更改的 undo 數據存放在 ibtmp1 中;
總結:在 mysql5.7 時,殺掉會話,臨時表會釋放,但是僅僅是在 ibtmp 文件里標記一下,空間是不會釋放回操作系統的。如果要釋放空間,需要重啟資料庫;在 mysql8.0 中可以通過殺掉會話來釋放臨時表空間。
Ⅵ 如何釋放oracle臨時表空間
重新創建一個臨時表空間,把原來的默認臨時表空間drop掉(包括裡面的臨時數據文件)再重新建立
SQL> create temporary tablespace temp2
2 tempfile '/home/oracle/oracle/proct/10.2.0/oradata/hatest/temp02.pdf' size 512M reuse
3 autoextend on next 640k maxsize unlimited;
Tablespace created.
SQL> alter database default temporary tablespace temp2;
Database altered.
SQL> drop tablespace temp including contents and datafiles;
Tablespace dropped.
(注意:由於臨時表空間的數據文件比較大,所以這步可能會花費比較長的時間)
SQL> create temporary tablespace temp
2 tempfile '/home/oracle/oracle/proct/10.2.0/oradata/hatest/temp01.pdf' size 512M reuse
3 autoextend on next 640K maxsize unlimited;
Tablespace created.
SQL> alter database default temporary tablespace temp;
Database altered.
SQL> drop tablespace temp2 including contents and datafiles;
Tablespace dropped.
SQL> exit
Ⅶ 如何清理sql server 2000的臨時表空間
f object_id('tempdb..#tempTable') is not null Begin
drop table #tempTable
End
Ⅷ Oracle 刪除表中記錄 如何釋放表及表空間大小
解決方案
執行
altertablejk_testmove
或
altertablejk_testmovestorage(initial64k)
或
altertablejk_testdeallocateunused
或
altertablejk_testshrinkspace.
注意:因為alter table jk_test move 是通過消除行遷移,清除空間碎片,刪除空閑空間,實現縮小所佔的空間,但會導致此表上的索引無效(因為ROWID變了,無法找到),所以執行 move 就需要重建索引。
找到表對應的索引
selectindex_name,table_name,tablespace_name,index_type,statusfromdba_indexeswheretable_owner='SCOTT'
根據status 的值,重建無效的就行了。sql='alter index '||index_name||' rebuild'; 使用存儲過程執行,稍微安慰。
還要注意alter table move過程中會產生鎖,應該避免在業務高峰期操作!
另外說明:truncate table jk_test 會執行的更快,而且其所佔的空間也會釋放,應該是truncate 語句執行後是不會進入oracle回收站(recylebin)的緣故。如果drop 一個表加上purge 也不會進回收站(在此裡面的數據可以通過flashback找回)。
不管是delete還是truncate 相應數據文件的大小並不會改變,如果想改變數據文件所佔空間大小可執行如下語句:
alterdatabasedatafile'filename'resize8g
重定義數據文件的大小(不能小於該數據文件已用空間的大小)。
另補充一些PURGE知識
Purge操作:
1). Purge tablespace tablespace_name : 用於清空表空間的Recycle Bin
2). Purge tablespace tablespace_name user user_name: 清空指定表空間的Recycle Bin中指定用戶的對象
3). Purge recyclebin: 刪除當前用戶的Recycle Bin中的對象。
4). Purge dba_recyclebin: 刪除所有用戶的Recycle Bin中的對象,該命令要sysdba許可權
5). Drop table table_name purge:刪除對象並且不放在Recycle Bin中,即永久的刪除,不能用Flashback恢復。
6). Purge index recycle_bin_object_name: 當想釋放Recycle bin的空間,又想能恢復表時,可以通過釋放該對象的index所佔用的空間來緩解空間壓力。 因為索引是可以重建的。
二、如果某些表佔用了數據文件的最後一些塊,則需要先將該表導出或移動到其他的表空間中,然後刪除表,再進行收縮。不過如果是移動到其他的表空間,需要重建其索引。
1、
SQL>altertablet_objmovetablespacet_tbs1;---移動表到其它表空間
也可以直接使用exp和imp來進行
2、
SQL>alterowner.index_namerebuild;--重建索引
3、刪除原來的表空間
Ⅸ sql中 drop操作是否可以回滾truncate能否釋放表空間
drop 無法回滾
truncate 截斷表,刪除表中所有數據,不寫入回滾日誌,所以無法rollback
Ⅹ 如何釋放表空間佔用的磁碟空間,表空間不能刪除。已將表空間中的用戶nc20121031 drop掉了。
刪除表,並不會自動釋放所佔用的磁碟空間。收縮資料庫後,才會釋放磁碟空間。
方法一:
在SQL Server Management Studio的對象管理器(Object Explorer)里右擊需要收縮的數據,在彈出的菜單中選擇 任務(Tasks)-> 收縮 (Shrink)-> 資料庫(Database),按照向導,點「確定」就會執行資料庫收縮。
方法二:
執行如下腳本
DBCC SHRINKDATABASE <資料庫名>