本文讲解了如何找出引起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视图查到需要的结果