[20230214]資料庫連線訪問asm相關檢視.txt

lfree發表於2023-02-20

[20230214]資料庫連線訪問asm相關檢視.txt

--//上個星期遇到rac的crs down,事後看了一下,我估計訪問asm相關檢視出現阻塞情況.
--//以前測試過連線資料庫的程式在訪問asm相關檢視時會啟動一個訪問asm例項的程式,然後將相關資訊返回給資料庫程式.也就是講問題
--//出在訪問asm的連線上.透過一個例子說明問題.

1.環境:
SYS@127.0.0.1:9014/ywdb> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.測試:
--//session 1:
SYS@127.0.0.1:9014/ywdb/ywdb1> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
      5658       3883 27429                    DEDICATED 20388      468         54 alter system kill session '5658,3883' immediate;

--//spid=20388

# ps -ef | grep 2038[8]
oracle   20388     1  1 09:12 ?        00:01:07 oracleywdb1 (LOCAL=NO)

--//session 1:
SYS@127.0.0.1:9014/ywdb/ywdb1> select count(*) from v$asm_diskgroup;
  COUNT(*)
----------
         2

# ps -ef | grep 2038[8]
oracle   20388     1  1 09:12 ?        00:01:07 oracleywdb1 (LOCAL=NO)
grid     25900     1  0 10:25 ?        00:00:00 oracle+ASM1_user20388_ywdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

--//啟動增加了1個訪問asm的程式.格式為oracle+ASM1_user<spid>_<sid>.
--//session 1退出:

# ps -ef | grep 2038[8]
--//兩者都消失.

3.繼續測試:
--//session 1:
SYS@127.0.0.1:9014/ywdb/ywdb1> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
      5093      18557 39055                    DEDICATED 30611      466        136 alter system kill session '5093,18557' immediate;
--//spid=30611

# ps -ef | grep 3061[1]
oracle   30611     1  0 08:24 ?        00:00:00 oracleywdb1 (LOCAL=NO)

--//session 1:
SYS@127.0.0.1:9014/ywdb/ywdb1> select count(*) from v$asm_diskgroup;
  COUNT(*)
----------
         2

# ps -ef | grep 3061[1]
grid     15451     1  0 08:29 ?        00:00:00 oracle+ASM1_user30611_ywdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   30611     1  0 08:24 ?        00:00:00 oracleywdb1 (LOCAL=NO)

--//kill -9 15451
# kill -9 15451
# ps -ef | grep 3061[1]
oracle   30611     1  0 08:24 ?        00:00:00 oracleywdb1 (LOCAL=NO)

--//session 1:
SYS@127.0.0.1:9014/ywdb/ywdb1> select sysdate from dual ;
select sysdate from dual ;
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 30611
Session ID: 5093 Serial number: 18557
--//只要kill 連線asm的程式,連線資料庫的主程式在執行sql語句時會斷開.

4.補充:
--//我測試中還遇到1個奇特的現象記錄如下:
--//session 1:
SYS@127.0.0.1:9014/ywdb/ywdb1> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
      3115      42709 39285                    DEDICATED 31494      491         98 alter system kill session '3115,42709' immediate;

SYS@127.0.0.1:9014/ywdb/ywdb1> select count(*) from v$asm_disk;
  COUNT(*)
----------
         8

# ps -eLf | grep 3149[4]
oracle   31494     1 31494  0    1 08:49 ?        00:00:00 oracleywdb1 (LOCAL=NO)
--//可以發現這樣並沒有啟動連線asm例項,我前面一直認為訪問asm相關檢視就會出現asm的連線,看來失算了.
--//也許訪問v$asm_diskgroup非常特殊,它是已經彙總統計資訊的檢視.
--//注:看來生產系統前幾天遇到的問題還很複雜,因為當時執行訪問v$asm_disk檢視也出現掛起情況.

SYS@127.0.0.1:9014/ywdb/ywdb1> select count(*) from V$ASM_DISKGROUP;
  COUNT(*)
----------
         2

# ps -eLf | grep 3149[4]
grid     10122     1 10122  0    1 08:51 ?        00:00:00 oracle+ASM1_user31494_ywdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   31494     1 31494  0    1 08:49 ?        00:00:00 oracleywdb1 (LOCAL=NO)

--//session 1:
SYS@127.0.0.1:9014/ywdb/ywdb1> select sysdate from dual ;
SYSDATE
-------------------
2023-02-15 08:52:10

--//再次訪問v$asm_disk檢視:
SYS@127.0.0.1:9014/ywdb/ywdb1> select count(*) from v$asm_disk;
  COUNT(*)
----------
         8

# ps -eLf | grep 3149[4]
oracle   31494     1 31494  0    1 08:49 ?        00:00:00 oracleywdb1 (LOCAL=NO)
--//連線asm例項程式關閉了.

SYS@127.0.0.1:9014/ywdb/ywdb1> select count(*) from V$ASM_DISKGROUP;
  COUNT(*)
----------
         2

# ps -eLf | grep 3149[4]
grid     17002     1 17002  0    1 08:53 ?        00:00:00 oracle+ASM1_user31494_ywdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   31494     1 31494  0    1 08:49 ?        00:00:00 oracleywdb1 (LOCAL=NO)
--//再次開啟建立新的連線,但是程式號已經變了.

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

相關文章