當前位置:首頁 » 編程語言 » sql釋放表空間

sql釋放表空間

發布時間: 2022-09-14 02:58:32

Ⅰ 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 <資料庫名>

熱點內容
手機怎樣給程序加密軟體 發布:2025-01-12 06:47:11 瀏覽:824
地平線最高畫質筆記本要什麼配置才能玩 發布:2025-01-12 06:47:10 瀏覽:369
原神過主線任務腳本 發布:2025-01-12 06:34:51 瀏覽:514
醫保電子密碼在哪裡找到 發布:2025-01-12 06:34:38 瀏覽:349
安卓手機有網卻不能使用怎麼辦 發布:2025-01-12 06:25:20 瀏覽:213
arm存儲器映射 發布:2025-01-12 06:25:12 瀏覽:250
安卓系統個人字典有什麼用 發布:2025-01-12 06:13:37 瀏覽:929
geventpython安裝 發布:2025-01-12 06:13:34 瀏覽:339
放鬆解壓助睡眠直播 發布:2025-01-12 06:13:00 瀏覽:829
車載wince和安卓哪個好用 發布:2025-01-12 05:58:18 瀏覽:840