執(zhí)行Oracle sql的實(shí)際步驟
在某些項(xiàng)目中有時(shí)后會(huì)出現(xiàn)以下的情況,由于代碼寫錯(cuò),在執(zhí)行Oracle sql之后,我們沒有關(guān)閉數(shù)據(jù)庫(kù)的相關(guān)連接。如果該代碼重復(fù)執(zhí)行Oracle sql時(shí),會(huì)導(dǎo)致應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)的連接不斷增加,最終導(dǎo)致連接超過數(shù)據(jù)庫(kù)連接上限,系統(tǒng)崩潰。
問題:
項(xiàng)目中的代碼很多,很難準(zhǔn)確定位到底是哪一段代碼出了問題
解決辦法:
用應(yīng)用程序的用戶登錄Oracle,執(zhí)行下面的sql:
- select sql_text from v$sqlarea a where a.
HASH_VALUE in (- select b.prev_hash_value from v$session b where b.
MACHINE = 'WLS254'- )
sql中的"WLS254"指的是應(yīng)用服務(wù)器的名稱,該sql得到的結(jié)果就是WLS254這臺(tái)機(jī)器連接到Oracle的正在執(zhí)行的Oraclesql。通過分析這些sql,就可以快速的發(fā)現(xiàn)是哪部分程序沒有釋放連接。
v$session視圖的字段說(shuō)明:
SADDR RAW(4) 會(huì)話地址,SID NUMBER 會(huì)話標(biāo)識(shí)符
SERIAL# NUMBER 會(huì)話序列號(hào)。用來(lái)唯一地標(biāo)識(shí)繪畫對(duì)象。如果該會(huì)話結(jié)束且其他會(huì)話以相同的會(huì)話ID 開始,則保證會(huì)話級(jí)的命令被應(yīng)用到正確會(huì)話對(duì)象
AUDSID NUMBER 審計(jì)會(huì)話ID。PADDR RAW(4) 擁有這個(gè)會(huì)話的進(jìn)程地址,USER# NUMBER Oracle 用戶標(biāo)識(shí)符,USERNAME VARCHAR(30) Oracle 用戶名,COMMAND NUMBER 正進(jìn)行的命令。關(guān)于值的列表,請(qǐng)參閱表B-
11OWNERID NUMBER 如果值為2147483644,則此列的內(nèi)容無(wú)效。否則此列包含擁有可移植會(huì)話的用戶標(biāo)符。對(duì)于利用并行從服務(wù)器的操作,將這個(gè)值解釋為一個(gè)48 字節(jié)的值。其低位兩字節(jié)表示會(huì)話號(hào),而高位字節(jié)表示查詢協(xié)調(diào)程序的實(shí)例ID
TADDR VARCHAR2(8) 事務(wù)處理狀態(tài)對(duì)象的地址
LOCKWAIT VARCHAR2(8) 等待鎖的地址;如果沒有,為NULL
STATUS VARCHAR2(8) 會(huì)話的狀態(tài):ACTIVE (當(dāng)前執(zhí)行的
sql)、INACTIVE、KILLED(標(biāo)記為
終止)、CACHED(為Oracle*XA 使
用而臨時(shí)高速緩存)、SNIPED(會(huì)
話不活動(dòng),在客戶機(jī)上等待)
SERVER VARCHAR2(9) 服務(wù)器類型:
DEDICATED、SHARED、
PSEUDO、NONE
SCHEMA# NUMBER 模式用戶標(biāo)識(shí)符
SCHEMANANME VARCHAR2(30) 模式用戶名,OSUSER VARCHAR(15) 操作系統(tǒng)客戶機(jī)用戶名,PROCESS VARCHAR2(9) 操作系統(tǒng)客戶機(jī)進(jìn)程ID,MACHINE VARCHAR2(64) 操作系統(tǒng)機(jī)器名,TERMINAL VARCHAR2(10) 操作系統(tǒng)終端名,PROGRAM VARCHAR(48) 操作系統(tǒng)程序名,TYPE VARCHAR2(10) 會(huì)話類型。sql_ADDRESS RAW(4) 與sql_HASH_VALUE 一道使用標(biāo)識(shí)
當(dāng)前正在執(zhí)行的Oraclesql 語(yǔ)句
sql_HASH_VALUE NUMBER 與sql_ADDRESS 一道使用標(biāo)識(shí)當(dāng)前
正在執(zhí)行的sql 語(yǔ)句
MODULE VARCHAR2(48) 包含當(dāng)前正在執(zhí)行的模塊名,正如
由調(diào)用
DBMS_APPLICATION_INFO.SET_MODU
LE 過程所設(shè)置
MODULE_HASH NUMBER 上面MODULE 的散列值
ACTION VARCHAR2(32) 包含當(dāng)前執(zhí)行活動(dòng)的名稱,正如由
調(diào)用
DBMS_APPLICATION_INFO.SET_ACTI
ON 過程所設(shè)置
ACTION_HASH NUMBER 上列活動(dòng)名稱的散列值
CLIENT_INFO VARCHAR2(64) 由
DBMS_APPLICATION_INFO.SET_CLIE
NT_INFO 過程設(shè)置的信息
FIXED_TABLE_
SEQUENCE
NUMBER 此列包含一個(gè)數(shù),每當(dāng)會(huì)話完成一
個(gè)數(shù)據(jù)庫(kù)調(diào)用并且存在來(lái)自動(dòng)態(tài)性能表的介入選擇,它個(gè)數(shù)就增加。這個(gè)列可被性能監(jiān)控程序用來(lái)監(jiān)控?cái)?shù)據(jù)庫(kù)中的統(tǒng)計(jì)數(shù)據(jù)。每當(dāng)性能監(jiān)控程序查看數(shù)據(jù)庫(kù)時(shí),只需要查看當(dāng)前活動(dòng)的會(huì)話或在這個(gè)列中具有比上次性能監(jiān)控程序所看到的最大值更大的值的會(huì)話即可。所有其他會(huì)話自上次性能監(jiān)控程序查看數(shù)據(jù)庫(kù)以來(lái)都是空閑的。
以上的相關(guān)內(nèi)容就是對(duì)Oracle sql執(zhí)行方式的相關(guān)內(nèi)容的部分介紹,望你能有所收獲。
【編輯推薦】
- Oracle rman命令中常用命令總結(jié)備忘
- Oracle rman命令中常用命令總結(jié)備忘
- Oracle 數(shù)據(jù)庫(kù)的并行執(zhí)行的實(shí)際操作
- Oracle數(shù)據(jù)庫(kù)的安裝與配置流程示例
- 對(duì)Oracle綁定變量的實(shí)際操作