oracle 表空間滿了排查和解決(ORA-1653: unable to extend table test by 128 in tab)

users表空間異常佔滿處理

問題描述:

日常查詢數據庫alert日誌,發現報錯信息ORA-1653: unable to extend table AXJ_REDIS.USSD_UNREPORT_FAIL by 128 in  tablespace USERS,users表空間已滿,無法擴展。

問題分析:

USERS表空間是默認用戶表空間,在創建一個用戶並沒有指定此用戶使用表空間時,該用戶所有信息都會放入到users表空間中,使用查詢表空間語句:select file_name,tablespace_name,bytes/1024/1024 "bytes MB",maxbytes/1024/1024 "maxbytes MB"   from    dba_data_files where tablespace_name='USERS';  查詢users表空間,發現已佔滿 , 使用sql:select t.TABLE_NAME,t.NUM_ROWS from all_tables t where tablespace_name='USERS' order by num_rows desc;
查詢使用USERS表空間的表,按行級降序排序,發現多個表使用USERS表空間,存在大量數據導致USER表佔滿

問題處理:

1、擴展表空間: alter datafile ‘/oracle/oradata/dbaxj/users01.dbf’ resize 30G;
2、擴展到最大30G文件無法繼續擴展,可增加數據文件:alter tablespace users  add datafile  'users02.dbf' 
 size 1024m autoextend on next 1024m maxsize 30G;
3、truncate刪除無用表釋放空間,假如未釋放,對TEST表進行收縮shrink,執行下面三個語句:
 啓用行遷移:alter table  TEST    enable row movement;
 shrink表test:alter TABLE  TEST  shrink SPACE;
 關閉行遷移:alter table  TEST  DISABLE row movement;
注:數據被刪除後(無論是 delete 還是 truncate table),數據文件大小不會縮小, Oracle “高水位”所致(可以具體瞭解),想要降低數據文件大小需降低高水位的正確做法是先降低HWM,再確定實際佔有大小,再resize數據文件,執行如下4個語句:
(1)查詢表空間文件編號:select file#, name from v$datafile;
(2)根據文件 ID 查詢這個數據文件最大數據塊(data block)的編號:select max(block_id) from dba_extents where file_id=4;
(3)計算該表空間實際佔用的空間,先查詢數據塊大小: select value from v$parameter where name='db_block_size',咱默認是8192.
(4)計算實際佔用磁盤大小: select 65673 * 8 / 1024 from dual;
(5)把數據文件大小resize到比實際佔用磁盤大小大一些就行了:
 alter database datafile '/oracle/oradata/dbaxj/users01.dbf' resize 600m;
這樣數據文件大小就變小了,節約空間
4、需要使用的表,修改表空間alter table USSD_UNREPORT_FAIL move tablespace new_tablespace,建表時需養成習慣,指定好表空間

發佈了69 篇原創文章 · 獲贊 56 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章