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

如何找出引起ORA-1652的SQL

2013-11-13 12:36:18  來源: SQL語言 

  本文講解了如何找出引起ORA的SQL要解決這個問題首先我們要找出導致這個問題的SQL再進行處理

  在alert文件中我們可能會看到這樣的報錯信息 

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/SQL/201311/16228.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.