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

来源:这里教程网 时间:2026-03-03 18:21:21 作者:

[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) --//再次打开建立新的连接,但是进程号已经变了.

相关推荐