今天在itpub上看到一个案例:sys/system用户可以登录,普通用户登录的时候就会HANG住。下面我就来演示一下这个故障并进行简单的分析。
1.先用普通用户登录
SQL> conn sjh/sjh
已连接。
SQL> show user
USER 为 "SJH"
2.再用sys用户登录,修改resource_manager_plan的值为'INTERNAL_QUIESCE'。
SQL> show user
USER 为 "SYS"
SQL> alter system set resource_manager_plan='INTERNAL_QUIESCE';
系统已更改。
SQL> show parameter resource_manager_plan;
NAME TYPE VALUE
------------------------------------ ----------- ------------------
resource_manager_plan string INTERNAL_QUIESCE
SQL> select * from v$rsrc_plan;
ID NAME IS_TO
---------- -------------------------------- -----
4840 INTERNAL_QUIESCE TRUE
3.验证普通用户的操作
SQL> select table_name from user_tables;
SQL> conn sjh/sjh
--两个操作均失去了响应。
4.sys用户的操作是OK的。如下:
SQL> create table sjh.test (id number(2));
表已创建。
SQL> insert into sjh.test values(10);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from sjh.test;
ID
----------
10
5.分析。我们来看一下等待事件:
SQL> select SID,SEQ#,EVENT FROM v$session_wait;
SID SEQ# EVENT
---------- ---------- ----------------------------------------------------------------
143 7 resmgr:become active
145 55 SQL*Net message to client
146 282 SQL*Net message from client
148 91 SQL*Net message from client
150 2 Streams AQ: waiting for time management or cleanup tasks
152 1 jobq slave wait
153 2 Streams AQ: qmn slave idle wait
154 6 Streams AQ: qmn coordinator idle wait
158 70 resmgr:become active
160 6 rdbms ipc message
161 253 rdbms ipc message
162 62 rdbms ipc message
163 6 rdbms ipc message
164 1444 smon timer
165 480 rdbms ipc message
166 385 rdbms ipc message
167 84 rdbms ipc message
168 7 rdbms ipc message
169 39 rdbms ipc message
170 3 pmon timer
20 rows selected
--注意蓝色的部分resmgr:become active 这个等待事件的解释如下:
The session is waiting for a resource manager active session slot. This event occurs when the resource manager is enabled and the number of active sessions in the session's current consumer group exceeds the current resource plan's active session limit for the consumer group.
这个等待跟resource manager的启用有关。通过查询resource_manager_plan参数获得其值为:INTERNAL_QUIESCE。这个值代表什么?
INTERNAL_QUIESCE - freezes all sessions out (by setting max number of sessions to 0) except for SYS_GROUP
除了SYS_GROUP 组的用户,其它用户的session都被冻结。注意冻结这个词,OK,我来解冻。
6.解冻
SQL> alter system set resource_manager_plan='';
系统已更改。
hang住的普通用户操作立刻有了反应。
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
TEST
SQL> conn sjh/sjh
已连接。
阅读(3466) | 评论(0) | 转发(0) |