oracle10g 釋放表空間

2021-08-31 04:21:37 字數 1861 閱讀 7111

我們都知道資料表的龐大導而致其查詢速度的降低是水到渠成的,所以我們只有將相關的資料表的資料相應的移走,但是如果使用oracle delete之後,相關的資料刪除了,但是速度沒有多大改善,憂悶了。

使用備份表再drop掉原表。的確可以解決問題。但是較麻煩,今天請教了乙個oracle高手,解決了問題。 由於oracle delete操作是不釋放表空間的,要想提高查詢速度則必須釋放表空間。

對oracle 9i而言,釋放表空間則需要重新分析表。

analyze table itemlog compute statistics; 再進行select ,感覺的確快了很多。

另一種方法:使用exp將表匯出,drop 掉表,再imp回去。

在乙個應用中如果資料量比較大,開始影響到頁面 sql 執行效率的時候,我們通常會考慮到將歷史資料搬遷到乙個歷史庫中,以此來提高當前系統的效能,但往往有時候可以發現搬遷了以後效率並沒有提公升或者反而有一定的下降。

其中乙個主要的原因就是我們在操作的時候通常都是用 delete 語句來刪除一些歷史資料,但 delete 語句是不會釋放表空間占用的資料塊,也就是說資料是刪掉了,但位置還保留著,這塊空著的表空間只能由以後再 insert 進來的時候填充。很顯然這不是我們想要的效果,我們想要的就是減少表空間,提高 sql 的執行效率。

下面說下解決的辦法,思路就是用 alter table xx move tablespace xx; 語句將表先移到乙個空閒的表空間上再移回來,網上也有人通過查 user_tables 裡面的 block 欄位來觀察 move 表空間前後的占用的塊,那個裡面只是乙個統計的結果,不能作為實際考量,因為在 move tablespace 的時候所有欄位的 rowid 都是重新建立的,沒有資料的那些塊自然也就丟掉了,再 move 回來。可以理解成類似於在其他表空間建立乙個臨時表,把當前的表刪掉重新建回來。

還有一點要注意的就是,move 的同時既然 rowid 是重新建立的,那麼該錶上的索引自然也就失效了,再 move 回來以後別忘了把索引重新再建一下,要不然 sql 會報錯無法執行。

最後別忘了分析下表。analyze table xx compute statistics;

alter table table_name move

truncate table tab_name;

如果整表資料都可以清除,建議首選truncate table table_name;

如果delete部分資料之後還再想整理表空間,一種方法使用匯入匯出重組表,另一種方法是使用create table table_name as select ...達到重組表的目的。不過第二種方法需要中轉表,相對麻煩一些。

dorp表,在重新建表

一種方法先dorp掉表,在重新建此表,表空間就會釋放

二種方法就是move表到另外乙個表空間中,然後在move回來

二、清除表中的資料

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;

Oracle 10g表轉移表空間

1.單錶轉移表空間 場景 有表user存放在表空間oldspace下,需把錶user移動到表空間newspace下 執行語句 alter table user move tablespace newspace commit 2.使用者scott下的所有表都轉移至表空間newspace下 select...

Oracle 10g 表轉移表空間

1.單錶轉移表空間 場景 有表user存放在表空間oldspace下,需把錶user 移動到表空間newspace下 執行語句 alter table user move tablespace newspace commit 2.使用者scott下的所有表都轉移至表空間newspace下 selec...

Oracle 10g臨時表空間組

oracle 10g引進了臨時表空間組 temporary tablespace group 的概念,它允許使用者在不同的會話中同時利用多個臨時表空間。1.臨時表空間組的主要特徵 n 乙個臨時表空間組必須由至少乙個臨時表空間組成,並且無明確的最大數量限制。n 如果刪除了乙個臨時表空間組的所有成員,該...