ITPub博客

首页 > 数据库 > Oracle > [20230216]数据库连接访问asm相关视图2.txt

[20230216]数据库连接访问asm相关视图2.txt

原创 Oracle 作者:lfree 时间:2023-02-20 09:07:57 0 删除 编辑

[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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969894