posts - 310, comments - 6939, trackbacks - 0, articles - 3
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
           

          V$PROCESS 

            本視圖包含當(dāng)前系統(tǒng)oracle運(yùn)行的所有進(jìn)程信息。常被用于將oracle或服務(wù)進(jìn)程的操作系統(tǒng)進(jìn)程ID與數(shù)據(jù)庫(kù)session之間建立聯(lián)系。在某些情況下非常有用:

          1.         如果數(shù)據(jù)庫(kù)瓶頸是系統(tǒng)資源(如:cpu,內(nèi)存),并且占用資源最多的用戶總是停留在某幾個(gè)服務(wù)進(jìn)程,那么進(jìn)行如下諸項(xiàng):

          l         找出資源進(jìn)程

          l         找出它們的session,你必須將進(jìn)程與會(huì)話聯(lián)系起來(lái)。

          l         找出為什么session占用了如此多的資源

          2.         SQL跟蹤文件名是基于服務(wù)進(jìn)程的操作系統(tǒng)進(jìn)程ID。要找出session的跟蹤文件,你必須將session與服務(wù)進(jìn)程聯(lián)系起來(lái)。

          3.         某些事件,如rdbms ipc reply,鑒別session進(jìn)程的Oracle進(jìn)程ID在等什么。要發(fā)現(xiàn)這些進(jìn)程在做什么,你必須找出它們的session。

          4.         你所看到的服務(wù)器上的后臺(tái)進(jìn)程(DBWR,LGWR,PMON)都是服務(wù)進(jìn)程。要想知道他們?cè)谧鍪裁矗惚仨氄业剿麄兊?/span>session。

          V$PROCESS中的常用列

          l         ADDR:進(jìn)程對(duì)象地址

          l         PIDoracle進(jìn)程ID

          l         SPID:操作系統(tǒng)進(jìn)程ID

          V$PROCESS中的連接列

          Column                       View                            Joined Column(s)

          ADDR                          V$SESSION                 PADDR

          示例:

          1.         查找指定系統(tǒng)用戶在oracle中的session信息及進(jìn)程id,假設(shè)操作系統(tǒng)用戶為:junsansi

          select s.sid,s.SERIAL#, s.username,p.spid

           from v$session s, v$process p

           where s.osuser = 'junsansi'

             and s.PADDR = p.ADDR

          2.         查看鎖和等待

          SELECT/*+ rule */

           lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,

           o.owner,o.object_name,o.object_type,s.sid,s.serial#,p.spid

           FROM v$locked_object l, dba_objects o, v$session s, v$process p

           WHERE l.object_id = o.object_id

             AND l.session_id = s.sid and s.paddr = p.addr

           ORDERBY o.object_id, xidusn DESC

          3.          

          附注:

            在linux環(huán)境可以通過(guò)ps查看進(jìn)程信息包括pid,windows中任務(wù)管理器的PIDv$processpid不能一一對(duì)應(yīng),這塊在oracleDocument中也沒(méi)有找到介紹,后來(lái)google了一下,有資料介紹說(shuō)是由于windows是多線程服務(wù)器,每個(gè)進(jìn)程包含一系列線程。這點(diǎn)于unix等不同,Unix每個(gè)Oralce進(jìn)程獨(dú)立存在,在Nt上所有線程由Oralce進(jìn)程衍生。

            要在windows中顯示oracle相關(guān)進(jìn)程pid,我們可以通過(guò)一個(gè)簡(jiǎn)單的sql語(yǔ)句來(lái)實(shí)現(xiàn)。

          SELECT s.SID, p.pid, p.spid signaled, s.osuser, s.program

           FROM v$process p, v$session s

           WHERE p.addr = s.paddr;

          SID

          PID

          SIGNALED

          OSUSER

          PROGRAM

          1

          2

          2452

          SYSTEM

          ORACLE.EXE

          2

          3

          2460

          SYSTEM

          ORACLE.EXE

          3

          4

          2472

          SYSTEM

          ORACLE.EXE

          4

          5

          2492

          SYSTEM

          ORACLE.EXE

          5

          6

          2496

          SYSTEM

          ORACLE.EXE

          6

          7

          2508

          SYSTEM

          ORACLE.EXE

          7

          8

          2520

          SYSTEM

          ORACLE.EXE

          8

          9

          2524

          SYSTEM

          ORACLE.EXE

          10

          12

          1316

          JSS"junsansi

          PlSqlDev.exe

          9

          13

          3420

          JSS"junsansi

          PlSqlDev.exe

          13

          14

          660

          JSS"junsansi

          PlSqlDev.exe

          還可以通過(guò)和 v$bgprocess 連接查詢到后臺(tái)進(jìn)程的名字:

          SELECT s.SID SID, p.spid threadid, p.program processname, bg.NAMENAME

           FROM v$process p, v$session s, v$bgprocess bg

           WHERE p.addr = s.paddr

             AND p.addr = bg.paddr

             AND bg.paddr <> '00';

          SID

          THREADID

          PROCESSNAME

          NAME

          1

          2452

          ORACLE.EXE

          PMON

          2

          2460

          ORACLE.EXE

          DBW0

          3

          2472

          ORACLE.EXE

          LGWR

          4

          2492

          ORACLE.EXE

          CKPT

          5

          2496

          ORACLE.EXE

          SMON

          6

          2508

          ORACLE.EXE

          RECO

          7

          2520

          ORACLE.EXE

          CJQ0

          8

          2524

          ORACLE.EXE

          QMN0

          Eygle大師寫(xiě)了一段sql腳本getsql.sql,用來(lái)獲取指定pid正在執(zhí)行的sql語(yǔ)句,在此也附注上來(lái)。

          REM getsql.sql

          REM author eygle

          REM windows,已知進(jìn)程ID,得到當(dāng)前正在執(zhí)行的語(yǔ)句

          REM windows,進(jìn)程ID16進(jìn)制,需要轉(zhuǎn)換,UNIX直接為10進(jìn)制

          SELECT   /*+ ORDERED */

                   sql_text

              FROM v$sqltext a

             WHERE (a.hash_value, a.address) IN (

                      SELECT DECODE (sql_hash_value,

                                     0, prev_hash_value,

                                     sql_hash_value

                                    ),

                             DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)

                        FROM v$session b

                       WHERE b.paddr = (SELECT addr

                                          FROM v$process c

                                         WHERE c.spid = TO_NUMBER ('&pid', 'xxxx')))

          ORDER BY piece ASC

          /

          主站蜘蛛池模板: 乐昌市| 徐水县| 集安市| 仁化县| 平和县| 夏津县| 剑川县| 凤山市| 临安市| 乾安县| 蒲江县| 衡东县| 丹凤县| 海兴县| 林周县| 崇礼县| 麻栗坡县| 绥阳县| 汶川县| 龙岩市| 台中县| 曲阳县| 宁强县| 吉安市| 柯坪县| 靖西县| 香河县| 资阳市| 桃园市| 马鞍山市| 通海县| 林甸县| 阜康市| 扶余县| 正阳县| 佛冈县| 万源市| 宣威市| 梁平县| 大渡口区| 社旗县|