一、理解操作系统的派生
- [root@localhost ~]# ps -ef|grep sqlplus
- oracle 14721 14691 0 03:41 pts/0 00:00:00 sqlplus as sysdba
当使用sqlplus登陆数据库后,重新开启一个secureCRT端,执行ps -ef查询;
#操作系统进程14691派生出14721
- [root@localhost ~]# ps -ef|grep 14691
- oracle 14691 14690 0 03:41 pts/0 00:00:00 -bash
- oracle 14721 14691 0 03:41 pts/0 00:00:00 sqlplus as sysdba
- root 14917 14732 0 03:58 pts/1 00:00:00 grep 14691
shell的进程派生给sqlplus的进程14721
- [root@localhost ~]# ps -ef|grep 14721
- oracle 14721 14691 0 03:41 pts/0 00:00:00 sqlplus as sysdba
- oracle 14722 14721 0 03:41 ? 00:00:00 oracledevdb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
- root 14930 14732 0 03:59 pts/1 00:00:00 grep 14721
二、查看oracle哪一个进程为用户进程14722提供服务
-
select ADDR,PID,SPID,PNAME,USERNAME,TERMINAL,PROGRAM from v$process;
根据与14722匹配的行,发现ORACLE实例的服务进程是49;
可通过addr字段与v$session中的addr字段关联,获得sid;
SELECT s.SID, p.pid, p.spid signaled, s.osuser, s.program FROM v$process p, v$session s WHERE p.addr = s.paddr;
三、引申
上面是在服务器端以sqlplus的方式登陆;
根据客户端操作系统的 pid 获取对应的服务器连接信息
--查看客户端操作系统的pid,因为同一客户端开了俩个窗口分别做连接,所以下面的ps查询有俩个
- [root@localhost ~]# ps -ef|grep sqlplus
- oracle 127641 127572 0 01:32 pts/0 00:00:00 sqlplus
- oracle 127646 127597 0 01:32 pts/1 00:00:00 sqlplus
- root 129732 127699 0 02:05 pts/3 00:00:00 grep sqlplus
以其中的一个进程127646为例,
select SID,SERIAL#,SCHEMANAME,OSUSER,PROCESS,TYPE,PADDR from v$session where process='127646';
v$session中的process字段纪录了客户端操作系统的pid信息,可通过此列获得服务器端的sid等信息,进而可以关联v$process获得其他想要的信息。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29319055/viewspace-2073808/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29319055/viewspace-2073808/