熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

如何找出引起ORA-1652的SQL

2013-11-13 22:25:49  來源: Oracle 

  Wed Aug ::
ORA: unable to extend temp segment by in tablespace DBA_TEMP

  要解決這個問題我們首先要導致這個問題的SQL可能方法有幾種

  設置events

  alter system set events trace name errorstack level ;

  這種方法有一定局限

  )它不能獲取已發生的的錯誤信息只能對以後出現錯誤時生成一個trace文件;

  )用events不清楚會對數據庫有什麼不好的影響

  查詢V$SQL視圖

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

  這種方法的局限性是

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

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

   生成錯誤發生時的awrstatspack報表從報表中的SQL ordered by Reads部分找出SQL

  這種方法更不可靠因為

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

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

  查詢awr相關視圖

  對於G來說這種方法是最可行最准確的

  SELECT DISTINCT TO_CHAR(SUBSTR(bsql_text))
FROM sysWRH$_SQLTEXT b
WHERE bsql_id IN
(SELECT sql_id
FROM
(SELECT asql_id
FROM sysWRH$_SQLSTAT a
WHERE aparsing_schema_name NOT IN (SYS)
AND aexecutions_total >
AND adirect_writes_total >
AND aSNAP_ID IN
(SELECT SNAP_ID
FROM sysWRM$_SNAPSHOT
WHERE to_date(:: ::yyyy:mm:dd hh:mi:ss) BETWEEN begin_interval_time AND end_interval_time
)
ORDER BY adirect_writes_total/ aexecutions_total DESC
)
WHERE rownum<=
);

  基本上結果中的第一句只要不是insert /*+ append */之類的語句那麼它就極有可能是導致ORA的SQL

  如果是i用statspack也可以用類似的SQL從statspack視圖查到需要的結果



From:http://tw.wingwit.com/Article/program/Oracle/201311/19098.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.