sqlplus登錄hang住

問題描述

PLSQL無法登錄,普通用戶使用sqlplus登錄hang住,只能通過sys用戶登錄

一、分析

1.會話分析

set linesize 600;
col sid format a500;
col username format a20;
col event format a60;

SQL> select sid,username,event,p1,p2,p3 from v$session where status='ACTIVE' and username is not null;

   SID USERNAME     EVENT                                    P1     P2     P3
---------- -------------------- ------------------------------------------------------------ ---------- ---------- ----------
########## MASK         buffer busy waits                            44       3578      1
########## DBSNMP       buffer busy waits                            44       3578      1
########## SYSMAN       buffer busy waits                            44       3578      1
########## SYSMAN       log file switch (checkpoint incomplete)                   0      0      0
########## SYSMAN       log file switch (checkpoint incomplete)                   0      0      0
########## MASK         buffer busy waits                            44       3578      1
########## SYSMAN       buffer busy waits                            44       3578      1
########## MASK         buffer busy waits                            44       3578      1
########## SYSMAN       buffer busy waits                            44       3578      1
########## SYSTEM       buffer busy waits                            44       3578      1
########## SYSMAN       buffer busy waits                            44       3578      1

2.hang analyze介紹

通常除了systemstate dump,最好同時生成hang analyze來直觀地瞭解數據庫進程間的等待關係。

2.1 單實例
$sqlplus / as sysdba
或者
$sqlplus -prelim / as sysdba <==當數據庫已經很慢或者hang到無法連接

SQL>alter session set tracefile_identifier='mytrace';
SQL>oradebug setmypid
SQL>oradebug unlimit;
SQL>oradebug dump hanganalyze 3
等1~2分鐘
SQL>oradebug dump hanganalyze 3
等1~2分鐘
SQL>oradebug dump hanganalyze 3
SQL>oradebug tracefile_name;
SQL>oradebug close_trace
SQL> alter session set tracefile_identifier='mytrace';

Session altered.

SQL> oradebug setmypid
Statement processed.
SQL> oradebug unlimit;
Statement processed.
SQL> oradebug dump hanganalyze 3
Statement processed.
SQL> oradebug dump hanganalyze 3
Statement processed.
SQL> oradebug dump hanganalyze 3
Statement processed.
SQL> oradebug tracefile_name;
/u01/app/oracle/diag/rdbms/s***2/s***2/trace/s***2_ora_23481_mytrace.trc
SQL> oradebug close_trace
Statement processed.
SQL> exit  

截圖:

[2275]/1/2276/13241/0xb0149aa98/13053/LEAF_NW/

該行表示sid,serial#爲2276,13241會話持有鎖 數據庫實例編號 會話sid 會話serial# 會話的地址saddr 會話對應的操作系統ID 表明會話是否等待 如有值,表明是持鎖會話的CHAIN編號,否則爲空
[2275]/1/2276/13241/0xb0149aa98/13053/LEAF_NW/
這裏寫圖片描述
trace文件分析參考鏈接:http://blog.itpub.net/9240380/viewspace-1823479/

3.查看會話

3.1查看對應的sid和serial會話信息
select status from v$session where sid=2276 and serial#=13241;

這裏寫圖片描述

3.2查看長時間持有latch的SQL語句
SELECT s.sql_hash_value,s.sql_id, l.name
  FROM V$SESSION s, V$LATCHHOLDER l
WHERE s.sid = l.sid;
3.3查看指定sql_id對應的SQL語句
select sql_fulltext from v$sqlarea where sql_id='4ducr8st4ruas';
3.4查看日誌組信息
select * from v$log;

從下圖可以發現非current狀態的日誌組均爲active狀態,懷疑日誌文件太小
這裏寫圖片描述

二、處理

1.增加日誌組

ALTER DATABASE ADD LOGFILE GROUP 4('/u01/app/oracle/oradata/s***2/redo04.log') SIZE 1024M;
ALTER DATABASE ADD LOGFILE GROUP 5('/u01/app/oracle/oradata/s***2/redo05.log') SIZE 1024M;
ALTER DATABASE ADD LOGFILE GROUP 6('/u01/app/oracle/oradata/s***2/redo06.log') SIZE 1024M;
--切換日誌組
alter system switch logfile;

2.查看審計

show parameter audit_trail

SQL> show parameter audit_trail

NAME                     TYPE                  VALUE
------------------------------------ --------------------------------- ------------------------------
audit_trail              string                DB
--關閉審計
SQL> alter system set audit_trail=FALSE scope=spfile;

System altered.
--重啓數據庫
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 4.6900E+10 bytes
Fixed Size          2239016 bytes
Variable Size        3.2883E+10 bytes
Database Buffers     1.3959E+10 bytes
Redo Buffers           55869440 bytes
Database mounted.
Database opened.
SQL> show parameter audit_trail

