由于ORACLE数据库出现了很奇怪的问题,百事不得其解。在一筹莫展时,不知道该如何下手。其实,ORACLE越来越体现可以管理特性,有很多试图提供HINT。至于DBA熟不熟悉,了不了解其特点,那当别论。
这里提供一个例子,以说明问题。
报普通用户无法登陆数据库,后来发现是参数resource_manager_plan设置为INTERNAL_QUIESCE,导致用户无法登陆。清空该参数后,问题得到解决。
下面做个测试:
SQL> show parameter resource
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
enqueue_resources integer 3144
resource_limit boolean FALSE
resource_manager_plan string
SQL> show parameter process
SQL> alter system set resource_manager_plan='INTERNAL_QUIESCE';
System altered.
这时非DBA用户无法登录,界面一直处于HANG状态;
这时通过V$SESSION_WAIT视图,可以看到对应的等待事件:
SQL> select sid,event from v$session_wait;
SID EVENT
---------- ----------------------------------------------------------------
1 pmon timer
2 rdbms ipc message
3 rdbms ipc message
6 rdbms ipc message
8 rdbms ipc message
7 rdbms ipc message
4 rdbms ipc message
5 smon timer
17 resmgr:waiting in run (queued)
18 SQL*Net message to client
10 rows selected.
取消资源管理:
SQL> alter system set resource_manager_plan='';
System altered.
等待登录的会话可以登录,在V$SESSION_WAIT中的 resmgr:waiting in run (queued) 事件也消失了。
再次说明: 系统运行慢,或者出现异常时,都可以通过V$SESSION_WAIT去诊断问题。