简要咨询咨询QQ网站导航网站搜索手机站点联系我们设为首页加入收藏 

如何找出引起ORA-1652的SQL

来源:易贤网   阅读:1090 次  日期: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)它不能获取已发生的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视图查到需要的结果。

更多信息请查看IT技术专栏

更多信息请查看数据库
点此处就本文及相关问题在本站进行非正式的简要咨询(便捷快速)】     【点此处查询各地各类考试咨询QQ号码及交流群
上一篇:在Oracle数据库中按用户名重建索引的方法
下一篇:在fedora2上安装oracle 10G的方法
易贤网手机网站地址:如何找出引起ORA-1652的SQL
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!