- 故障定位處理過程:
- 1、發現監控系統報告USERS表空間99%使用率
- 我們通過如下語句查USERS表空間有哪些對象
- select owner,segment_name,segment_type,bytes from dba_segments a where a.tablespace_name='USERS'
- ……………………
- 8 SNDFC SYS_LOB0000077141C00012$$ LOBSEGMENT 18817744896
- 17 SNDFC SYS_LOB0000094212C00003$$ LOBSEGMENT 10583277568
- 15 SNDFC SYS_LOB0000092081C00012$$ LOBSEGMENT 2824863744
- 13 SNDFC SYS_LOB0000077219C00003$$ LOBSEGMENT 2618294272
- 12 SNDFC SYS_LOB0000077219C00008$$ LOBSEGMENT 38797312
- 24 SNDFC SYS_IL0000077219C00003$$ LOBINDEX 26214400
- 19 SNDFC SYS_IL0000077141C00012$$ LOBINDEX 8388608
- 18 SNDFC SYS_LOB0000077029C00008$$ LOBSEGMENT 4194304
- 14 SNDFC SYS_LOB0000077192C00007$$ LOBSEGMENT 3145728
- 23 SNDFC SYS_IL0000077219C00008$$ LOBINDEX 131072
- 28 SNDFC SYS_IL0000094212C00003$$ LOBINDEX 131072
- 21 SNDFC SYS_IL0000077227C00008$$ LOBINDEX 65536
- 22 SNDFC SYS_IL0000077227C00004$$ LOBINDEX 65536
- 26 SNDFC SYS_IL0000092081C00012$$ LOBINDEX 65536
- 27 SNDFC SYS_IL0000094212C00008$$ LOBINDEX 65536
- 25 SNDFC SYS_IL0000077192C00007$$ LOBINDEX 65536
- 29 SNDFC SYS_IL0000077029C00008$$ LOBINDEX 65536
- 20 SNDFC SYS_IL0000077087C00005$$ LOBINDEX 65536
- 9 SNDFC SYS_LOB0000077087C00005$$ LOBSEGMENT 65536
- 16 SNDFC SYS_LOB0000094212C00008$$ LOBSEGMENT 65536
- 10 SNDFC SYS_LOB0000077227C00008$$ LOBSEGMENT 65536
- 11 SNDFC SYS_LOB0000077227C00004$$ LOBSEGMENT 65536
- 很驚奇的發現裏面竟然沒有數據表,顯然SYS_LOB0000077141C00012$$等幾個大的對象佔據了存儲空間。
- 因爲屬性是LOBSEGMENT,馬上想到是大對象的表發生了大量的數據增長。
- 於是動用如下SQL語句,查處大字段對象:
- SELECT A.TABLE_NAME,
- A.COLUMN_NAME,
- B.SEGMENT_NAME,
- B.SEGMENT_TYPE,
- B.TABLESPACE_NAME,
- B.BYTES / 1024 / 1024,
- B.BLOCKS,
- B.EXTENTS
- FROM USER_LOBS A, USER_SEGMENTS B
- WHERE A.SEGMENT_NAME = B.SEGMENT_NAME
- ORDER BY B.BYTES DESC;
- 查詢結果如下:
- TABLE_NAME COLUMN_NAME SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME B.BYTES/1024/1024
- SNDFC_EXCHANGE_LOG_INFO ERROR_TRACE SYS_LOB0000077141C00012$$ LOBSEGMENT USERS 17946
- SNDFC_SEND_CONTROL_HISTORY CONTENT SYS_LOB0000094212C00003$$ LOBSEGMENT USERS 10093
- TMP_SNDFC_EXCHANGE_LOG_INFO ERROR_TRACE SYS_LOB0000125221C00012$$ LOBSEGMENT IN_SNDFC_DATA 5857
- SNDFC_EXCHANGE_LOG_HISTORY ERROR_TRACE SYS_LOB0000092081C00012$$ LOBSEGMENT USERS 2694
- SNDFC_SEND_CONTROL CONTENT SYS_LOB0000077219C00003$$ LOBSEGMENT USERS 2497
- SNDFC_SEND_CONTROL ERR_TRACE SYS_LOB0000077219C00008$$ LOBSEGMENT USERS 37
- SNDFC_COM_RESOURCE FILE_BLOB SYS_LOB0000077029C00008$$ LOBSEGMENT USERS 4
- SNDFC_NOTICE_FILE DOC_CONTENT SYS_LOB0000077192C00007$$ LOBSEGMENT USERS 3
- BIN$pIfKdb4Sv0LgQBqsDaM1Tg==$0 ERROR_TRACE SYS_LOB0000125215C00012$$ LOBSEGMENT IN_SNDFC_DATA 0.6875
- SNDFC_AUTO_PORT_BARRIER_LOG EXCEPTION_STACK SYS_LOB0000102643C00011$$ LOBSEGMENT IN_SNDFC_DATA 0.375
- TMP_SAVE_TABLEDDL TABLE_SQL SYS_LOB0000117696C00002$$ LOBSEGMENT IN_SNDFC_DATA 0.125
- TMP_SAVE_INDEXDDL INDEX_SQL SYS_LOB0000117779C00002$$ LOBSEGMENT IN_SNDFC_DATA 0.0625
- SNDFC_SEND_CONTROL_HISTORY ERR_TRACE SYS_LOB0000094212C00008$$ LOBSEGMENT USERS 0.0625
- SNDFC_SEND_CONTROL_HIS CONTENT SYS_LOB0000077227C00004$$ LOBSEGMENT USERS 0.0625
- SNDFC_SEND_CONTROL_HIS ERR_TRACE SYS_LOB0000077227C00008$$ LOBSEGMENT USERS 0.0625
- SNDFC_ENTRY_RESOURCE FILE_BLOB SYS_LOB0000077087C00005$$ LOBSEGMENT USERS 0.0625
- BIN$pHyd9j2iK0vgQBqsDaNWjQ==$0 ERROR_TRACE SYS_LOB0000124975C00012$$ LOBSEGMENT IN_SNDFC_DATA 0.0625
- 根據以上查詢,顯然SNDFC_EXCHANGE_LOG_INFO表上的SYS_LOB0000077141C00012$$對象作用了17G的空間。
- 正巧應用值班人員反饋某業務的數據交換程序出錯,而出錯的交換表中正巧有大字段對象,再一確認就是SNDFC_EXCHANGE_LOG_INFO表。
- 查該表總記錄數和事件發生當天記錄數:
- SQL> Select Count(*) From sndfc_exchange_log_info t Where to_char(modi_date,'yyyymmdd')='20110529';
- COUNT(*)
- ----------
- 1492157
- SQL> Select Count(*) From sndfc_exchange_log_info t;
- COUNT(*)
- ----------
- 2043454
- 該表保存一個月的記錄,總記錄數量204W,但該天的記錄數量達到149W,顯然存在問題。
- 怎麼處理這149W條記錄,必須新建一張臨時表sndfc_exchange_log_info_new,然後把需要的記錄移動到該表,
- 把sndfc_exchange_log_info重命名爲sndfc_exchange_log_info_old
- 再TRUNCATE原先的sndfc_exchange_log_info_old表釋放空間,然後把sndfc_exchange_log_info_new重命名
- 爲sndfc_exchange_log_info(注意主鍵和索引等約束)。
其實表數據的刪除還是比較容易的,但是最悲劇的是我們的DATAGUARD環境磁盤非常緊缺。 爲了移動sndfc_exchange_log_info的數據,必須增大USERS表空間,而增大USERS表空間備庫相應目錄就會不足, 昨天爲了處理備庫相應目錄不足問題已經頗費周折,在此簡單回顧下。