專利名稱:一種實現(xiàn)sql數(shù)據(jù)庫監(jiān)控的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本申請涉及計算機技術(shù)領(lǐng)域,特別是涉及一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法和裝置。
背景技術(shù):
隨著社會的發(fā)展和科技的進步,各個行業(yè)的信息化建設(shè)正在如火如荼的進行中。 綜合各種技術(shù)而開發(fā)出來的項目良莠不齊,如何實現(xiàn)對各種系統(tǒng)的性能的監(jiān)控,尤其是對 SQL (Structured Query Language,結(jié)構(gòu)化的查詢語言)數(shù)據(jù)庫的執(zhí)行情況的監(jiān)控,進一步 發(fā)現(xiàn)系統(tǒng)瓶頸,提升系統(tǒng)性能以及穩(wěn)定性,已成為迫切需要解決的技術(shù)問題。目前實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方式可以分為以下幾種第一種是從數(shù)據(jù)庫層面監(jiān)控 SQL數(shù)據(jù)庫的執(zhí)行,例如,OraclelOg數(shù)據(jù)庫本身就提供了一些監(jiān)控功能。但是,第一種方式 只能監(jiān)控數(shù)據(jù)庫內(nèi)部的執(zhí)行情況,不能客觀地得到在網(wǎng)絡(luò)環(huán)境下,從業(yè)務(wù)系統(tǒng)發(fā)出執(zhí)行命 令到接收到執(zhí)行結(jié)果這段時間內(nèi)數(shù)據(jù)庫的執(zhí)行情況,因此,不能反映應(yīng)用程序執(zhí)行數(shù)據(jù)庫 操作的性能。第二種是修改業(yè)務(wù)代碼,即,在執(zhí)行SQL數(shù)據(jù)庫的業(yè)務(wù)代碼中加入監(jiān)控代碼。雖然 第二種方式可以克服第一種方式中存在的缺陷,但是,在第二種方式中,需要修改原有的業(yè) 務(wù)代碼來加入監(jiān)控代碼使兩者混雜在一起,這樣增加了業(yè)務(wù)和監(jiān)控的耦合性,降低了業(yè)務(wù) 系統(tǒng)的可維護性。第三種方式是采用動態(tài)代理的方式,即,采用動態(tài)代理機制來修改數(shù)據(jù)庫驅(qū)動類。 請參閱圖1,其為現(xiàn)有技術(shù)中的動態(tài)代理結(jié)構(gòu)示意圖。如圖1所示,被代理類為數(shù)據(jù)庫操作 驅(qū)動類,原執(zhí)行方法為獲取數(shù)據(jù)庫連接的方法,代理類需要實現(xiàn)Evocation Handler接口, 并重寫接口中的invoke方法。由于代理類需要采用反射的方式才能調(diào)用其中的原執(zhí)行方 法,因此,代理類在進行監(jiān)控時的執(zhí)行效率較低,因此不適合在運行期對SQL進行監(jiān)控。
發(fā)明內(nèi)容
為了解決上述技術(shù)問題,本申請實施例提供了一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法和 裝置,以提高代理類在進行監(jiān)控時的執(zhí)行效率,同時,保證在運行期對SQL數(shù)據(jù)庫實現(xiàn)監(jiān) 控。本申請實施例公開了如下技術(shù)方案一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法,包括當(dāng)虛擬機裝載用于獲取數(shù)據(jù)庫連接的驅(qū) 動類時,更換所述驅(qū)動類中原方法的方法名;重新生成與所述驅(qū)動類中的原方法名相同的 方法,并在重新生成的方法中調(diào)用所述驅(qū)動類中更換了方法名的原方法;修改方法的返回 值,將獲取的數(shù)據(jù)庫連接對象修改為代理連接對象;在所述原方法的連接對象、通過所述連 接對象獲取的用于執(zhí)行SQL的對象和執(zhí)行結(jié)果集對象中添加監(jiān)控代碼,生成相應(yīng)的代理對 象,以便通過代理對象實現(xiàn)SQL執(zhí)行的監(jiān)控。優(yōu)選的,所述方法還包括在虛擬機裝載獲取數(shù)據(jù)庫連接的驅(qū)動類之前,讀取監(jiān)控配置文件,當(dāng)所述監(jiān)控配置文件指示執(zhí)行監(jiān)控時,將所述驅(qū)動類修改為代理驅(qū)動類。優(yōu)選的,當(dāng)對SQL數(shù)據(jù)庫的連接或者事務(wù)的開啟關(guān)閉進行監(jiān)控時,所述驅(qū)動類的 連接對象為Connection。一種監(jiān)控SQL數(shù)據(jù)庫的裝置,包括方法名更換單元,用于當(dāng)虛擬機裝載用于獲取 數(shù)據(jù)庫連接的驅(qū)動類時,更換所述驅(qū)動類中原方法的方法名;生成單元,用于重新生成與所 述驅(qū)動類中的原方法名相同的方法,并在重新生成的方法中調(diào)用所述驅(qū)動類中更換了方法 名的原方法;添加單元,用于在所述原方法的連接對象、通過所述連接對象獲取的用于執(zhí)行 SQL的對象和執(zhí)行結(jié)果集對象中添加監(jiān)控代碼,生成相應(yīng)的代理對象,以便通過代理對象實 現(xiàn)SQL執(zhí)行的監(jiān)控。優(yōu)選的,所述裝置還包括讀取單元,用于在虛擬機狀態(tài)執(zhí)行SQL數(shù)據(jù)庫操作的驅(qū) 動類之前,讀取監(jiān)控配置文件,當(dāng)所述監(jiān)控配置文件指示執(zhí)行監(jiān)控時,將所述驅(qū)動類修改為 代理驅(qū)動類。優(yōu)選的,當(dāng)對SQL數(shù)據(jù)庫的連接或者事務(wù)的開啟關(guān)閉進行監(jiān)控時,所述驅(qū)動類的 連接對象為Connection。由上述實施例可以看出,與現(xiàn)有技術(shù)不同,本申請實施例在業(yè)務(wù)應(yīng)用執(zhí)行的過程 中,動態(tài)修改數(shù)據(jù)庫操作的驅(qū)動類,并對數(shù)據(jù)庫訪問相關(guān)類進行代理,實現(xiàn)對數(shù)據(jù)庫SQL執(zhí) 行的監(jiān)控。因此,具有以下優(yōu)點本申請實施例在業(yè)務(wù)應(yīng)用執(zhí)行的過程中,能夠在運行期通過字節(jié)碼注入方式修改 應(yīng)用程序驅(qū)動類,沒有采用反射方式,提高了代理類在進行監(jiān)控時的執(zhí)行效率。可以在真實 的業(yè)務(wù)系統(tǒng)網(wǎng)絡(luò)環(huán)境下對SQL數(shù)據(jù)庫的性能進行監(jiān)控,準(zhǔn)確反映系統(tǒng)的性能。在不更改已有的業(yè)務(wù)代碼的基礎(chǔ)上實現(xiàn)監(jiān)控,完成監(jiān)控程序與業(yè)務(wù)程序的解耦, 不僅減少了監(jiān)控過程對已有的系統(tǒng)的影響,降低了系統(tǒng)風(fēng)險,而且也便于維護業(yè)務(wù)程序,無 需修改業(yè)務(wù)系統(tǒng)的驅(qū)動程序包。
為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,對于本領(lǐng)域普通技術(shù)人員而 言,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為現(xiàn)有技術(shù)中的動態(tài)代理結(jié)構(gòu)示意圖;圖2為本申請一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法的一個實施例的流程圖;圖3為本申請一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法的另一個實施例的流程圖;圖4為本申請一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法的另一個實施例的流程圖;圖5為本申請一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的裝置的一個實施例的結(jié)構(gòu)示意圖;圖6為本申請一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的裝置的另一個實施例的結(jié)構(gòu)示意圖。
具體實施例方式為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖對本申請 實施例進行詳細(xì)描述。實施例一
請參閱圖2,其為本申請一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法的一個實施例的流程圖, 該方法包括以下步驟步驟201 當(dāng)虛擬機裝載獲取數(shù)據(jù)庫操作的驅(qū)動類時,更換所述驅(qū)動類中原方法 的方法名;例如,在采用Spring框架的業(yè)務(wù)應(yīng)用系統(tǒng)中,當(dāng)虛擬機裝載執(zhí)行數(shù)據(jù)庫操作的驅(qū) 動類DriverManagerDataSource時,采用字節(jié)碼注入的方式修改所有獲取連接的方法,如 將方法名 getConnectionFromDriverManager,更改成 getConnectionFromDriverManager_ $Monitor。步驟202 重新生成與所述驅(qū)動類中的原方法名相同的方法,并在重新生成的方 法中調(diào)用所述驅(qū)動類中更換了方法名的原方法;仍 舊 以 上 述 DriverManagerDataSource 類 中 的 getConnectionFromDriver-Manager 為例,重新生成與 getConnectionFromDriverManager 這個原方法名相同的方法,并在重新生成的方法中調(diào)用DriverManagerDataSource類中更 換了方法名的原方法,即調(diào)用 getConnectionFromDriverManager_$Monitor。步驟203 修改方法的返回值,將獲取的數(shù)據(jù)庫連接對象修改為代理連接對象;仍以上述 DriverManagerDataSource 類中的 getConnectionFromDriver-Manager 為例,將返回值 Connection 改為 ProxyConnection。步驟204 在所述原方法的連接對象、通過所述連接對象獲取的用于執(zhí)行SQL的對 象和執(zhí)行結(jié)果集對象中添加監(jiān)控代碼,生成相應(yīng)的代理對象,以便通過代理連接對象實現(xiàn) SQL執(zhí)行的監(jiān)控。如將 Connection 對象修改為 ProxyConnection, Statement 修改為 ProxyStatement 等。由上述實施例可以看出,與現(xiàn)有技術(shù)不同,本申請實施例在業(yè)務(wù)應(yīng)用執(zhí)行的過程 中,修改獲取數(shù)據(jù)庫連接的驅(qū)動類,返回代理連接對象。因此,具有以下優(yōu)點本申請實施例在業(yè)務(wù)應(yīng)用執(zhí)行的過程中,能夠在運行期對SQL數(shù)據(jù)庫的監(jiān)控。采 用字節(jié)碼注入的方式來完成對數(shù)據(jù)庫驅(qū)動類的修改,避免采用反射的方式調(diào)用其中的原執(zhí) 行方法,植入在驅(qū)動類中的監(jiān)控代碼順序執(zhí)行,提高了代理類在進行監(jiān)控時的執(zhí)行效率??梢栽谡鎸嵉臉I(yè)務(wù)系統(tǒng)網(wǎng)絡(luò)環(huán)境下對SQL數(shù)據(jù)庫的性能進行監(jiān)控,準(zhǔn)確反映系統(tǒng) 的性能。在不更改已有的業(yè)務(wù)代碼的基礎(chǔ)上實現(xiàn)監(jiān)控,完成監(jiān)控程序與業(yè)務(wù)程序的解耦, 不僅減少了監(jiān)控過程對已有的系統(tǒng)的影響,降低了系統(tǒng)風(fēng)險,而且也便于維護業(yè)務(wù)程序。實施例二本實施例還提供了一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法,本實施例與實施例一的區(qū)別 在于在虛擬機裝載獲取數(shù)據(jù)庫連接的驅(qū)動類之前,讀取監(jiān)控配置文件,由于該監(jiān)控配置文 件指示了是否需要執(zhí)行監(jiān)控,因此,虛擬機根據(jù)監(jiān)控配置文件的指示,當(dāng)需要執(zhí)行監(jiān)控時, 才將驅(qū)動類修改為代理驅(qū)動類。請參閱圖3,其為本申請一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法的 另一個實施例的流程圖,該方法包括以下步驟步驟301 虛擬機讀取監(jiān)控配置文件;步驟302 當(dāng)所述監(jiān)控配置文件指示執(zhí)行監(jiān)控時,在虛擬機裝載獲取數(shù)據(jù)庫連接的驅(qū)動類時,更換所述驅(qū)動類中原方法的方法名;步驟303 重新生成與所述驅(qū)動類中的原方法名相同的方法,并在重新生成的方 法中調(diào)用所述驅(qū)動類中更換了方法名的原方法;步驟304 在所述原方法的連接對象、通過所述連接對象獲取的用于執(zhí)行SQL的 對象和執(zhí)行結(jié)果集對象中添加監(jiān)控代碼,生成相應(yīng)的代理對象,以便通過代理對象實現(xiàn)SQL 執(zhí)行的監(jiān)控。上述步驟302-步驟304已經(jīng)在實施例一中進行了說明,故此處不再贅述。需要說明的是,當(dāng)監(jiān)控配置文件指示不執(zhí)行監(jiān)控時,虛擬機正常裝載執(zhí)行SQL數(shù) 據(jù)庫操作的驅(qū)動類。由上述實施例可以看出,與現(xiàn)有技術(shù)不同,本申請實施例在業(yè)務(wù)應(yīng)用執(zhí)行的過程 中,在執(zhí)行SQL數(shù)據(jù)庫操作的驅(qū)動類中添加監(jiān)控代碼,實現(xiàn)將驅(qū)動類修改為代理驅(qū)動類。因 此,具有以下優(yōu)點本申請實施例在業(yè)務(wù)應(yīng)用啟動的過程中,能夠根據(jù)配置文件決定是否對SQL數(shù)據(jù) 庫進行監(jiān)控。采用字節(jié)碼注入的方式來完成對數(shù)據(jù)庫驅(qū)動類的修改,無需修改業(yè)務(wù)應(yīng)用的 數(shù)據(jù)庫驅(qū)動包,避免采用反射的方式調(diào)用其中的原執(zhí)行方法,提高了執(zhí)行效率??梢栽谡鎸嵉臉I(yè)務(wù)系統(tǒng)網(wǎng)絡(luò)環(huán)境下對SQL數(shù)據(jù)庫的性能進行監(jiān)控,準(zhǔn)確反映系統(tǒng) 的性能。在不更改已有的業(yè)務(wù)代碼的基礎(chǔ)上實現(xiàn)監(jiān)控,完成監(jiān)控程序與業(yè)務(wù)程序的解耦, 不僅減少了監(jiān)控過程對已有的系統(tǒng)的影響,降低了系統(tǒng)風(fēng)險,而且也便于維護業(yè)務(wù)程序。實施例三本實施例提供了一種通過代理數(shù)據(jù)庫的驅(qū)動類來完成SQL監(jiān)控的方法。請參閱圖 4,其為本申請一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法的另一個實施例的流程圖,該方法包括以下 步驟步驟401 通過修改的數(shù)據(jù)庫驅(qū)動類獲取代理連接類;步驟402 代理連接類在完成原有連接功能的同時記錄監(jiān)控信息,通過代理連接 類獲取的執(zhí)行對象為代理Matement對象(如,ProxyMatement);步驟403 代理執(zhí)行對象ftOxyStatement在執(zhí)行SQL的同時記錄監(jiān)控信息;步驟404 代理結(jié)果集對象I^roxyResultSet記錄結(jié)果集信息。由上述實施例可以看出,與現(xiàn)有技術(shù)不同,本申請實施例在業(yè)務(wù)應(yīng)用執(zhí)行的過程 中,修改數(shù)據(jù)庫驅(qū)動類,將獲取的數(shù)據(jù)庫連接修改為代理連接類,通過數(shù)據(jù)庫操作相關(guān)的代 理類來完成對SQL執(zhí)行的監(jiān)控。因此,具有以下優(yōu)點本申請實施例在業(yè)務(wù)應(yīng)用執(zhí)行的過程中,能夠在運行期對SQL進行監(jiān)控,采用字 節(jié)碼注入的方式來完成對數(shù)據(jù)庫驅(qū)動類的修改,避免采用反射的方式調(diào)用其中的原執(zhí)行方 法,植入在驅(qū)動類中的監(jiān)控代碼順序執(zhí)行,提高了代理類在進行監(jiān)控時的執(zhí)行效率??梢栽谡鎸嵉臉I(yè)務(wù)系統(tǒng)網(wǎng)絡(luò)環(huán)境下對SQL數(shù)據(jù)庫的性能進行監(jiān)控,準(zhǔn)確反映系統(tǒng) 的性能。在不更改已有的業(yè)務(wù)代碼的基礎(chǔ)上實現(xiàn)監(jiān)控,完成監(jiān)控程序與業(yè)務(wù)程序的解耦, 不僅減少了監(jiān)控過程對已有的系統(tǒng)的影響,降低了系統(tǒng)風(fēng)險,而且也便于維護業(yè)務(wù)程序。實施例四
與上述一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法相對應(yīng),本申請實施例還提供了一種實現(xiàn) SQL數(shù)據(jù)庫監(jiān)控的裝置。請參閱圖5,其為本申請一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的裝置的一個實 施例的結(jié)構(gòu)示意圖,包括方法名更換單元501、生成單元502和添加單元503。下面結(jié)合該 裝置的工作原理進一步介紹其內(nèi)部結(jié)構(gòu)以及連接關(guān)系。方法名更換單元501,用于當(dāng)虛擬機裝載執(zhí)行SQL數(shù)據(jù)庫操作的驅(qū)動類時,更換所 述驅(qū)動類中原方法的方法名;生成單元502,用于重新生成與所述驅(qū)動類中的原方法名相同的方法,并在重新生 成的方法中調(diào)用所述驅(qū)動類中更換了方法名的原方法;添加單元503,用于在所述原方法的連接對象、通過所述連接對象獲取的用于執(zhí)行 SQL的對象和執(zhí)行結(jié)果集對象中添加監(jiān)控代碼,生成相應(yīng)的代理對象,以便通過代理對象實 現(xiàn)SQL執(zhí)行的監(jiān)控。優(yōu)選的,請參閱圖6,其為本申請一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的裝置的一個實施例的 結(jié)構(gòu)示意圖,如圖6所示,該裝置還包括讀取單元,用于在虛擬機驅(qū)動類之前,讀取監(jiān)控配 置文件,當(dāng)所述監(jiān)控配置文件指示執(zhí)行監(jiān)控時,將所述驅(qū)動類修改為代理驅(qū)動類。優(yōu)選的,當(dāng)對SQL數(shù)據(jù)庫的連接或者事務(wù)的開啟關(guān)閉進行監(jiān)控時,所述驅(qū)動類的 連接對象為Connection。由上述實施例可以看出,與現(xiàn)有技術(shù)不同,本申請實施例在業(yè)務(wù)應(yīng)用執(zhí)行的過程 中,修改數(shù)據(jù)庫驅(qū)動類,將獲取的數(shù)據(jù)庫連接修改為代理連接類,通過數(shù)據(jù)庫操作相關(guān)的代 理類來完成對SQL執(zhí)行的監(jiān)控。因此,具有以下優(yōu)點本申請實施例在業(yè)務(wù)應(yīng)用執(zhí)行的過程中,能夠在運行期對SQL進行監(jiān)控,采用字 節(jié)碼注入的方式來完成對數(shù)據(jù)庫驅(qū)動類的修改,避免采用反射的方式調(diào)用其中的原執(zhí)行方 法,植入在驅(qū)動類中的監(jiān)控代碼順序執(zhí)行,提高了代理類在進行監(jiān)控時的執(zhí)行效率??梢栽谡鎸嵉臉I(yè)務(wù)系統(tǒng)網(wǎng)絡(luò)環(huán)境下對SQL數(shù)據(jù)庫的性能進行監(jiān)控,準(zhǔn)確反映系統(tǒng) 的性能。在不更改已有的業(yè)務(wù)代碼的基礎(chǔ)上實現(xiàn)監(jiān)控,完成監(jiān)控程序與業(yè)務(wù)程序的解耦, 不僅減少了監(jiān)控過程對已有的系統(tǒng)的影響,降低了系統(tǒng)風(fēng)險,而且也便于維護業(yè)務(wù)程序。需要說明的是,本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部 分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機 可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的 存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機存儲記憶體 (Random AccessMemory, RAM)等。以上對本申請所提供的一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法和裝置進行了詳細(xì)介紹, 本文中應(yīng)用了具體實施例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是 用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請 的思想,在具體實施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解 為對本申請的限制。
權(quán)利要求
1.一種實現(xiàn)SQL執(zhí)行監(jiān)控的方法,其特征在于,包括當(dāng)虛擬機裝載用于獲取數(shù)據(jù)庫連接的驅(qū)動類時,更換所述驅(qū)動類中原方法的方法名;重新生成與所述驅(qū)動類中的原方法名相同的方法,并在重新生成的方法中調(diào)用所述驅(qū) 動類中更換了方法名的原方法;修改方法的返回值,將獲取的數(shù)據(jù)庫連接對象修改為代理連接對象;在所述原方法的連接對象、通過所述連接對象獲取的用于執(zhí)行SQL的對象和執(zhí)行結(jié)果 集對象中添加監(jiān)控代碼,生成相應(yīng)的代理對象,以便通過代理對象實現(xiàn)SQL執(zhí)行的監(jiān)控。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括在虛擬機裝載用于獲取 數(shù)據(jù)庫連接的驅(qū)動類之前,讀取監(jiān)控配置文件,當(dāng)所述監(jiān)控配置文件指示執(zhí)行監(jiān)控時,修改 所述驅(qū)動類。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,當(dāng)對SQL數(shù)據(jù)庫的連接或者事務(wù)的開 啟關(guān)閉進行監(jiān)控時,所述驅(qū)動類的連接對象為Connection。
4.一種監(jiān)控SQL數(shù)據(jù)庫的裝置,其特征在于,包括方法名更換單元,用于當(dāng)虛擬機裝載用于獲取數(shù)據(jù)庫連接的驅(qū)動類時,更換所述驅(qū)動 類中原方法的方法名;生成單元,用于重新生成與所述驅(qū)動類中的原方法名相同的方法,并在重新生成的方 法中調(diào)用所述驅(qū)動類中更換了方法名的原方法;添加單元,用于在所述原方法的連接對象、通過所述連接對象獲取的用于執(zhí)行SQL的 對象和執(zhí)行結(jié)果集對象中添加監(jiān)控代碼,生成相應(yīng)的代理對象,以便通過代理對象實現(xiàn)SQL 執(zhí)行的監(jiān)控。
5.根據(jù)權(quán)利要求4所述的裝置,其特征在于,所述裝置還包括讀取單元,用于在虛擬 機驅(qū)動類之前,讀取監(jiān)控配置文件,當(dāng)所述監(jiān)控配置文件指示執(zhí)行監(jiān)控時,將所述驅(qū)動類修 改為代理驅(qū)動類。
6.根據(jù)權(quán)利要求4或5所述的裝置,其特征在于,當(dāng)對SQL數(shù)據(jù)庫的連接或者事務(wù)的開 啟關(guān)閉進行監(jiān)控時,所述驅(qū)動類的連接對象為Connection。
全文摘要
本申請實施例公開了一種實現(xiàn)SQL數(shù)據(jù)庫監(jiān)控的方法和裝置。其中,所述方法包括當(dāng)虛擬機裝載獲取數(shù)據(jù)庫連接的數(shù)據(jù)庫驅(qū)動類時,更換所述驅(qū)動類中原方法的方法名;重新生成與所述驅(qū)動類中的原方法名相同的方法,并在重新生成的方法中調(diào)用所述驅(qū)動類中更換了方法名的原方法;修改方法的返回值,將獲取的數(shù)據(jù)庫連接修改為代理連接類來完成業(yè)務(wù)系統(tǒng)對數(shù)據(jù)庫訪問操作的監(jiān)控。根據(jù)本申請實施例,可以在運行期對數(shù)據(jù)庫操作進行監(jiān)控,采用字節(jié)碼注入方式提高了執(zhí)行效率,無需修改業(yè)務(wù)應(yīng)用的驅(qū)動包。
文檔編號G06F17/30GK102110162SQ20111004527
公開日2011年6月29日 申請日期2011年2月24日 優(yōu)先權(quán)日2011年2月24日
發(fā)明者張敏杰, 張晶, 李瑩, 楊寧, 王能 申請人:北京中電普華信息技術(shù)有限公司