Oracle 資料庫hang 診斷

2021-09-23 21:47:59 字數 3559 閱讀 5793

一 什麼是資料庫hang 

1 使用者不能登入資料庫

2 資料庫不能正常工作

3 select 1 from dual 不出結果

4 不能正常完成建表操作

二 資料庫被鎖住

1  乙個或多個會話停止工作

三 如果得知資料庫hang 或者被鎖

1 測試

2 使用者抱怨

3 systemstate 或者hanganalze 操作檢視被阻塞的會話

4 乙個查詢hang 住不動

5 會話耗費了大量的cpu

6 ora-60 錯誤出現

四  上述現象可能會在以下操作之後:

1 schema 變動

2 資料庫引數變動

3 應用程式的改動

4 資料庫公升級

五  理清 issue 發生的狀況,你必須了解如下

1 受影響的使用者

2 導致問題的事件的發生的順序

3 問題是從**/如何被發現的

4 問題的表現

5 什麼正在工作

6 最希望的或者最能夠接受的結果是什麼

7 你做了什麼操作來解決這個問題

六 驗證工作 

必須對資料庫是否hang 或者lock 進行驗證 否則會導致採取錯誤的動作。也有可能是os 的效能問題導致資料庫表現為hang 住的!!

select 1 from dual;

七 收集資料

1 使用 ltom 收集資料

2 使用 osw 收集系統效能資料

3 使用 em 

八 使用hanganalyze 和systemstate 收集資料

systemstate的用法

dump程序狀態可以使用: 

alter sessions set events 'immediate trace name processstate level ';

或者使用:

oradebug setmypid

oradebug ulimit

oradebug dump processstate

當診斷資料庫掛起時,可以使用dump命令轉儲整個系統狀態:

alter sessions set events 'immediate trace name systemstate level ';

或:oradebug setmypid

oradebug ulimit

oradebug dump systemstate

如果為了獲取全面一點的資訊,可以使用level 10。

sql> oradebug setmypid

sql> oradebug unlimit

sql> oradebug dump systemstate 10

另外如果系統掛起,無法用sql*plus連線,從oracle 10g開始,可以使用sqlplus -prelim選項強制登入,然後即可進行系統狀態資訊轉儲:

sqlplus -prelim '/ as sysdba'

oradebug setmypid

oradebug unlimit;

oradebug dump systemstate 10

***********************************=

--for 單例項

sql>oradebug hanganalyze

--for rac 例項

sql>oradebug setmypid

sql>oradebug setinst all

sql>oradebug -g def hanganalyze  

注意:如果level過大的話會產生大量的跟蹤檔案並影響系統的i/o效能,oracle建議不要採用3級以上的跟蹤。

以sysdba 登入

oradebug setmypid

oradebug unlimit

oradebug -g  all hanganalyze 3

oradebug -g all dump systemstate 266

--等待2min

oradebug -g  all hanganalyze 3

oradebug -g all dump systemstate 266

預設蒐集資料的步驟如下:

1 hanhanalyze  level 3

2 systemstate level 266

3 wait 60 sec

4 hanhanalyze  level 3

5 systemstate level 266

對於單例項 trace file 檔案在 本地的user_dump_desttination 

對於rac 環境 trace file 檔案在每個節點的 backgroup_dump_destination

九 獲取v$效能資料

spool v_views.log;

/*set linesize 130

col "parameter" form. a50

col "session value" form. a30

col "instance value" form. a30

*/select

a.ksppinm  "parameter",

b.ksppstvl "session value",

c.ksppstvl "instance value"

from

x$ksppi a, x$ksppcv b, x$ksppsv c

where

a.indx = b.indx

anda.indx = c.indx

orderby1

;

select

class

, value

, name

from

v$sysstat;

select

sid, id1, id2, 

type

, lmode, request 

from

v$lock;

select

l.latch#,

n.name,

h.pid,

l.gets,

l.misses,

l.immediate_gets,

l.immediate_misses,

l.sleeps

from

v$latchname n, v$latchholder h, v$latch l

where

l.latch# = n.latch#

andl.addr = h.laddr(+);

select

* from

v$session_wait 

order

bysid;

/* repeat last query 3 times - we want to see who's repeatedly waiting*/

spool 

off;

獲取了資料之後 就是分析了!!

oralce資料庫關閉時hang住解決過程

資料庫版本10.2.0 問題描述 因需正常重啟資料庫,在用指令碼停資料庫的過程中hung住 長時間等待並無反應 先用嘗試用指令碼停資料庫,hang住之後,嘗試終止,後續sqlplus下 shutdown immediate再次嘗試關閉資料庫。後續檢視資料庫alert.log 其中有如下資訊 處理過程...

說一說 Oracle庫的Hang

有些時侯,我當然指的是非常少的情況下,我們會感覺我們的庫 hang 了,加了隱號的意思是說有時真的是hang了,有一些則不是,是由於效能的問題引起的。我遇到過幾次hang的情況,結合著網上一些文章,把可能的原因 當時我們應該做的一些操作進行了如下的總結,不對的地方大家可以發mail給我 qiuyb ...

oracle資料庫賦權 Oracle資料庫許可權

oracle資料庫許可權基本認識 一 oracle許可權 oracle系統提供三種許可權 object 物件級 system 系統級 role 角色級。許可權分類 1 系統許可權 系統規定使用者使用資料庫的許可權。系統許可權是對使用者而言 2 實體許可權 某種許可權使用者對其它使用者的表或檢視的訪問...