專(zhuān)利名稱(chēng):應(yīng)用程序監(jiān)控系統(tǒng)和監(jiān)控方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電數(shù)字?jǐn)?shù)據(jù)處理領(lǐng)域,特別涉及應(yīng)用程序監(jiān)控系統(tǒng)和監(jiān)控方法。
背景技術(shù):
現(xiàn)有應(yīng)用程序中,需要對(duì)發(fā)送到數(shù)據(jù)庫(kù)的SQL語(yǔ)句的執(zhí)行進(jìn)行監(jiān)控和管 理,以找出系統(tǒng)的性能瓶頸或?qū)Σ僮鬟M(jìn)行統(tǒng)計(jì)。大多數(shù)應(yīng)用程序本身并沒(méi)有監(jiān)控和管理SQL的功能,而是通過(guò)數(shù)據(jù)庫(kù)月良 務(wù)器帶有的監(jiān)控程序來(lái)查看發(fā)送的SQL語(yǔ)句。由于數(shù)據(jù)庫(kù)的JDBC實(shí)現(xiàn)大都是由數(shù)據(jù)庫(kù)生產(chǎn)商提供,應(yīng)用程序無(wú)法干涉 創(chuàng)建數(shù)據(jù)庫(kù)連接及使用數(shù)據(jù)庫(kù)連接來(lái)執(zhí)行查詢(xún)或更新語(yǔ)句過(guò)程,所以大多數(shù) 應(yīng)用程序采用在需要監(jiān)控的地方加入監(jiān)控程序的方式來(lái)實(shí)現(xiàn)。現(xiàn)有技術(shù)使用監(jiān)控程序?qū)崿F(xiàn)監(jiān)控的流程包括步驟SOl,使用數(shù)據(jù)庫(kù)驅(qū)動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)連接;步驟S02,記錄監(jiān)控信息;步驟S 0 3,使用數(shù)據(jù)庫(kù)連接執(zhí)行SQL語(yǔ)句;步驟S04,記錄監(jiān)控信息,將監(jiān)控信息輸出到指定地址。上述流程需要在應(yīng)用程序的多個(gè)地方增加監(jiān)控程序,影響應(yīng)用程序的正 常流程;應(yīng)用程序維護(hù)困難,監(jiān)控程序分布在應(yīng)用程序的多個(gè)地方,不便于修 改;不易實(shí)現(xiàn)監(jiān)控的統(tǒng)一開(kāi)啟或關(guān)閉,需要增加額外的代碼及全局配置項(xiàng)才 能實(shí)現(xiàn);無(wú)法實(shí)現(xiàn)跨數(shù)據(jù)庫(kù)監(jiān)控,改變目標(biāo)數(shù)據(jù)庫(kù)時(shí)必須對(duì)應(yīng)用程序中的監(jiān)控 程序重新編碼;某些需要的信息如連接信息無(wú)法通過(guò)標(biāo)準(zhǔn)的JDBC接口獲取, 從而無(wú)法記錄。發(fā)明內(nèi)容本發(fā)明目的在于提供應(yīng)用程序監(jiān)控系統(tǒng)和監(jiān)控方法,實(shí)現(xiàn)對(duì)跨數(shù)據(jù)庫(kù)的 SQL語(yǔ)句執(zhí)行情況進(jìn)行監(jiān)控和管理。本發(fā)明提供一種應(yīng)用程序監(jiān)控系統(tǒng),包括JDBC驅(qū)動(dòng)接口、至少一數(shù)據(jù)庫(kù) 驅(qū)動(dòng)和至少一數(shù)據(jù)庫(kù),至少一數(shù)據(jù)庫(kù)通過(guò)相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)與JDBC驅(qū)動(dòng)接口 連接,通過(guò)JDBC驅(qū)動(dòng)接口接收并執(zhí)行應(yīng)用程序發(fā)出的語(yǔ)句,還包括代理驅(qū)動(dòng),代理驅(qū)動(dòng)通過(guò)JDBC驅(qū)動(dòng)接口和至少一數(shù)據(jù)庫(kù)驅(qū)動(dòng)分別與相應(yīng)的數(shù)據(jù)庫(kù)連接,接收來(lái)自應(yīng)用程序的語(yǔ)句,記錄執(zhí)行語(yǔ)句產(chǎn)生的監(jiān)控信息。優(yōu)選地,上述應(yīng)用程序通過(guò)代理驅(qū)動(dòng)創(chuàng)建至少一數(shù)據(jù)庫(kù)連接,代理驅(qū)動(dòng) 創(chuàng)建并返回代理連接。優(yōu)選地,上述代理連接實(shí)現(xiàn)標(biāo)準(zhǔn)的JDBC接口,引用由JDBC驅(qū)動(dòng)創(chuàng)建的 原始連接對(duì)象,以保存應(yīng)用程序的連接信息及附加的管理配置信息;代理連 接創(chuàng)建代理聲明,實(shí)現(xiàn)標(biāo)準(zhǔn)的聲明接口,引用由原始連接對(duì)象創(chuàng)建的原始聲 明對(duì)象。優(yōu)選地,上述代理聲明執(zhí)行應(yīng)用程序發(fā)出的語(yǔ)句,代理驅(qū)動(dòng)記錄代理聲 明執(zhí)行的語(yǔ)句和/或產(chǎn)生的監(jiān)控信息。本發(fā)明還提供一種應(yīng)用程序監(jiān)控方法,基于應(yīng)用程序監(jiān)控系統(tǒng)實(shí)現(xiàn)應(yīng)用 程序監(jiān)控,應(yīng)用程序監(jiān)控系統(tǒng)包括代理驅(qū)動(dòng)、JDBC驅(qū)動(dòng)接口、至少一數(shù)據(jù)庫(kù) 驅(qū)動(dòng)和至少一數(shù)據(jù)庫(kù),至少一數(shù)據(jù)庫(kù)通過(guò)相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)與JDBC驅(qū)動(dòng)接口 連接,代理驅(qū)動(dòng)分別與JDBC驅(qū)動(dòng)接口應(yīng)用程序連接,接收來(lái)自應(yīng)用程序的語(yǔ) 句,記錄執(zhí)行語(yǔ)句產(chǎn)生的監(jiān)控信息,包括代理驅(qū)動(dòng)打開(kāi)數(shù)據(jù)庫(kù)連接的步驟; 代理驅(qū)動(dòng)接收來(lái)自應(yīng)用程序的語(yǔ)句的步驟;代理驅(qū)動(dòng)記錄監(jiān)控信息的步驟; 數(shù)據(jù)庫(kù)執(zhí)行語(yǔ)句的步驟;代理驅(qū)動(dòng)記錄監(jiān)控信息的步驟;代理驅(qū)動(dòng)關(guān)閉數(shù)據(jù) 庫(kù)連接的步驟。優(yōu)選地,上述應(yīng)用程序監(jiān)控方法還包括分析監(jiān)控信息,得出監(jiān)控報(bào)表的 步驟。優(yōu)選地,上述應(yīng)用程序監(jiān)控方法還包括設(shè)置監(jiān)控標(biāo)記的步驟;代理驅(qū)動(dòng)才艮據(jù)監(jiān)控標(biāo)記記錄監(jiān)控信息或不記錄監(jiān)控信息的步驟。優(yōu)選地,上述監(jiān)控標(biāo)記由代理驅(qū)動(dòng)設(shè)置在連接信息中,由代理驅(qū)動(dòng)修改。 優(yōu)選地,上述代理驅(qū)動(dòng)提供接口供應(yīng)用程序調(diào)用,以控制代理驅(qū)動(dòng)記錄監(jiān)控信息。優(yōu)選地,上述應(yīng)用程序監(jiān)控方法還包括應(yīng)用程序調(diào)用接口,控制代理 驅(qū)動(dòng)記錄監(jiān)控信息的步驟;和/或應(yīng)用程序調(diào)用接口,控制代理驅(qū)動(dòng)停止記錄 監(jiān)控信息的步驟。本發(fā)明提供的應(yīng)用程序監(jiān)控系統(tǒng)與監(jiān)控方法通過(guò)代理驅(qū)動(dòng)的方式,對(duì)SQL 語(yǔ)句的執(zhí)行情況進(jìn)行監(jiān)控和管理,可方便地實(shí)現(xiàn);夸數(shù)據(jù)庫(kù)的監(jiān)控及管理。由 于本發(fā)明是在數(shù)據(jù)庫(kù)驅(qū)動(dòng)層上實(shí)現(xiàn)了對(duì)SQL語(yǔ)句的監(jiān)控及管理,不需要第三 方監(jiān)控工具,具有跨數(shù)據(jù)庫(kù)、易于監(jiān)控及方便管理的優(yōu)點(diǎn)。
圖l是本發(fā)明第一實(shí)施例的應(yīng)用程序監(jiān)控系統(tǒng)示意圖; 圖2是本發(fā)明第一實(shí)施例的代理驅(qū)動(dòng)工作原理示意圖; 圖3是本發(fā)明第三實(shí)施例的應(yīng)用程序監(jiān)控過(guò)程示意圖; 圖4是本發(fā)明采用第三實(shí)施的應(yīng)用程序執(zhí)行流程示意圖; 圖5是本發(fā)明第四實(shí)施例的應(yīng)用程序監(jiān)控過(guò)程示意圖。本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步 說(shuō)明。
具體實(shí)施方式
參照?qǐng)Dl,示出本發(fā)明第一實(shí)施例的應(yīng)用程序監(jiān)控系統(tǒng)示意圖。本實(shí)施例 提出代理驅(qū)動(dòng)12,用于創(chuàng)建數(shù)據(jù)庫(kù)連接,封裝實(shí)際的本地?cái)?shù)據(jù)庫(kù)驅(qū)動(dòng),實(shí)現(xiàn)跨 多種數(shù)據(jù)庫(kù)的連接。代理驅(qū)動(dòng)12接收來(lái)自應(yīng)用程序11的SQL語(yǔ)句,通過(guò)JDBC驅(qū) 動(dòng)接口 13分別與多種數(shù)據(jù)庫(kù)連接。本實(shí)施例的多種數(shù)據(jù)庫(kù)包括0racle數(shù)據(jù)庫(kù) 151、 SQL Server數(shù)據(jù)庫(kù)152和My SQL數(shù)據(jù)庫(kù)153, JDBC驅(qū)動(dòng)接口 13分別通過(guò)相 應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng),如0racle JDBC驅(qū)動(dòng)141、 SQL Server JDBC驅(qū)動(dòng)142和My SQL JDBC驅(qū)動(dòng)143與JDBC驅(qū)動(dòng)接口13連接。代理驅(qū)動(dòng)12與多種數(shù)據(jù)庫(kù)的連接實(shí)現(xiàn)標(biāo)準(zhǔn)的JDBC驅(qū)動(dòng)接口 (Java. sql. Driver ),創(chuàng)建各種代理聲明對(duì)象(Statement),在執(zhí)行語(yǔ)句之前 記錄相關(guān)信息,并將SQL語(yǔ)句通過(guò)真正的聲明對(duì)象(Statement)執(zhí)行。代理驅(qū) 動(dòng)12通過(guò)連接信息(包含管理配置信息)中的具體數(shù)據(jù)庫(kù)驅(qū)動(dòng)創(chuàng)建代理連接, 并將連接信息(包含管理配置信息)傳到代理連接中。其中連接信息除了包 含原始連接對(duì)象即應(yīng)用程序11的連接信息之外,還包含用于監(jiān)控及管理的信 息,稱(chēng)為管理配置信息。代理驅(qū)動(dòng)12創(chuàng)建連接時(shí)將連接信息中的部分或全部 內(nèi)容保存到與應(yīng)用程序ll相應(yīng)的管理配置信息中。上述管理配置信息是針對(duì)數(shù)據(jù)庫(kù)連接信息而設(shè)置的必要信息,是連接信 息的一部分。數(shù)據(jù)庫(kù)連接信息如數(shù)據(jù)庫(kù)服務(wù)器地址、數(shù)據(jù)庫(kù)名稱(chēng)、登錄用戶(hù) 服務(wù)名和密碼等,管理配置信息是在這些數(shù)據(jù)庫(kù)連接信息之外的用于管理監(jiān) 控的配置信息.如日志應(yīng)該輸出到哪個(gè)地方、是否要記錄參數(shù)等信息。本實(shí)施例的代理驅(qū)動(dòng)12工作原理如圖2所示,包括 步驟Sll,應(yīng)用程序11與各數(shù)據(jù)庫(kù)通過(guò)本實(shí)施例的代理驅(qū)動(dòng)12進(jìn)行連接, 為實(shí)現(xiàn)對(duì)應(yīng)用程序11的SQL語(yǔ)句的監(jiān)控及管理提供前提條件;步驟S12,通過(guò)代理驅(qū)動(dòng)12創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接時(shí),會(huì)在該數(shù)據(jù)庫(kù)連接外面包裝一層,創(chuàng)建并返回代理連接。代理連接實(shí)現(xiàn)標(biāo)準(zhǔn)的JDBC接口 (Java. sql. Connection),同時(shí)引用原始的連接對(duì)象(原始連接對(duì)象由數(shù)據(jù) 庫(kù)驅(qū)動(dòng)創(chuàng)建),用于保存應(yīng)用程序11的連接信息及附加的管理配置信息;代 理連接創(chuàng)建代理聲明,實(shí)現(xiàn)標(biāo)準(zhǔn)的聲明接口 ( java. sql. Statement),同時(shí)引 用原始的聲明對(duì)象(由原始的連接對(duì)象創(chuàng)建);步驟S13,代理聲明執(zhí)行應(yīng)用程序ll發(fā)出的SQL語(yǔ)句,包括查詢(xún)、創(chuàng)建、 刪除、修改等;步驟S14,代理驅(qū)動(dòng)12記錄聲明執(zhí)行的SQL語(yǔ)句及產(chǎn)生的監(jiān)控信息,監(jiān) 控信息包括連接信息、執(zhí)行的方法、開(kāi)始時(shí)間、執(zhí)行時(shí)間、執(zhí)行的語(yǔ)句和執(zhí) 行的參數(shù)等。經(jīng)過(guò)上面四個(gè)步驟的監(jiān)控信息捕獲之后,就可以對(duì)應(yīng)用程序11的SQL語(yǔ)句 執(zhí)行情況進(jìn)行監(jiān)控和管理,進(jìn)一步可得出統(tǒng)計(jì)報(bào)表。上述代理聲明中包括執(zhí)行的方法、執(zhí)行語(yǔ)句、開(kāi)始時(shí)間、執(zhí)行時(shí)間、執(zhí) 行的語(yǔ)句和執(zhí)行的參數(shù)等。代理驅(qū)動(dòng)、代理連接和代理聲明的關(guān)系為代理 驅(qū)動(dòng)根據(jù)連接信息創(chuàng)建代理連接,代理連接創(chuàng)建代理聲明,代理聲明執(zhí)行應(yīng) 用程序發(fā)出的SQL語(yǔ)句。本實(shí)施例適用于多種數(shù)據(jù)庫(kù),不^f又限于0racle數(shù)據(jù)庫(kù)、SQL Server數(shù)據(jù) 庫(kù)和My SQL數(shù)據(jù)庫(kù),并且也不僅限于JDBC標(biāo)準(zhǔn),還可適用于其他數(shù)據(jù)庫(kù)連接 標(biāo)準(zhǔn)?;诘谝粚?shí)施例,本發(fā)明提出第二實(shí)施例。本實(shí)施例提供應(yīng)用程序監(jiān)控 方法,基于應(yīng)用程序監(jiān)控系統(tǒng)實(shí)現(xiàn)應(yīng)用程序監(jiān)控,應(yīng)用程序監(jiān)控系統(tǒng)包括代 理驅(qū)動(dòng)、JDBC驅(qū)動(dòng)接口、至少一數(shù)據(jù)庫(kù)驅(qū)動(dòng)和至少一數(shù)據(jù)庫(kù),至少一數(shù)據(jù)庫(kù) 通過(guò)相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)與JDBC驅(qū)動(dòng)接口連接,代理驅(qū)動(dòng)分別與JDBC驅(qū)動(dòng)接 口應(yīng)用程序連接,接收來(lái)自應(yīng)用程序的SQL語(yǔ)句,記錄執(zhí)行SQL語(yǔ)句產(chǎn)生的 監(jiān)控信息,具體包括步驟S21,代理驅(qū)動(dòng)打開(kāi)數(shù)據(jù)庫(kù)連接;步驟S22,代理驅(qū)動(dòng)接收來(lái)自應(yīng)用程序的SQL語(yǔ)句;步驟S23,代理驅(qū)動(dòng)記錄監(jiān)控信息;步驟S24,數(shù)據(jù)庫(kù)執(zhí)行SQL語(yǔ)句;步驟S25,代理驅(qū)動(dòng)再次記錄監(jiān)控信息;步驟S26,代理驅(qū)動(dòng)關(guān)閉數(shù)據(jù)庫(kù)連接。上述代理驅(qū)動(dòng)可以定義為一個(gè)對(duì)象,該對(duì)象包括連接信息、打開(kāi)數(shù)據(jù)庫(kù) 連接等方法。在步驟S21中,該對(duì)象根據(jù)連接信息打開(kāi)數(shù)據(jù)庫(kù)連接;在步驟S23中,根據(jù)來(lái)自應(yīng)用程序的SQL語(yǔ)句實(shí)例化該對(duì)象,為該對(duì)象的連接信息、 執(zhí)行的方法、開(kāi)始時(shí)間、執(zhí)行的語(yǔ)句和執(zhí)行的參數(shù)等多個(gè)屬性分別賦值,這 些屬性及其值即一組監(jiān)控信息;在步驟S24,該對(duì)象調(diào)用執(zhí)行語(yǔ)句方法,根據(jù) SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行SQL操作;在步驟S25,數(shù)據(jù)庫(kù)返回SQL語(yǔ)句執(zhí)行結(jié)果, 根據(jù)執(zhí)行結(jié)果返回的時(shí)間產(chǎn)生執(zhí)行時(shí)間,為該對(duì)象的執(zhí)行時(shí)間屬性賦值,即 再次記錄監(jiān)控信息。為靈活控制是否對(duì)應(yīng)用程序啟用本發(fā)明的監(jiān)控方法進(jìn)行監(jiān)控,本發(fā)明還 提出第三實(shí)施例,在第二實(shí)施例基礎(chǔ)上,在管理配置信息中加入監(jiān)控標(biāo)記, 該監(jiān)控標(biāo)記用于代理驅(qū)動(dòng)啟用/關(guān)閉應(yīng)用程序監(jiān)控。本實(shí)施例設(shè)置監(jiān)控標(biāo)記 trace,取值為打開(kāi)或關(guān)閉,標(biāo)明是否要對(duì)某數(shù)據(jù)庫(kù)啟用應(yīng)用程序監(jiān)控,trace 取值為打開(kāi)表示啟用應(yīng)用程序監(jiān)控;trace取值為關(guān)閉表示關(guān)閉應(yīng)用程序監(jiān) 控;trace取值默認(rèn)為關(guān)閉,即關(guān)閉應(yīng)用程序監(jiān)控。本實(shí)施例還提出將監(jiān)控信息記錄成為監(jiān)控日志,分析監(jiān)控日志得出監(jiān)控 報(bào)表。監(jiān)控信息是以明文件格式保存到監(jiān)控日志中,監(jiān)控日志文件記錄的數(shù)據(jù) 結(jié)構(gòu)如表所示URLMETHODSTART—TIMEEXECUTE—TIME連接信息執(zhí)行的方法開(kāi)始時(shí)間執(zhí)行時(shí)間SQLPARAMETERS執(zhí)4亍的i吾句執(zhí)行的參數(shù)表l監(jiān)控日志中,每?jī)山M監(jiān)控信息之間以連線分隔,每組監(jiān)控信息包括多個(gè)條目,每個(gè)條目單獨(dú)占一行,格式為監(jiān)控信息名=取值。以下示出兩組監(jiān)控信 息的具體示例SQL: UPDATE FROM T_MQ SET Fl = 'MIC' WHERE Fl = 'MIC2' PA隨ETERS:URL: jdbc: oracle: thin: SJ127. 0. 0. 1: TEST—DB METHOD: Statement, execute START—TIME: 1188976693633 EXECUTE—TIME: 200SQL: SELECT * FROM T_MQ Tl WHERE Tl. Fl= AND T2. F2= PARAMETERS: Mdl、 'value2'URL: jdbc: oracle: thin: 5)127. 0. 0. 1: TEST—DBMETHOD: Statement. executeQuerySTART—TIME: 1188976693633由于監(jiān)控信息是以明文件保存的,可以很方便地通過(guò)人工或者程序來(lái)分析 監(jiān)控日志,以得出統(tǒng)計(jì)報(bào)表。本實(shí)施例的應(yīng)用程序監(jiān)控過(guò)程如圖3所示,包括步驟S31,判斷得知配置連接信息中的監(jiān)控標(biāo)記為打開(kāi);步驟S32,啟動(dòng)應(yīng)用程序;步驟S33,打開(kāi)數(shù)據(jù)庫(kù)連接;步驟S34,執(zhí)行語(yǔ)句及應(yīng)用程序監(jiān)控;步驟S35,關(guān)閉應(yīng)用程序;步驟S36,分析監(jiān)控日志得出監(jiān)控才艮表。上述步驟S33,打開(kāi)數(shù)據(jù)庫(kù)連接及步驟S34,執(zhí)行語(yǔ)句及應(yīng)用程序監(jiān)控的 具體過(guò)程與第二實(shí)施例的應(yīng)用程序監(jiān)控方法類(lèi)似,故不贅述。上述步驟S36,分析監(jiān)控日志得出監(jiān)控報(bào)表包括 步驟S361:讀入監(jiān)控日志; 步驟S362:讀入下一行;步驟S363:如果當(dāng)前行不是分隔符"-------",則將當(dāng)前行作為一個(gè)條目保存到內(nèi)存;步驟S364:如果當(dāng)前行是分隔符,則開(kāi)始一個(gè)新的記錄對(duì)象,跳到步驟2; 如果當(dāng)前行是文件尾,則結(jié)束分析監(jiān)控日志的過(guò)程。經(jīng)過(guò)上述分析監(jiān)控日志的過(guò)程,可以得出統(tǒng)計(jì)才艮表。以下舉一具體示例i兌明采用本實(shí)施例監(jiān)控方法的應(yīng)用程序執(zhí)行流程。如 圖4所示,應(yīng)用程序執(zhí)行流程包括步驟S41,代理驅(qū)動(dòng)創(chuàng)建代理連接,準(zhǔn)備執(zhí)行查詢(xún)或更新語(yǔ)句;步驟S42,初始設(shè)置監(jiān)控標(biāo)記為真,即開(kāi)啟應(yīng)用程序監(jiān)控;并獲取管理配 置信息,保存在代理連接中,以進(jìn)行后續(xù)的判斷;步驟S43,代理驅(qū)動(dòng)判斷管理配置信息中監(jiān)控標(biāo)記trace的取值是否為打 開(kāi);若監(jiān)控標(biāo)記為打開(kāi)則進(jìn)行步驟S44,否則進(jìn)行步驟S46;步驟S44,代理驅(qū)動(dòng)判斷管理配置信息是否配置了過(guò)濾表達(dá)式;如果配置 了過(guò)濾表達(dá)式,則進(jìn)行步驟S45,否則進(jìn)行步驟S47;步驟S45,代理驅(qū)動(dòng)判斷當(dāng)前將要執(zhí)行的SQL語(yǔ)句是否符合過(guò)濾條件,若符合則進(jìn)行步驟S47,否則進(jìn)行步驟S46;步驟S46,設(shè)置監(jiān)控標(biāo)記為關(guān)閉,即不對(duì)當(dāng)前的SQL語(yǔ)句進(jìn)行監(jiān)控;進(jìn)行 步驟S47;步驟S47,代理連接記錄監(jiān)控信息,執(zhí)行SQL語(yǔ)句;步驟S48,代理連接執(zhí)行SQL語(yǔ)句完畢之后,判斷監(jiān)控標(biāo)記是否為打開(kāi), 若監(jiān)控標(biāo)記為打開(kāi)則進(jìn)行步驟S49;否則結(jié)束流程;步驟S49,將執(zhí)行的語(yǔ)句,開(kāi)始執(zhí)行的時(shí)間,執(zhí)行經(jīng)過(guò)的時(shí)間及執(zhí)行的參數(shù) 等監(jiān)控信息進(jìn)行記錄,保存到監(jiān)控日志中或者輸出到控制臺(tái),結(jié)束流程。上述過(guò)程中的步驟S41,應(yīng)用程序通過(guò)代理驅(qū)動(dòng)創(chuàng)建連接,而代理驅(qū)動(dòng)實(shí) 現(xiàn)了標(biāo)準(zhǔn)的JDBC驅(qū)動(dòng)接口 (即java. sql. Driver)以實(shí)現(xiàn)創(chuàng)建數(shù)據(jù)庫(kù)連接。代 理驅(qū)動(dòng)約定用于創(chuàng)建連接的連接信息格式示例如下jdbc: ksql: ORIGINAL—DRIVER: dbtype=DB_TYPE [: trace-on I off [: f i le-F ILE—NAME] [: f i Uer-FILE—REG]: 0RIGINAL_URL其中用[]包含的條目表示是可選的,用I隔開(kāi)的兩個(gè)或多個(gè)條目表示在 列出的值中選一個(gè)。上述jdbc:ksql表示該字符串是連接信息的前綴; ORIGINAL—DRIVER表示目標(biāo)數(shù)據(jù)庫(kù)的原始驅(qū)動(dòng)類(lèi),該條目的取值取決于目標(biāo)數(shù) 據(jù)庫(kù)所使用的真正驅(qū)動(dòng)類(lèi),如SQL SERVER 數(shù)據(jù)庫(kù)下為 com. microsof t. jdbc. sqlserver. SQLServerDriver ; dbtype=DB—TYPE指明 真正的數(shù)據(jù)庫(kù)類(lèi)型;dbtype二是固定字符串;DB-TYPE是表示目錄數(shù)據(jù)庫(kù)類(lèi)型 的整數(shù),系統(tǒng)約定1代表DB2-UDB數(shù)據(jù)庫(kù);2表示ORACLE數(shù)據(jù)庫(kù),3表示SQL SERVER數(shù)據(jù)庫(kù),4表示Sybase數(shù)據(jù)庫(kù)等;trace標(biāo)明是否要對(duì)該數(shù)據(jù)庫(kù)啟用 本實(shí)施例的應(yīng)用程序監(jiān)控,trace-打開(kāi)表示啟用應(yīng)用程序監(jiān)控,trace-關(guān)閉 表示關(guān)閉應(yīng)用程序監(jiān)控,默認(rèn)為關(guān)閉應(yīng)用程序監(jiān)控;file=FILE_NAME指明保 存監(jiān)控信息的文件地址;file是固定字符串,F(xiàn)ILE-NAME可以是一個(gè)文件目錄 也可以是字符串"console",表示直接將監(jiān)控的信息輸出到控制臺(tái);上述 filter-FILE-REG表明監(jiān)控的過(guò)濾條件,F(xiàn)ILE-REG是一個(gè)規(guī)則表達(dá)式字符串, 只有符合該表達(dá)式的語(yǔ)句才會(huì)被監(jiān)控并捕獲;ORIGINAL-URL表示原始的數(shù)據(jù) 庫(kù)連接信息,其取值由目標(biāo)數(shù)據(jù)庫(kù)決定。以下舉一個(gè)代理驅(qū)動(dòng)約定用于創(chuàng)建連接的連接信息具體示例jdbc:ksql: oracle, jdbc. driver. OracleDriver: dbtype=oracle9: trace =off: f ile=C|ksql. log: jdbc: oracle: thin: M27. 0. 0. 1: dbName從上述示例可以看到,代理驅(qū)動(dòng)的連接信息中包含了其它真正的數(shù)據(jù)庫(kù) 驅(qū)動(dòng)信息,如果需要連接到其它數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),只需要改變 ORIGINAL—DRIVER和ORIGINAL-URL條目的取值就可以實(shí)現(xiàn)。上述實(shí)施例中應(yīng)用程序監(jiān)控的啟用與關(guān)閉是通過(guò)設(shè)置監(jiān)控標(biāo)記來(lái)實(shí)現(xiàn) 的,優(yōu)點(diǎn)在于不需要提供額外的接口,實(shí)際中軟件系統(tǒng)不需要頻繁地啟用/關(guān)閉應(yīng)用程序監(jiān)控,而是在碰到性能或其它問(wèn)題時(shí)才啟用;另一方面,由于修改監(jiān)控標(biāo)記后需要重啟應(yīng)用程序才能生效,這對(duì)于不能中斷服務(wù)的應(yīng)用程序是 不可接受的。為此本發(fā)明提出第四實(shí)施例,提出動(dòng)態(tài)啟用/關(guān)閉應(yīng)用程序監(jiān)控, 應(yīng)用程序監(jiān)控的啟用與關(guān)閉不需要配置在配置連接信息當(dāng)中,而是由代理驅(qū) 動(dòng)提供一個(gè)接口供應(yīng)用程序調(diào)用,實(shí)現(xiàn)動(dòng)態(tài)啟用/關(guān)閉應(yīng)用程序監(jiān)控。采用本實(shí)施例的應(yīng)用程序監(jiān)控過(guò)程如圖5所示,包括步驟S51,啟動(dòng)應(yīng)用程序;步驟S52,打開(kāi)數(shù)據(jù)庫(kù)連接;步驟S53,動(dòng)態(tài)啟用應(yīng)用程序監(jiān)控;步驟S54,執(zhí)行語(yǔ)句及應(yīng)用程序監(jiān)控;步驟S55,動(dòng)態(tài)關(guān)閉應(yīng)用程序監(jiān)控;步驟S56,分析監(jiān)控日志得出監(jiān)控才艮表。上述流程中,打開(kāi)數(shù)據(jù)庫(kù)連接與執(zhí)行語(yǔ)句與前述實(shí)施例類(lèi)似,都是通過(guò) 代理驅(qū)動(dòng)實(shí)現(xiàn)的。而動(dòng)態(tài)啟用應(yīng)用程序監(jiān)控是指應(yīng)用程序調(diào)用接口,控制代 理驅(qū)動(dòng)記錄監(jiān)控信息;而動(dòng)態(tài)關(guān)閉應(yīng)用程序監(jiān)控是指應(yīng)用程序調(diào)用接口,控 制代理驅(qū)動(dòng)停止記錄監(jiān)控信息。與第三實(shí)施例相比,本實(shí)施例的優(yōu)點(diǎn)在于提供動(dòng)態(tài)啟用/關(guān)閉應(yīng)用程序監(jiān) 控,應(yīng)用程序在啟用/關(guān)閉應(yīng)用程序監(jiān)控后無(wú)需重啟便能生效;缺點(diǎn)在于需要 提供額外接口并且增加實(shí)現(xiàn)的難度。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專(zhuān)利范圍, 凡是利用本發(fā)明說(shuō)明書(shū)及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接 或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專(zhuān)利保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種應(yīng)用程序監(jiān)控系統(tǒng),包括JDBC驅(qū)動(dòng)接口、至少一數(shù)據(jù)庫(kù)驅(qū)動(dòng)和至少一數(shù)據(jù)庫(kù),所述至少一數(shù)據(jù)庫(kù)通過(guò)相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)與所述JDBC驅(qū)動(dòng)接口連接,通過(guò)所述JDBC驅(qū)動(dòng)接口接收并執(zhí)行所述應(yīng)用程序發(fā)出的語(yǔ)句,其特征在于還包括代理驅(qū)動(dòng),所述代理驅(qū)動(dòng)通過(guò)JDBC驅(qū)動(dòng)接口和至少一數(shù)據(jù)庫(kù)驅(qū)動(dòng)分別與相應(yīng)的數(shù)據(jù)庫(kù)連接,接收來(lái)自所述應(yīng)用程序的語(yǔ)句,記錄執(zhí)行所述語(yǔ)句產(chǎn)生的監(jiān)控信息。
2. 根據(jù)權(quán)利要求1所述的應(yīng)用程序監(jiān)控系統(tǒng),其特征在于,所述應(yīng)用程 序通過(guò)代理驅(qū)動(dòng)創(chuàng)建至少一數(shù)據(jù)庫(kù)連接,所述代理驅(qū)動(dòng)創(chuàng)建并返回代理連接。
3. 才艮據(jù)權(quán)利要求1或2所述的應(yīng)用程序監(jiān)控系統(tǒng),其特征在于,所述代 理連接實(shí)現(xiàn)標(biāo)準(zhǔn)的JDBC接口 ,引用由所述JDBC驅(qū)動(dòng)創(chuàng)建的原始連接對(duì)象, 以保存所述應(yīng)用程序的連接信息及附加的管理配置信息;所述代理連接創(chuàng)建 代理聲明,實(shí)現(xiàn)標(biāo)準(zhǔn)的聲明接口,引用由原始連接對(duì)象創(chuàng)建的原始聲明對(duì)象。
4. 根據(jù)權(quán)利要求3所述的應(yīng)用程序監(jiān)控系統(tǒng),其特征在于,所述代理聲 明執(zhí)行應(yīng)用程序發(fā)出的語(yǔ)句,所述代理驅(qū)動(dòng)記錄代理聲明執(zhí)行的語(yǔ)句和/或產(chǎn) 生的監(jiān)控信息。
5. —種應(yīng)用程序監(jiān)控方法,基于應(yīng)用程序監(jiān)控系統(tǒng)實(shí)現(xiàn)應(yīng)用程序監(jiān)控, 所述應(yīng)用程序監(jiān)控系統(tǒng)包括代理驅(qū)動(dòng)、JDBC驅(qū)動(dòng)接口、至少一數(shù)據(jù)庫(kù)驅(qū)動(dòng)和 至少一數(shù)據(jù)庫(kù),所述至少一數(shù)據(jù)庫(kù)通過(guò)相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)與所述JDBC驅(qū)動(dòng)接 口連接,所述代理驅(qū)動(dòng)分別與JDBC驅(qū)動(dòng)接口應(yīng)用程序連接,接收來(lái)自所述應(yīng) 用程序的語(yǔ)句,記錄執(zhí)行所述語(yǔ)句產(chǎn)生的監(jiān)控信息,其特征在于,包括代理驅(qū)動(dòng)打開(kāi)數(shù)據(jù)庫(kù)連接的步驟; 代理驅(qū)動(dòng)接收來(lái)自應(yīng)用程序的語(yǔ)句的步驟; 代理驅(qū)動(dòng)記錄監(jiān)控信息的步驟; 數(shù)據(jù)庫(kù)執(zhí)行語(yǔ)句的步驟; 代理驅(qū)動(dòng)記錄監(jiān)控信息的步驟; 代理驅(qū)動(dòng)關(guān)閉數(shù)據(jù)庫(kù)連接的步驟。
6. 才艮據(jù)權(quán)利要求5所述的應(yīng)用程序監(jiān)控方法,其特征在于還包括分析監(jiān)控信息,得出監(jiān)控報(bào)表的步驟。
7. 根據(jù)權(quán)利要求5或6所述的應(yīng)用程序監(jiān)控方法,其特征在于,還包括: 設(shè)置監(jiān)控標(biāo)記的步驟;代理驅(qū)動(dòng)根據(jù)所述監(jiān)控標(biāo)記記錄監(jiān)控信息或不記錄監(jiān)控信息的步驟。
8. 根據(jù)權(quán)利要求7所述的應(yīng)用程序監(jiān)控方法,其特征在于 所述監(jiān)控標(biāo)記由代理驅(qū)動(dòng)設(shè)置在連接信息中,由代理驅(qū)動(dòng)修改。
9. 根據(jù)權(quán)利要求5所述的應(yīng)用程序監(jiān)控方法,其特征在于,所述代理驅(qū) 動(dòng)提供接口供應(yīng)用程序調(diào)用,以控制代理驅(qū)動(dòng)記錄監(jiān)控信息。
10. 根據(jù)權(quán)利要求9所述的應(yīng)用程序監(jiān)控方法,其特征在于,還包括 應(yīng)用程序調(diào)用接口 ,控制所述代理驅(qū)動(dòng)記錄監(jiān)控信息的步驟;和/或應(yīng)用程序調(diào)用接口 ,控制所述代理驅(qū)動(dòng)停止記錄監(jiān)控信息的步驟。
全文摘要
本發(fā)明提供一種應(yīng)用程序監(jiān)控系統(tǒng),包括JDBC驅(qū)動(dòng)接口、至少一數(shù)據(jù)庫(kù)驅(qū)動(dòng)和至少一數(shù)據(jù)庫(kù),至少一數(shù)據(jù)庫(kù)通過(guò)相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)與JDBC驅(qū)動(dòng)接口連接,通過(guò)JDBC驅(qū)動(dòng)接口接收并執(zhí)行應(yīng)用程序發(fā)出的語(yǔ)句,還包括代理驅(qū)動(dòng),代理驅(qū)動(dòng)通過(guò)JDBC驅(qū)動(dòng)接口和至少一數(shù)據(jù)庫(kù)驅(qū)動(dòng)分別與相應(yīng)的數(shù)據(jù)庫(kù)連接,接收來(lái)自應(yīng)用程序的語(yǔ)句,記錄執(zhí)行語(yǔ)句產(chǎn)生的監(jiān)控信息。本發(fā)明還提供一種應(yīng)用程序監(jiān)控方法。本發(fā)明提供的應(yīng)用程序監(jiān)控系統(tǒng)與監(jiān)控方法通過(guò)代理驅(qū)動(dòng)的方式,對(duì)SQL語(yǔ)句的執(zhí)行情況進(jìn)行監(jiān)控和管理,可方便地實(shí)現(xiàn)跨數(shù)據(jù)庫(kù)的監(jiān)控及管理;在數(shù)據(jù)庫(kù)驅(qū)動(dòng)層上實(shí)現(xiàn)了對(duì)SQL語(yǔ)句的監(jiān)控及管理,不需要第三方監(jiān)控工具,具有跨數(shù)據(jù)庫(kù)、易于監(jiān)控及方便管理的優(yōu)點(diǎn)。
文檔編號(hào)G06F11/34GK101226497SQ20071019533
公開(kāi)日2008年7月23日 申請(qǐng)日期2007年12月10日 優(yōu)先權(quán)日2007年12月10日
發(fā)明者潘國(guó)林 申請(qǐng)人:金蝶軟件(中國(guó))有限公司