[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博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2935889/ ,如需转载,请注明出处,否则将追究法律责任。