時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)
現(xiàn)象:
在項目中有時會出現(xiàn)這種情況,因為代碼編寫錯誤,執(zhí)行完SQL后,沒有關(guān)閉數(shù)據(jù)庫連接。當該代碼重復執(zhí)行時,會導致應(yīng)用服務(wù)器和數(shù)據(jù)庫的連接不斷增加,最終導致連接超過數(shù)據(jù)庫連接上限,系統(tǒng)崩潰。
問題:
項目中的代碼很多,很難準確定位到底是哪一段代碼出了問題
解決辦法:
用應(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這臺機器連接到oracle的正在執(zhí)行的SQL。通過分析這些SQL,就可以快速的發(fā)現(xiàn)是哪部分程序沒有釋放連接。
v$session視圖的字段說明:
SADDR RAW(4) 會話地址
SID NUMBER 會話標識符
SERIAL# NUMBER 會話序列號。用來唯一地標識繪畫
對象。如果該會話結(jié)束且其他會話
以相同的會話ID 開始,則保證會
話級的命令被應(yīng)用到正確會話對象
AUDSID NUMBER 審計會話ID
PADDR RAW(4) 擁有這個會話的進程地址
USER# NUMBER Oracle 用戶標識符
USERNAME VARCHAR(30) Oracle 用戶名
COMMAND NUMBER 正進行的命令(分析的最后一個語
句),關(guān)于值的列表,請參閱表B-
11
OWNERID NUMBER 如果值為2147483644,則此列的
內(nèi)容無效。否則此列包含擁有可移
植會話的用戶標符。對于利用并行
從服務(wù)器的操作,將這個值解釋為
一個48 字節(jié)的值。其低位兩字節(jié)
表示會話號,而高位字節(jié)表示查詢
協(xié)調(diào)程序的實例ID
TADDR VARCHAR2(8) 事務(wù)處理狀態(tài)對象的地址
LOCKWAIT VARCHAR2(8) 等待鎖的地址;如果沒有,為NULL
STATUS VARCHAR2(8) 會話的狀態(tài):ACTIVE (當前執(zhí)行的
SQL)、INACTIVE、KILLED(標記為
終止)、CACHED(為Oracle*XA 使
用而臨時高速緩存)、SNIPED(會
話不活動,在客戶機上等待)
SERVER VARCHAR2(9) 服務(wù)器類型:DEDICATED、SHARED、
PSEUDO、NONE
SCHEMA# NUMBER 模式用戶標識符
SCHEMANANME VARCHAR2(30) 模式用戶名
OSUSER VARCHAR(15) 操作系統(tǒng)客戶機用戶名
PROCESS VARCHAR2(9) 操作系統(tǒng)客戶機進程ID
MACHINE VARCHAR2(64) 操作系統(tǒng)機器名
TERMINAL VARCHAR2(10) 操作系統(tǒng)終端名
PROGRAM VARCHAR(48) 操作系統(tǒng)程序名
TYPE VARCHAR2(10) 會話類型
SQL_ADDRESS RAW(4) 與SQL_HASH_VALUE 一道使用標識
當前正在執(zhí)行的SQL 語句
SQL_HASH_VALUE NUMBER 與SQL_ADDRESS 一道使用標識當前
正在執(zhí)行的SQL 語句
MODULE VARCHAR2(48) 包含當前正在執(zhí)行的模塊名,正如
由調(diào)用
DBMS_APPLICATION_INFO.SET_MODU
LE 過程所設(shè)置
MODULE_HASH NUMBER 上面MODULE 的散列值
ACTION VARCHAR2(32) 包含當前執(zhí)行活動的名稱,正如由
調(diào)用
DBMS_APPLICATION_INFO.SET_ACTI
ON 過程所設(shè)置
ACTION_HASH NUMBER 上列活動名稱的散列值
CLIENT_INFO VARCHAR2(64) 由
DBMS_APPLICATION_INFO.SET_CLIE
NT_INFO 過程設(shè)置的信息
FIXED_TABLE_
SEQUENCE
NUMBER 此列包含一個數(shù),每當會話完成一
個數(shù)據(jù)庫調(diào)用并且存在來自動態(tài)性
能表的介入選擇,它個數(shù)就增加。
這個列可被性能監(jiān)控程序用來監(jiān)控
數(shù)據(jù)庫中的統(tǒng)計數(shù)據(jù)。每當性能監(jiān)
控程序查看數(shù)據(jù)庫時,只需要查看
當前活動的會話或在這個列中具有
比上次性能監(jiān)控程序所看到的最大
值更大的值的會話即可。所有其他
會話自上次性能監(jiān)控程序查看數(shù)據(jù)
庫以來都是空閑的
ROW_WAIT_OBJ# NUMBER 包含ROW_WAIT_ROW#中指定的ROW#
的表的對象ID
ROW_WAIT_FILE# NUMBER 包含ROW_WAIT_ROW#中指定的
ROWID 的數(shù)據(jù)文件的標識符。此列
僅在會話當前正在等待其他事務(wù)處
理提交并且ROW_ WAIT_OBJ#不為-
1 時有效
ROW_WAIT_BLOCK # NUMBER 包含ROW_WAIT_ROW#中指定的
ROWID 的數(shù)據(jù)文件的標識符。此列
僅在會話當前正在等待其他事務(wù)處
理提交并且ROW_正在等待其他事
務(wù)處理提交并且ROW_
ROW_WAIT_ROW# NUMBER 被鎖定的當前ROWID。此列僅在會
話當前正在等待其他事務(wù)處理提交
并且ROW_ WAIT_OBJ#不為-1 時有
效
LOGON_TIME DATE 登錄時間
LAST_CALL_ET NUMBER 最后一次調(diào)用
PDML_STATUS VARCHAR2(8) 如果ENABLED,則會話正處于
PARALLEL DML 啟用方式。如果
DISABLED,則此會話不支持
PARALLEL DML 啟用方式。如果
FORCED,則會話已經(jīng)更改為強制
PARALLEL DLL
PDML_ENABLED VARCHAR2(3) 此列已被PDML_ENABLED 和PDML_
STATUS 所替代。請看上列內(nèi)容
FAILOVER_TYPE VARCHAR2(10) 如果這個會話禁止失敗切換,則為
NONE ,如果客戶機能夠在斷開之
后失敗切換其會話,則為
SESSION,如果客戶機還能失敗切
換正在進行的選擇,則為SELECT
FAILOVER_METHOD VARXHAR2(3) 如果這個會話禁止失敗切換,則為
NONE,如果客戶機能夠在斷開之后
重新連接,為BASIC,如果備份實
例能夠支持它所支持的每個實例的
所有連接,則為PRECONNECT
FAILED_OVER VARCHAR2(13) 如果運行在失敗切換方式并進行過
失敗切換,為TRUE,否則為FALSE
RESOURCE_CON
SU_MER_GROUP
VARCHAR2(32) 會話的當前資源使用者組的名稱
關(guān)鍵詞標簽:oracle sql執(zhí)行方式
相關(guān)閱讀
熱門文章 Oracle中使用alter table來增加,刪除,修改列oracle中使用SQL語句修改字段類型-oracle修使用低權(quán)限Oracle數(shù)據(jù)庫賬戶得到管理員權(quán)限Oracle對user的訪問控制
人氣排行 ORACLE SQL 判斷字符串是否為數(shù)字的語句Oracle中使用alter table來增加,刪除,修改列的語法ORACLE和SQL語法區(qū)別歸納(1)oracle grant 授權(quán)語句如何加速Oracle大批量數(shù)據(jù)處理Oracle刪除表的幾種方法ORACLE修改IP地址后如何能夠使用Oracle 10g創(chuàng)建表空間和用戶并指定權(quán)限