探討:Oracle數(shù)據(jù)庫查看一個進程是如何執(zhí)行相關(guān)的實際SQL語句
更新時間:2013年05月30日 11:20:27 作者:
本篇文章是對Oracle數(shù)據(jù)庫查看一個進程是如何執(zhí)行相關(guān)的實際SQL語句進行了詳細的分析介紹,需要的朋友參考下
Oracle數(shù)據(jù)庫查看一個進程是如何執(zhí)行相關(guān)的實際SQL語句
SELECT b.sql_text, sid, serial#, osuser, machine
FROM v$session a, v$sqlarea b
WHERE a.sql_address = b.address;
查詢前臺發(fā)出的SQL語句.
select user_name,sql_text
from v$open_cursor
where sid in
(select sid from (select sid,serial#,username,program from v$session where status='ACTIVE'));
根據(jù)SPID查詢session
SELECT * FROM v$session WHERE paddr IN
(SELECT addr FROM v$process WHERE spid=&spid);
根據(jù)SID查詢process
SELECT * FROM v$process WHERE addr IN
(SELECT paddr FROM v$session WHERE sid=&sid);
DBA如何查詢其他用戶所進行的操作
SELECT sql_text
FROM v$sql t1, v$session t2
WHERE t1.address = t2.sql_address
AND t2.sid = &sid;
根據(jù)process查詢sql語句
SELECT 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 = '$processID'))
ORDER BY piece ASC;
其他
執(zhí)行下列命令語句
sqlplus / as sysdba <<EOF
create tablespace test datafile '/data/test01.dbf' size 10240M;
quit;
EOF
通過ps -ef|grep sqlplus命令得到上面所執(zhí)行的命令的進程id為:12345
(1)關(guān)于v$process
執(zhí)行下面的SQL是查不到相關(guān)的信息:
select * from v$process where spid='12345';
因為這個spid字段對應(yīng)的并不是我們用ps命令從系統(tǒng)中查詢到的進程id,而是這個進程執(zhí)行的當前SQL的進程id,
也就是上面命令中的“create tablespace test datafile '/data/test01.dbf' size 10240M;”所對應(yīng)的進程id,如果想
通過用ps命令從系統(tǒng)中查詢到的進程id查看對應(yīng)的信息,那么必須使用下面語句:
select spid,sid,process,sql_address from v$session where process='12345'
上面sql中的process就是通過ps查看的進程id,而spid就是里面的sql語句所對應(yīng)的進程id。
還可以通過上面的sql_address 查看正在執(zhí)行的SQL語句內(nèi)容:
select sql_text from v$sqlarea s,v$session ses where s.address=ses.sql_address and ses.process='12345';
(2)關(guān)于v$session
在查詢 v$session 視圖的時候,我們根據(jù)command字段內(nèi)部表示解碼每一個字段,當我們需要快速找出他們的 Oracle 系統(tǒng)的內(nèi)部情況時非常有用。
select
substr(s.username,1,18) username,substr(s.program,1,15) program,p.spid,s.process,
decode(s.command,
0,'No Command',
1,'Create Table',
2,'Insert',
3,'Select',
6,'Update',
7,'Delete',
9,'Create Index',
15,'Alter Table',
21,'Create View',
23,'Validate Index',
35,'Alter Database',
39,'Create Tablespace',
41,'Drop Tablespace',
40,'Alter Tablespace',
53,'Drop User',
62,'Analyze Table',
63,'Analyze Index',
s.command||': Other') command
from
v$session s,
v$process p,
v$transaction t,
v$rollstat r,
v$rollname n
where s.paddr = p.addr
and s.taddr = t.addr (+)
and t.xidusn = r.usn (+)
and r.usn = n.usn (+)
order by username
(3)幾個相關(guān)的SQL
--查看系統(tǒng)進程對應(yīng)的信息
select se.saddr,se.sid,se.serial#,p.pid,se.paddr,s.sql_id,s.sql_text
from v$session se ,v$process p, v$sqlarea s
where se.paddr=p.addr and se.sql_address=s.address and se.process='&1'
and se.username is not null
--查看所有的會話
select se.username,se.saddr,se.sid,se.serial#,se.process,s.sql_id
from v$session se,v$sqlarea s
where se.sql_address=s.address
--查看會話對應(yīng)的sql內(nèi)容
select se.username,se.process,s.sql_text
from v$session se,v$sqlarea s
where se.sql_address=s.address and s.sql_id='&1'
復(fù)制代碼 代碼如下:
SELECT b.sql_text, sid, serial#, osuser, machine
FROM v$session a, v$sqlarea b
WHERE a.sql_address = b.address;
查詢前臺發(fā)出的SQL語句.
復(fù)制代碼 代碼如下:
select user_name,sql_text
from v$open_cursor
where sid in
(select sid from (select sid,serial#,username,program from v$session where status='ACTIVE'));
根據(jù)SPID查詢session
復(fù)制代碼 代碼如下:
SELECT * FROM v$session WHERE paddr IN
(SELECT addr FROM v$process WHERE spid=&spid);
根據(jù)SID查詢process
復(fù)制代碼 代碼如下:
SELECT * FROM v$process WHERE addr IN
(SELECT paddr FROM v$session WHERE sid=&sid);
DBA如何查詢其他用戶所進行的操作
復(fù)制代碼 代碼如下:
SELECT sql_text
FROM v$sql t1, v$session t2
WHERE t1.address = t2.sql_address
AND t2.sid = &sid;
根據(jù)process查詢sql語句
復(fù)制代碼 代碼如下:
SELECT 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 = '$processID'))
ORDER BY piece ASC;
其他
執(zhí)行下列命令語句
復(fù)制代碼 代碼如下:
sqlplus / as sysdba <<EOF
create tablespace test datafile '/data/test01.dbf' size 10240M;
quit;
EOF
通過ps -ef|grep sqlplus命令得到上面所執(zhí)行的命令的進程id為:12345
(1)關(guān)于v$process
執(zhí)行下面的SQL是查不到相關(guān)的信息:
select * from v$process where spid='12345';
因為這個spid字段對應(yīng)的并不是我們用ps命令從系統(tǒng)中查詢到的進程id,而是這個進程執(zhí)行的當前SQL的進程id,
也就是上面命令中的“create tablespace test datafile '/data/test01.dbf' size 10240M;”所對應(yīng)的進程id,如果想
通過用ps命令從系統(tǒng)中查詢到的進程id查看對應(yīng)的信息,那么必須使用下面語句:
select spid,sid,process,sql_address from v$session where process='12345'
上面sql中的process就是通過ps查看的進程id,而spid就是里面的sql語句所對應(yīng)的進程id。
還可以通過上面的sql_address 查看正在執(zhí)行的SQL語句內(nèi)容:
select sql_text from v$sqlarea s,v$session ses where s.address=ses.sql_address and ses.process='12345';
(2)關(guān)于v$session
在查詢 v$session 視圖的時候,我們根據(jù)command字段內(nèi)部表示解碼每一個字段,當我們需要快速找出他們的 Oracle 系統(tǒng)的內(nèi)部情況時非常有用。
復(fù)制代碼 代碼如下:
select
substr(s.username,1,18) username,substr(s.program,1,15) program,p.spid,s.process,
decode(s.command,
0,'No Command',
1,'Create Table',
2,'Insert',
3,'Select',
6,'Update',
7,'Delete',
9,'Create Index',
15,'Alter Table',
21,'Create View',
23,'Validate Index',
35,'Alter Database',
39,'Create Tablespace',
41,'Drop Tablespace',
40,'Alter Tablespace',
53,'Drop User',
62,'Analyze Table',
63,'Analyze Index',
s.command||': Other') command
from
v$session s,
v$process p,
v$transaction t,
v$rollstat r,
v$rollname n
where s.paddr = p.addr
and s.taddr = t.addr (+)
and t.xidusn = r.usn (+)
and r.usn = n.usn (+)
order by username
(3)幾個相關(guān)的SQL
--查看系統(tǒng)進程對應(yīng)的信息
復(fù)制代碼 代碼如下:
select se.saddr,se.sid,se.serial#,p.pid,se.paddr,s.sql_id,s.sql_text
from v$session se ,v$process p, v$sqlarea s
where se.paddr=p.addr and se.sql_address=s.address and se.process='&1'
and se.username is not null
--查看所有的會話
復(fù)制代碼 代碼如下:
select se.username,se.saddr,se.sid,se.serial#,se.process,s.sql_id
from v$session se,v$sqlarea s
where se.sql_address=s.address
--查看會話對應(yīng)的sql內(nèi)容
復(fù)制代碼 代碼如下:
select se.username,se.process,s.sql_text
from v$session se,v$sqlarea s
where se.sql_address=s.address and s.sql_id='&1'
相關(guān)文章
Oracle rac環(huán)境的數(shù)據(jù)庫導(dǎo)入操作步驟
Oracle RAC是一種基于共享存儲和共享數(shù)據(jù)庫的集群解決方案,可以將多個 Oracle 數(shù)據(jù)庫實例連接成一個邏輯上的單一數(shù)據(jù)庫,提供高可用性、靈活性和可伸縮性,本文給大家介紹Oracle rac環(huán)境的數(shù)據(jù)庫導(dǎo)入操作,感興趣的朋友一起看看吧2023-06-06解決maven不能下載oracle jdbc驅(qū)動的問題
這篇文章主要介紹了解決maven不能下載oracle jdbc驅(qū)動的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04Oracle批量插入數(shù)據(jù)的三種方式【推薦】
本文給大家?guī)砣Noracle批量插入數(shù)據(jù)的方法,每種方法都是通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2018-06-06plsql連接oracle數(shù)據(jù)庫報ora 12154錯誤解決方法
今天遇到一個問題,plsql連接oracle數(shù)據(jù)庫報ora 12154錯誤,本文將為您詳細介紹此等問題的解決方法2012-11-11