如何找出引起ORA-1652的SQL
來源:易賢網 閱讀:1179 次 日期:2014-09-17 14:45:45
溫馨提示:易賢網小編為您整理了“如何找出引起ORA-1652的SQL”,方便廣大網友查閱!

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)它不能獲取已發(fā)生的1652的錯誤信息,只能對以后出現(xiàn)1652錯誤時生成一個trace文件;

2)用events,不清楚會對數據庫有什么不好的影響。

2、查詢V$SQL視圖:

如select * from v$sql order by direct_writes/executions desc;

這種方法的局限性是:

1)因為很難知道V$SQL視圖中的SQL執(zhí)行時間,難以確認具體是那個SQL導致錯誤的

2)引起問題的SQL極有可能已經被age out了

3、 生成錯誤發(fā)生時的awr、statspack報表,從報表中的SQL ordered by Reads部分找出SQL

這種方法更不可靠,因為:

1) SQL ordered by Reads讀寫的不一定是臨時表空間

2) awr/statspack報表是根據物理讀的總量排序的,如果導致問題的SQL執(zhí)行次數少,那也是不會出現(xiàn)在這些報表中的。

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視圖查到需要的結果。

更多信息請查看IT技術專欄

更多信息請查看數據庫
易賢網手機網站地址:如何找出引起ORA-1652的SQL

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網