如何找出引起ORA-1652的SQL?
在alert檔案中,我們可能會看到這樣的報錯資訊:
Wed Aug 20 17:16:37 2008
ORA-1652: unable to extend temp segment by 128 in tablespace DBA_TEMP
要解決這個問題,我們首先要導致這個問題的SQL,可能方法有幾種:
1、設定events
alter system set events '1652 trace name errorstack level 1';
這種方法有一定侷限:
1)它不能獲取已發生的1652的錯誤資訊,只能對以後出現1652錯誤時生成一個trace檔案;
2)用events,不清楚會對資料庫有什麼不好的影響。
2、查詢V$SQL檢視:
如select * from v$sql order by direct_writes/executions desc;
這種方法的侷限性是:
1)因為很難知道V$SQL檢視中的SQL執行時間,難以確認具體是那個SQL導致錯誤的
2)引起問題的SQL極有可能已經被age out了
3、 生成錯誤發生時的awr、statspack報表,從報表中的SQL ordered by Reads部分找出SQL
這種方法更不可靠,因為:
1) SQL ordered by Reads讀寫的不一定是臨時表空間
2) awr/statspack報表是根據物理讀的總量排序的,如果導致問題的SQL執行次數少,那也是不會出現在這些報表中的。
4、查詢awr相關檢視
對於10G來說,這種方法是最可行、最準確的。
SELECT DISTINCT TO_CHAR(SUBSTR(b.sql_text,1,4000))
FROM sys.WRH$_SQLTEXT b
WHERE b.sql_id IN
(SELECT sql_id
FROM
(SELECT a.sql_id
FROM sys.WRH$_SQLSTAT a
WHERE a.parsing_schema_name NOT IN ('SYS')
AND a.executions_total >0
AND a.direct_writes_total >0
AND a.SNAP_ID IN
(SELECT SNAP_ID
FROM sys.WRM$_SNAPSHOT
WHERE to_date('2008:08:20 17:20:08','yyyy:mm:dd hh24:mi:ss') BETWEEN begin_interval_time AND end_interval_time
)
ORDER BY a.direct_writes_total/ a.executions_total DESC
)
WHERE rownum<=10
);
基本上,結果中的第一句只要不是insert /*+ append */之類的語句,那麼它就極有可能是導致ORA-1652的SQL。
如果是9i,用statspack,也可以用類似的SQL從statspack檢視查到需要的結果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-431727/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何找出使用動態取樣的SQLSQL
- 如何找出你效能最差的SQL Server查詢SQLServer
- 查出引起等待的sql,並kill該引起等待的sqlSQL
- 如何用sql找出中間斷號的數字SQL
- 找出最耗資源的sqlSQL
- MySQL InnoDB Cluster如何定位或找出超過事務大小的SQL?MySql
- 怎麼找出解析失敗的sqlSQL
- oracle中找出最消耗資源的sqlOracleSQL
- 會引起排序的sql語句型別!排序SQL型別
- 找出Mysql查詢速度慢的SQL語句MySql
- 找出消耗CPU最高的程式對應的SQL語句SQL
- sql語句引起的CPU佔用國高SQL
- ORACLE ORA-1652的解決方法Oracle
- 檢視誰在使用找出使用SQL人的名字SQL
- SQL SERVER中找出拙劣的約束,索引,外來鍵SQLServer索引
- 利用sql語句找出表中有重複記錄的三種sql寫法SQL
- 找出沒有繫結變數的引發硬解析的SQL變數SQL
- oracle找出沒有使用繫結變數的sql語句Oracle變數SQL
- 檢視資料庫中的鎖(LOCK),找出程式及SQL資料庫SQL
- 分析WordPress中esc_sql函式引起的注入危害SQL函式
- SQL執行計劃異常引起的效能問題SQL
- SQL執行計劃異常 引起的效能問題SQL
- 差SQL引起CPU使用率100%的效能分析SQL
- 如何從大量資料中找出異常值
- 通過ERRORSTACK找出正在執行的SQL中的繫結變數值ErrorSQL變數
- TEMP表空間報ORA-1652的處理
- 如何在 Linux 中找出 CPU 佔用高的程式Linux
- oracle如何找出登入會話v$session的IP地址?Oracle會話Session
- 如何在Ubuntu上找出可用的網路介面卡Ubuntu
- SQL Server資料庫怎麼找出一個表包含的頁資訊(Page)SQLServer資料庫
- oracle 透過pid 找到sid 再找出執行sqlOracleSQL
- CREATE TABLE AS SELECT(CAST)(一)-ORA-1652AST
- ORA-1652: unable to extend temp segment errors In RACError
- 如何找出兩個文字檔案中有相同欄位的行
- 如何在 Linux 中找出記憶體消耗最大的程式Linux記憶體
- SESSION處於KILLED狀態下如何找出對應的程式Session
- glogin.sql配置不當引起sqlplus hang的假象分析SQL
- SQL*Net more data from dblink引起library cache pinSQL