ITPub博客

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

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

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

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

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

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969784