oracle資料庫表空間不夠,想根據delete 加約束條件洗掉部分資料,但是大家都知道delete不會釋放表空間,請問有什么好的方法么?匯入匯出的感覺不太實際,一是資料太大,二是系統也在實時跑的,肯定有影響。delete操作我已經在做了,就幾百萬幾百萬的刪記錄,但是空間不釋放的。
uj5u.com熱心網友回復:
1,分批洗掉提交2,做表壓縮
3,切換日志
4,整表或按磁區洗掉,不要用delete,用truncate
uj5u.com熱心網友回復:
全天跑的系統竟然沒有剩余的空間可以用?最好的辦法是添加磁盤,新增資料檔案
uj5u.com熱心網友回復:
-- 10g 以后,可以收縮表 ,注意:在收縮完后,手動收集一下統計資訊
-- 給你寫個收縮表的例子
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as oracle@ORALAB
SQL>
SQL> create table test(id int, name char(1000)) ;
Table created
SQL> insert into test select rownum, rownum from dual connect by rownum <= 10000 ;
10000 rows inserted
SQL> -- 表的初始大小
SQL> select bytes / 1024 / 1024 from user_segments where segment_name = 'TEST' ;
BYTES/1024/1024
---------------
12
SQL> -- 洗掉資料后,表的大小
SQL> delete test where mod(id,5) > 1 ;
6000 rows deleted
SQL> select bytes / 1024 / 1024 from user_segments where segment_name = 'TEST' ;
BYTES/1024/1024
---------------
12
SQL> alter table test enable row movement ;
Table altered
SQL> alter table test shrink space ;
Table altered
SQL> -- 收縮表后,表的大小
SQL> select bytes / 1024 / 1024 from user_segments where segment_name = 'TEST' ;
BYTES/1024/1024
---------------
4.625
SQL> drop table test purge ;
Table dropped
SQL>
uj5u.com熱心網友回復:
1、增加空間2、表空間遷移
3、表壓縮
4、在生產庫上操作這些內容最好都離線業務,備份
uj5u.com熱心網友回復:
delete是不會動高水位線的 3樓給了你方法但是作為生產庫 你這種方式是不可能長久的
加盤吧
uj5u.com熱心網友回復:
這不好弄,你加磁盤算了,要不然一會要收一把碎片,太麻煩了!轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/110508.html
標籤:高級技術
