ORACLE ORA-1652的解決方法
前言:在檢查資料庫的alert日誌,發現資料庫報了ORA-1652: unable to extend temp segment的錯誤,以下記錄的是整個處理過程:
1、檢查當前資料庫的表空間的大小,指令碼如下
select file_name,file_id,bytes/1024/1024,status,autoextensible TABLESPACE_NAME from DBA_TEMP_FILES;
2、當前資料庫的temp表空間已經設定32GB了,一般情況下如果臨時表空間在20GB左右就夠了(需要根據資料庫的表數量級作為判斷標準)
根據對系統的瞭解,初步判斷這個增長明顯是異常行為;
(如果表空間太小的話,可以通過語句增加:ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp02.dbf' SIZE 10240M AUTOEXTEND OFF;)
3、因為每次報錯都是在凌晨,所以不可能不睡覺一直跟蹤臨時表空間的使用情況,還好可以使用Oracle診斷事件跟蹤ORA-1652事件,該診斷事件對系統的效能影響很小,因為只有在發生這個錯誤的時候,系統才會寫入資訊到alert日誌中;
跟蹤的級別分為三個等級:
- 在session級別啟用資料庫的跟蹤:ALTER SESSION SET EVENTS '1652 trace name errorstack';
- 在系統級別啟用資料庫的跟蹤:ALTER SYSTEM SET EVENTS '1652 trace name errorstack';
- 把該引數寫入到spfile檔案中: ALTER SYSTEM SET EVENT = '1652 trace name errorstack' SCOPE = SPFILE;
(關於引數的詳細設定,也整理了一個文件,可以在部落格中搜尋)
對應的關閉指令碼如下:
- ALTER SESSION SET EVENTS '1652 trace name context off';
- ALTER SYSTEM SET EVENTS '1652 trace name context off';
- ALTER SYSTEM RESET EVENT SCOPE = SPFILE SID = '*';
4、第二天的時候,果然又報錯了,詳細的報錯資訊如下:
ORA-1652: unable to extend temp segment by 128 in tablespace TEMP
Errors in file '/u01/app/oracle/diag/rdbms/orcl/ORCL/trace/orcl_m000_15204728.trc:
開啟相應的報錯資訊如下:
*** 2015-02-04 00:12:07.836 |
經過以上跟蹤,終於知道了導致臨時表空間耗光的罪魁禍首的原因,接下來是對語句進行分析;
5、另外需要注意的是,以上的跟蹤出來的情況並不一定是主要原因,可能是壓垮駱駝的最後一根稻草,因為前面有一條語句用了95%的TEMP表空間,緊接著又有一條語句用了6%的TEMP表空間,這個時候系統會記錄第二條語句。但是真正的原因是前面那條使用了95%TEMP的表空間的語句;
在正常的情況下,可以監控表空間裡面的內容的佔用情況,也能分析出問題的原因,指令碼如下:
可以發現SID/SERIAL為5/1273的SESSION消耗了大量的temp表空間;
6、以上提供了整個問題的解決方法,建議大家動手試下,實驗的步驟如下:
a、建立一個大表;
b、進行索引的建立;
c、診斷事件跟蹤ORA-1652事件的開啟;
d、再次建立索引;
e、檢查報警日誌;
總結:學習就是不斷實驗和總結的一個過程,每次動手解決記錄問題的過程總是樂趣無窮;
......................................................................................................................................................................………………………………………
本文作者:JOHN,某上市公司DBA,業餘時間專注於資料庫的技術管理,從管理的角度去運用技術。
ORACLE技術部落格:ORACLE 獵人筆記 資料庫技術群:367875324 (請備註ORACLE管理 )
......................................................................................................................................................................………………………………………
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12679300/viewspace-1426763/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 臨時表空間ORA-1652問題解決
- ORACLE匯入遇到ORACLE錯誤959解決方法Oracle
- oracle資料庫CPU特別高的解決方法Oracle資料庫
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- oracle 會話(session)被鎖瞭解決方法Oracle會話Session
- Oracle 編譯儲存過程卡死解決方法Oracle編譯儲存過程
- 如何找出引起ORA-1652的SQL?SQL
- oracle 程式滿了,登陸不上資料庫的解決方法Oracle資料庫
- TabError的解決方法Error
- 【ASK_ORACLE】因process用盡導致的rac重啟的解決方法Oracle
- 1024程式設計師節/探討ORACLE環境故障的解決方法程式設計師Oracle
- 【ASK_ORACLE】Oracle表決磁碟丟失後的恢復方法Oracle
- Kettle8.2連線Oracle資料庫失敗解決方法Oracle資料庫
- oracle 11.2.0.4 DataGuard Broker配置過程中可能遇到的問題及解決方法Oracle
- dns劫持怎麼解決 dns劫持的解決方法DNS
- Oracle用資料泵匯入資料包12899的錯誤碼解決方法Oracle
- 遇到問題的解決方法
- ORA-01034: ORACLE not available的解決辦法OracleAI
- Oracle_勒索病毒解決方案Oracle
- Oracle ORA-4031解決思路Oracle
- Oracle 監聽投毒COST解決Oracle
- Oracle的TNS-12502 錯誤原因及解決Oracle
- Oracle Net Configuration Assistant failed異常的解決方案OracleAI
- undefined reference to錯誤的解決方法Undefined
- Failed to execute aapt的奇怪解決方法AIAPT
- 解決Vue中”This dependency was not found”的方法Vue
- Qt TcpSocket的掉線解決方法QTTCP
- but no encoding declared;問題的解決方法Encoding
- 金沙不給提款的解決方法
- GoldenGate表異構的解決方法Go
- 跨域的九種解決方法跨域
- pycharm不支援django的解決方法PyCharmDjango
- reCAPTCHA打不開的解決方法APT
- 解決GitHub打不開的方法Github
- vue命令無效的解決方法Vue
- JDBC Oracle executeUpdate 卡死問題解決JDBCOracle
- 解決Oracle序列跳號問題Oracle
- MSSQL Server 遷移至 ORACLE解決方案SQLServerOracle