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

lfree發表於2023-02-20

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

--//前幾天驗證了連線資料庫的程式在訪問asm相關檢視時會啟動一個訪問asm例項的程式,然後將相關資訊返回給資料庫程式.
--//當時訪問v$asm_disk檢視時出現一個奇怪現象,就是完成後會關閉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.測試補充:
--//我測試中還遇到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檢視也出現掛起情況.

--//後記:前面內容是我當時測試時的推測,仔細想想可能不對!!因為當時出現問題時我確實訪問v$asm_disk檢視也出現掛起情況.
--//一定asm例項出現問題,我猜測訪問v$asm_disk時先要連線asm例項,完成後關閉asm例項.我後面的測試驗證這個細節.

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)
--//再次開啟建立新的連線,但是程式號已經變了.

4.繼續測試:
--//session 1:
SYS@127.0.0.1:9014/ywdb/ywdb1> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
      3681      55919 15583                    DEDICATED 4259       493         12 alter system kill session '3681,55919' immediate;

cat aa.txt
select count(*) from v$asm_disk;
/
.
/
--//加入1000個/.這樣連續執行1000次select count(*) from v$asm_disk;命令.

--//session 2:
# seq 30000 | xargs -IQ ps -ef | grep oracle+ASM1_user31494_ywdb1 | tee /tmp/asm.tmp

# tail -6 /tmp/asm.tmp
grid     25252     1  1 08:57 ?        00:00:00 oracle+ASM1_user4259_ywdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
grid     25256     1  0 08:57 ?        00:00:00 oracle+ASM1_user4259_ywdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
grid     25256     1  1 08:57 ?        00:00:00 oracle+ASM1_user4259_ywdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
grid     25260     1  0 08:57 ?        00:00:00 oracle+ASM1_user4259_ywdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
grid     25264     1  0 08:57 ?        00:00:00 oracle+ASM1_user4259_ywdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
--//第2列程式號發生變化.

# ps -ef | grep 425[9]
oracle    4259     1  2 08:47 ?        00:00:06 oracleywdb1 (LOCAL=NO)
grid     22237     1  2 08:50 ?        00:00:00 oracle+ASM1_user4259_ywdb1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

--//你可以發現訪問 v$asm_disk檢視一樣會建立連線,而且每次連線完成都會斷開建立新的連線.

# ps -ef | grep 425[9]
oracle    4259     1  2 08:47 ?        00:00:22 oracleywdb1 (LOCAL=NO)

--//至於為什麼出現這樣的情況,我不知道.

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

相關文章