oracle 學習筆記---效能優化(5)

zhengbao_jun發表於2010-08-04

18.怎麼清理臨時段

可以使用如下辦法

<1>、 使用如下語句檢視一下認誰在用臨時段

SELECT username,sid,serial#,sql_address,machine,program,

tablespace,segtype, contents

FROM v$session se,v$sort_usage su

WHERE se.saddr=su.session_addr

 <2>、 那些正在使用臨時段的程式

SQL>Alter system kill session 'sid,serial#';

<3>、把TEMP表空間回縮一下

SQL>Alter tablespace TEMP coalesce;

還可以使用診斷事件

<1>、 確定TEMP表空間的ts#

SQL> select ts#, name FROM v$tablespace;

TS# NAME

-----------------------

0 SYSYEM

1 RBS

2 USERS

3* TEMP

...

<2>、 執行清理操作

alter session set events 'immediate trace name DROP_SEGMENTS level TS#+1'

說明:

temp表空間的TS# 為 3*, So TS#+ 1= 4,如果想清除所有表空間的臨時段,則,TS# = 2147483647

19.怎麼樣dump資料庫內部結構,如上面顯示的控制檔案的結構

常見的有

1、分析資料檔案塊,轉儲資料檔案n的塊m

alter system dump datafile n block m

2、分析日誌檔案

alter system dump logfile logfilename;

3、分析控制檔案的內容

alter session set events 'immediate trace name CONTROLF level 10'

4、分析所有資料檔案頭

alter session set events 'immediate trace name FILE_HDRS level 10'

5、分析日誌檔案頭

alter session set events 'immediate trace name REDOHDR level 10'

6、分析系統狀態,最好每10分鐘一次,做三次對比

alter session set events 'immediate trace name SYSTEMSTATE level 10'

7、分析程式狀態

alter session set events 'immediate trace name PROCESSSTATE level 10'

8、分析Library Cache的詳細情況

alter session set events 'immediate trace name library_cache level 10'

20.如何獲得所有的事件程式碼

事件程式碼範圍一般從10000 to 10999,以下列出了這個範圍的事件程式碼與資訊

SET SERVEROUTPUT ON

DECLARE

err_msg VARCHAR2(120);

BEGIN

dbms_output.enable (1000000);

FOR err_num IN 10000..10999

LOOP

err_msg := SQLERRM (-err_num);

IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN

dbms_output.put_line (err_msg);

END IF;

END LOOP;

END;

/

在Unix系統上,事件資訊放在一個文字檔案裡

$ORACLE_HOME/rdbms/mesg/oraus.msg

可以用如下指令碼檢視事件資訊

event=10000

while [ $event -ne 10999 ]

do

event=`expr $event + 1`

oerr ora $event

done

對於已經確保的/正在跟蹤的事件,可以用如下指令碼獲得

SET SERVEROUTPUT ON

DECLARE

l_level NUMBER;

BEGIN

FOR l_event IN 10000..10999

LOOP

dbms_system.read_ev (l_event,l_level);

IF l_level > 0 THEN

dbms_output.put_line ('Event '||TO_CHAR (l_event)||

' is set at level '||TO_CHAR (l_level));

END IF;

END LOOP;

END;

/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/235507/viewspace-670212/,如需轉載,請註明出處,否則將追究法律責任。

相關文章