3、阻塞环境构建
我们在11gR2中,构建出一个阻塞的环境场景。从而使用Procwatcher的可用性。
SQL> select * from v$version;
BANNER
-----------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 – Production
构建实验数据表T。
SQL> create table t as select * from dba_objects where rownum<10;
Table created
当前命令行会话编号35,删除数据,但是不进行提交动作。
SQL> select sid from v$mystat where rownum<2;
SID
----------
35
SQL> delete t;
9 rows deleted
在另一个会话中,也删除相同数据。在Oracle环境下,第二个会话被阻塞。
SQL> select sid from v$mystat where rownum<2;
SID
----------
42
SQL> delete t;
(等待阻塞……)
此时,后台Server Process有三个。说明:笔者使用PL/SQL的Command Window进行测试,两个Command窗口,后台对应Server Process有三个。
[oracle@SimpleLinux PRW_SYS_SimpleLinux]$ ps -ef | grep LOCAL
oracle 1983 1 0 09:28 ? 00:00:00 oracleora11g (LOCAL=NO)
oracle 1988 1 0 09:29 ? 00:00:00 oracleora11g (LOCAL=NO)
oracle 2012 1 0 09:31 ? 00:00:00 oracleora11g (LOCAL=NO)
oracle 26625 1807 0 09:37 pts/0 00:00:00 grep LOCAL
下面我们实验用Procwatcher去诊断出进程的阻塞关系。