NAME                     TYPE                  VALUE
------------------------------------ --------------------------------- ------------------------------
audit_trail              string                FALSE
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

3.登錄檢查恢復正常

$sqlplus m**k/******

SQL*Plus: Release 11.2.0.3.0 Production on Mon Feb 26 17:09:00 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select status from v$session where sid=2276 and serial#=13241;

no rows selected

三、補充知識

1.hang analyze

oradebug hanganalyze 3產生的TRACE FILE包括3部分內容
第一部分:

Chains most likely to have caused the hang:
 [a] Chain 1 Signature: 'rdbms ipc message'<='log file switch (checkpoint incomplete)'<='buffer busy waits'
     Chain 1 Signature Hash: 0x4110dae0
 [b] Chain 2 Signature: <not in a wait><='latch: cache buffers chains'
     Chain 2 Signature Hash: 0xccebf225
 [c] Chain 3 Signature: 'rdbms ipc message'<='enq: CR - block range reuse ckpt'<='buffer busy waits'
     Chain 3 Signature Hash: 0x11bdab12

第二部分(當然這裏面又分爲intersecting chains或者non-intersecting chains)

第三部分:

Extra information that will be dumped at higher levels:
[level  4] :   3 node dumps -- [LEAF] [LEAF_NW] 
[level  5] :  66 node dumps -- [NO_WAIT] [INVOL_WT] [SINGLE_NODE] [NLEAF] [SINGLE_NODE_NW] 

State of ALL nodes
([nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist]):
[1]/1/2/33209/0xb0913ba18/14107/NLEAF/[1421]
[2]/1/3/56281/0xb110bda68/21150/NLEAF/[3552]
[143]/1/144/589/0xb01111318/2007/NLEAF/[1421]
[285]/1/286/3181/0xaf112d4d0/13267/NLEAF/[1988]
[286]/1/287/2703/0xaf912f5c8/21152/NLEAF/[3552]
[427]/1/428/437/0xb11173570/2120/NLEAF/[1421]
[428]/1/429/1867/0xae917a538/26749/NLEAF/[1988]
[569]/1/570/7907/0xb512010f8/2126/NLEAF/[1988]
[571]/1/572/16555/0xb111aee90/26751/NLEAF/[428]
[711]/1/712/4255/0xaf91e50d0/2122/NLEAF/[1988]
[714]/1/715/25733/0xb09268760/20010/NLEAF/[1421]
[853]/1/854/5489/0xae9230040/2124/NLEAF/[1421]
...
1.1各部分說明

● 根據其每列含義
([nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist]):
數據庫實例編號 會話sid 會話serial# 會話的地址saddr 會話對應的操作系統ID 表明會話是否等待 如有值,表明是持鎖會話的CHAIN編號,否則爲空
[163] / 1 / 164 / 10419 / 0xdc9ea7e0 / 4046 / NLEAF / [301]
● non-intersecting chains的特色就是所包含的會話的阻塞會話,不隸屬於任何chain
而intersecting chains包含的會話的阻塞會話隸屬於另一個chains中的持鎖會話,也就是說chains包含在另一個chains中
● chains中包括每個會話以及阻塞會話的詳細信息,包括SID,PID,SPID以及當前運行的SQL
所調用堆棧;以及近期的歷史等待會話列表
● 關於 ([nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist]) 中的state列的各值含義如下,暫不全面(仍需要進一步測試)
○ NLEAF表明是等待會話
○ SINGLE_NODE表明它是等待任何會話或資源
○ LEAF表明它是持鎖會話,即它不等待任何會話或資源
○ LEAF_NEW它也是持鎖會話

2.日誌組成員操作

查看日誌組成員路徑

select * from v$logfile;
2.1 添加日誌組成員
ALTER DATABASE ADD LOGFILE GROUP 4('/u01/app/oracle/oradata/s***2/redo04.log') SIZE 1024M;
2.2 切換日誌組
 alter system switch logfile;
2.3 刪除日誌組成員

當日志組成員狀態爲INACTIVE時可以刪除 如下:
這裏寫圖片描述

alter database drop logfile member '/u01/app/oracle/oradata/s***2/redo01.log';

3.審計功能檢查

3.1 檢查審計功能
show parameter audit_trail

SQL> show parameter audit_trail

NAME                     TYPE                  VALUE
------------------------------------ --------------------------------- ------------------------------
audit_trail              string                DB
3.2 關閉審計
SQL> alter system set audit_trail=FALSE scope=spfile;

System altered.
3.3 重啓數據庫
SQL> shutdown immediate;
SQL> startup
3.4 檢查審計功能
SQL> show parameter audit_trail

NAME                     TYPE                  VALUE
------------------------------------ --------------------------------- ------------------------------
audit_trail              string                FALSE
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章