專利名稱:Sql語(yǔ)句的檢驗(yàn)方法、裝置及提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫(kù)處理領(lǐng)域,尤其涉及提高數(shù)據(jù)庫(kù)可靠性的技術(shù)。
背景技術(shù):
在軟件行業(yè),數(shù)據(jù)庫(kù)作為存儲(chǔ)中心,各種數(shù)據(jù)庫(kù)應(yīng)用都是在數(shù)據(jù)庫(kù)上開(kāi)展。在電信 業(yè)務(wù)軟件行業(yè),對(duì)數(shù)據(jù)庫(kù)的要求尤為嚴(yán)格。一方面,需要面對(duì)的信息量越來(lái)越龐大 ’另一方 面,數(shù)據(jù)庫(kù)處理的業(yè)務(wù)邏輯越來(lái)越復(fù)雜。所以,在數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中,保證數(shù)據(jù)庫(kù)可靠性是 一項(xiàng)重要的工作。在現(xiàn)有的系統(tǒng)中,數(shù)據(jù)庫(kù)訪問(wèn)模塊介于各種業(yè)務(wù)處理模塊和數(shù)據(jù)庫(kù)之間,它接收 業(yè)務(wù)處理模塊發(fā)來(lái)的SQLGtructured Query Language,結(jié)構(gòu)化查詢語(yǔ)言)語(yǔ)句,發(fā)給數(shù)據(jù) 庫(kù)執(zhí)行,取得執(zhí)行結(jié)果并返回給業(yè)務(wù)處理模塊。如果SQL語(yǔ)句設(shè)計(jì)不當(dāng),可能在執(zhí)行的時(shí)候 出現(xiàn)性能問(wèn)題,導(dǎo)致數(shù)據(jù)庫(kù)性能降低,甚至引起整個(gè)系統(tǒng)業(yè)務(wù)癱瘓?,F(xiàn)有的數(shù)據(jù)庫(kù)訪問(wèn)模塊 存在缺陷,所以有必要加以改進(jìn)。
發(fā)明內(nèi)容
本發(fā)明的目的在于,提供SQL語(yǔ)句的檢驗(yàn)方法、裝置及提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng), 可提高數(shù)據(jù)庫(kù)可靠性。本發(fā)明提出一種SQL語(yǔ)句的檢驗(yàn)方法,在執(zhí)行數(shù)據(jù)庫(kù)操作前,對(duì)所述SQL語(yǔ)句進(jìn)行 檢驗(yàn);包括步驟設(shè)置檢驗(yàn)規(guī)則;根據(jù)所述SQL語(yǔ)句,取得執(zhí)行計(jì)劃以及與執(zhí)行計(jì)劃關(guān)聯(lián)的數(shù)據(jù)字典信息;根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢驗(yàn)并取得檢驗(yàn)結(jié)果。優(yōu)選地,所述根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢 驗(yàn)并取得檢驗(yàn)結(jié)果的步驟后還包括步驟根據(jù)檢驗(yàn)結(jié)果判斷是否進(jìn)行告警;如是,進(jìn)行告警,并進(jìn)行下一步驟;否則,執(zhí)行 所述數(shù)據(jù)庫(kù)操作;根據(jù)所述告警判斷數(shù)據(jù)庫(kù)操作是否執(zhí)行;如是,則執(zhí)行所述數(shù)據(jù)庫(kù)操作;否則,結(jié)束O優(yōu)選地,所述取得執(zhí)行計(jì)劃的方式包括通過(guò)查詢數(shù)據(jù)庫(kù)系統(tǒng)表取得、通過(guò)數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)句的分析取得或者通過(guò)對(duì)SQL 語(yǔ)句分析取得。優(yōu)選地,所述提取SQL語(yǔ)句分析取得執(zhí)行計(jì)劃的方式進(jìn)一步包括步驟通過(guò)標(biāo)注表示所述執(zhí)行計(jì)劃的執(zhí)行路線;按照?qǐng)?zhí)行路線分析取得所述執(zhí)行計(jì)劃。本發(fā)明還提出一種SQL語(yǔ)句的檢驗(yàn)裝置,在執(zhí)行數(shù)據(jù)庫(kù)操作前,對(duì)所述SQL語(yǔ)句進(jìn)行檢驗(yàn);所述裝置包括檢驗(yàn)規(guī)則設(shè)置模塊,設(shè)置檢驗(yàn)規(guī)則;執(zhí)行計(jì)劃提取模塊,根據(jù)所述SQL語(yǔ)句,取得執(zhí)行計(jì)劃以及與執(zhí)行計(jì)劃關(guān)聯(lián)的數(shù)據(jù)字典信息并保存;檢驗(yàn)?zāi)K,根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢驗(yàn) 并取得檢驗(yàn)結(jié)果。優(yōu)選地,所述執(zhí)行計(jì)劃提取模塊進(jìn)一步包括執(zhí)行路線表示單元,通過(guò)標(biāo)注表示所述執(zhí)行計(jì)劃的執(zhí)行路線;執(zhí)行計(jì)劃提取單元,按照?qǐng)?zhí)行路線分析取得所述執(zhí)行計(jì)劃。優(yōu)選地,所述裝置還包括告警判斷模塊,根據(jù)所述檢驗(yàn)?zāi)K獲得的檢驗(yàn)結(jié)果判斷是否進(jìn)行告警;執(zhí)行判斷模塊,根據(jù)所述告警判斷數(shù)據(jù)庫(kù)操作是否執(zhí)行。優(yōu)選地,所述裝置還包括數(shù)據(jù)字典提取模塊,通過(guò)分析數(shù)據(jù)庫(kù)系統(tǒng)表或者分析數(shù)據(jù)庫(kù)代碼提取數(shù)據(jù)字典信 肩、ο本發(fā)明還提出一種提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng),在執(zhí)行數(shù)據(jù)庫(kù)操作前,對(duì)所述SQL 語(yǔ)句進(jìn)行檢驗(yàn);所述系統(tǒng)包括檢驗(yàn)規(guī)則設(shè)置模塊,設(shè)置檢驗(yàn)規(guī)則;SQL語(yǔ)句獲取模塊,接收外部的數(shù)據(jù)庫(kù)操作,獲取SQL語(yǔ)句;執(zhí)行計(jì)劃提取模塊,根據(jù)所述SQL語(yǔ)句,取得執(zhí)行計(jì)劃以及與執(zhí)行計(jì)劃關(guān)聯(lián)的數(shù) 據(jù)字典信息并保存;檢驗(yàn)?zāi)K,根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢驗(yàn) 并取得檢驗(yàn)結(jié)果;SQL語(yǔ)句執(zhí)行模塊,向數(shù)據(jù)庫(kù)發(fā)送執(zhí)行SQL語(yǔ)句請(qǐng)求,并處理返回結(jié)果。優(yōu)選地,所述執(zhí)行計(jì)劃提取模塊進(jìn)一步包括執(zhí)行路線表示單元,通過(guò)標(biāo)注表示所述執(zhí)行計(jì)劃的執(zhí)行路線;執(zhí)行計(jì)劃提取單元,按照?qǐng)?zhí)行路線分析取得所述執(zhí)行計(jì)劃。優(yōu)選地,所述系統(tǒng)還包括告警判斷模塊,根據(jù)所述檢驗(yàn)?zāi)K獲得的檢驗(yàn)結(jié)果判斷是否進(jìn)行告警;執(zhí)行判斷模塊,根據(jù)所述告警判斷數(shù)據(jù)庫(kù)操作是否執(zhí)行。
優(yōu)選地,所述系統(tǒng)還包括數(shù)據(jù)字典提取模塊,通過(guò)分析數(shù)據(jù)庫(kù)系統(tǒng)表或者分析數(shù)據(jù)庫(kù)代碼提取數(shù)據(jù)字典信息。本發(fā)明的SQL語(yǔ)句的檢驗(yàn)方法、裝置及提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng),通過(guò)對(duì)SQL語(yǔ)句 的分析與檢測(cè),限制執(zhí)行可能出現(xiàn)問(wèn)題的數(shù)據(jù)庫(kù)操作,以防止由于SQL語(yǔ)句設(shè)計(jì)不當(dāng)而導(dǎo) 致的數(shù)據(jù)庫(kù)性能降低乃至引起數(shù)據(jù)庫(kù)癱瘓等問(wèn)題,保證了實(shí)際執(zhí)行SQL語(yǔ)句質(zhì)量,從而提 高應(yīng)用系統(tǒng)數(shù)據(jù)庫(kù)可靠性。
圖1是本發(fā)明一實(shí)施例中SQL語(yǔ)句的檢驗(yàn)方法的步驟流程示意圖2是本發(fā)明一實(shí)施例的一實(shí)施方式中SQL語(yǔ)句的檢驗(yàn)方法的步驟流程示意圖;圖3是本發(fā)明一實(shí)施例的另一實(shí)施方式中取得執(zhí)行計(jì)劃的步驟流程示意圖;圖4是本發(fā)明一實(shí)施例中執(zhí)行路線的示意圖;圖5是本發(fā)明一實(shí)施例中多表聯(lián)合執(zhí)行路線的示意圖;圖6是本發(fā)明一實(shí)施例的另一實(shí)施方式中SQL語(yǔ)句的檢驗(yàn)方法的步驟流程示意 圖;圖7是本發(fā)明另一實(shí)施例中SQL語(yǔ)句的檢驗(yàn)裝置的結(jié)構(gòu)示意圖;圖8是本發(fā)明另一實(shí)施例中執(zhí)行計(jì)劃提取模塊的結(jié)構(gòu)示意圖;圖9是本發(fā)明另一實(shí)施例的一實(shí)施方式中SQL語(yǔ)句的檢驗(yàn)裝置的結(jié)構(gòu)示意圖;圖10是本發(fā)明另一實(shí)施例的另一實(shí)施方式中SQL語(yǔ)句的檢驗(yàn)裝置的結(jié)構(gòu)示意 圖;圖11是本發(fā)明另一實(shí)施例中提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng)的結(jié)構(gòu)示意圖;圖12是本發(fā)明另一實(shí)施例中提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng)的執(zhí)行計(jì)劃提取模塊的結(jié) 構(gòu)示意圖;圖13是本發(fā)明另一實(shí)施例的一實(shí)施方式中提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng)的結(jié)構(gòu)示意 圖;圖14是本發(fā)明另一實(shí)施例的另一實(shí)施方式中提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng)的結(jié)構(gòu)示 意圖。本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說(shuō)明。
具體實(shí)施例方式本發(fā)明針對(duì)現(xiàn)有數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中,數(shù)據(jù)庫(kù)處理模塊向數(shù)據(jù)庫(kù)發(fā)送數(shù)據(jù)庫(kù)請(qǐng)求 時(shí),可能出現(xiàn)由于SQL語(yǔ)句設(shè)計(jì)不當(dāng)而引起系統(tǒng)穩(wěn)定性問(wèn)題,而在SQL語(yǔ)句實(shí)際執(zhí)行前,對(duì) 所述SQL語(yǔ)句進(jìn)行檢測(cè),以確定所述SQL語(yǔ)句是否存在問(wèn)題。并可在檢測(cè)出設(shè)計(jì)不當(dāng)?shù)腟QL 語(yǔ)句后,根據(jù)其可能產(chǎn)生問(wèn)題嚴(yán)重性,判斷所述SQL語(yǔ)句是否執(zhí)行。如此,可防止由于SQL語(yǔ) 句設(shè)計(jì)不當(dāng)而導(dǎo)致的數(shù)據(jù)庫(kù)性能下降,甚至引起數(shù)據(jù)庫(kù)癱瘓等問(wèn)題,從而提高應(yīng)用系統(tǒng)數(shù) 據(jù)庫(kù)可靠性。比如通過(guò)分析數(shù)據(jù)庫(kù)代碼或者數(shù)據(jù)庫(kù)字典信息能夠知道什么表在什么列上 有索引,通過(guò)分析數(shù)據(jù)庫(kù)訪問(wèn)模塊接收的SQL語(yǔ)句能夠知道需要對(duì)哪些表在什么列上創(chuàng)建 索引。所以可以通過(guò)在數(shù)據(jù)庫(kù)訪問(wèn)模塊中,增加SQL語(yǔ)句檢驗(yàn)功能,以提高數(shù)據(jù)庫(kù)可靠性。參照?qǐng)D1,一種SQL語(yǔ)句的檢驗(yàn)方法,在執(zhí)行數(shù)據(jù)庫(kù)操作前,對(duì)SQL語(yǔ)句進(jìn)行檢驗(yàn); 可包括步驟S100、設(shè)置檢驗(yàn)規(guī)則;步驟S11、根據(jù)所述SQL語(yǔ)句,取得執(zhí)行計(jì)劃以及與執(zhí)行計(jì)劃關(guān)聯(lián)的數(shù)據(jù)字典信 息;步驟S12、根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢驗(yàn)并 取得檢驗(yàn)結(jié)果。如步驟SlOO所述,在進(jìn)行數(shù)據(jù)庫(kù)請(qǐng)求處理之前,可先設(shè)定好判斷是否對(duì)SQL語(yǔ)句 進(jìn)行檢驗(yàn)。所述檢驗(yàn)規(guī)則可在設(shè)定完成并保存后,可重復(fù)使用,且可根據(jù)具體需要進(jìn)行檢驗(yàn) 規(guī)則的增加、刪除和/或修改等。
如步驟Sl 1所述,獲取所述SQL語(yǔ)句后,可通過(guò)分析所述SQL語(yǔ)句取得執(zhí)行計(jì)劃以 及與執(zhí)行計(jì)劃關(guān)聯(lián)的數(shù)據(jù)字典信息并保存。所述執(zhí)行計(jì)劃包括執(zhí)行步驟以及每個(gè)步驟中的 操作對(duì)象。所述執(zhí)行步驟是數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)句執(zhí)行的步驟組合;所述步驟可以是從數(shù)據(jù)庫(kù) 中物理檢索數(shù)據(jù)行,或者是用其他方式處理數(shù)據(jù)行等對(duì)操作對(duì)象進(jìn)行的具體操作,取得操 作結(jié)果,提供給數(shù)據(jù)庫(kù)操作指令發(fā)送者使用。所述操作對(duì)象包括表名、右邊表連接字段、左 邊表連接字段、條件字段和返回字段等。取得執(zhí)行計(jì)劃的方式包括查詢數(shù)據(jù)庫(kù)系統(tǒng)表取得、通過(guò)數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)句的分析 取得或者通過(guò)對(duì)SQL語(yǔ)句的分析取得。查詢數(shù)據(jù)庫(kù)系統(tǒng)表取得執(zhí)行計(jì)劃的方式,是由于常用的商用數(shù)據(jù)庫(kù)會(huì)將執(zhí)行過(guò)的 SQL語(yǔ)句執(zhí)行計(jì)劃保存在數(shù)據(jù)庫(kù)系統(tǒng)表中,因此可通過(guò)訪問(wèn)數(shù)據(jù)庫(kù)中相關(guān)的系統(tǒng)表獲取相 應(yīng)SQL語(yǔ)句的執(zhí)行計(jì)劃。通過(guò)數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)句的分析取得,是通過(guò)向數(shù)據(jù)庫(kù)發(fā)送分析SQL語(yǔ)句執(zhí)行計(jì)劃 的請(qǐng)求,由數(shù)據(jù)庫(kù)分析獲取所述SQL語(yǔ)句的執(zhí)行計(jì)劃,并將結(jié)果返回。通過(guò)程序分析SQL語(yǔ)句執(zhí)行計(jì)劃的方式,是利用標(biāo)注表示出執(zhí)行計(jì)劃的執(zhí)行路 線,根據(jù)所述執(zhí)行路線進(jìn)行分析,從而取得執(zhí)行計(jì)劃。如步驟S 12所述,根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn) 行檢驗(yàn),可獲知所述SQL語(yǔ)句中是否存在設(shè)計(jì)不當(dāng)?shù)葐?wèn)題(即是否存在問(wèn)題);并可產(chǎn)生檢 驗(yàn)結(jié)果,該檢驗(yàn)結(jié)果包括存在問(wèn)題以及不存在問(wèn)題兩種。如果檢驗(yàn)結(jié)果是存在問(wèn)題,則進(jìn)行口目。所述檢測(cè)可以是基于所述該SQL語(yǔ)句的執(zhí)行計(jì)劃、數(shù)據(jù)字典信息,根據(jù)檢驗(yàn)規(guī)則 進(jìn)行。所述數(shù)據(jù)字典信息可包括索引信息、表信息、視圖信息和/或字段信息等。所述索引 信息包括索引名稱、索引列結(jié)構(gòu)(比如索引包括哪些列以及列的先后順序)以及索引屬性 (比如索引是否具有唯一性)等。所述表信息包括表名稱以及表結(jié)構(gòu)(比如表包括哪些列) 等。所述視圖信息包括視圖名稱以及視圖結(jié)構(gòu)(比如視圖由哪些表或者視圖組成)等。所 述字段信息包括字段名稱、數(shù)據(jù)類(lèi)型等。以下結(jié)合實(shí)例對(duì)所述步驟進(jìn)行詳細(xì)說(shuō)明。例1,設(shè)置檢驗(yàn)規(guī)則為如果發(fā)現(xiàn)存在兩個(gè)索引在相同的列上重復(fù)定義的情況,則口目。違反規(guī)則1情況舉例假設(shè)索引idxl包括一個(gè)字段,是Cl,索引idx2包括兩個(gè)字段,先后順序是cl、c2, 則索引idxl和idx2在相同的列cl上重復(fù)定義。這種情況下,應(yīng)當(dāng)采取的糾正措施是刪除索引idxl。例2,設(shè)置檢驗(yàn)規(guī)則為發(fā)現(xiàn)SQL語(yǔ)句對(duì)某張大表的查詢中沒(méi)有用上任何索引的情 況,則告警。違反規(guī)則2情況舉例假設(shè)SQL語(yǔ)句是select cl from t where c3 =,1,。則通過(guò)執(zhí)行路線圖可知, 該SQL使用了表t。通過(guò)訪問(wèn)數(shù)據(jù)存儲(chǔ)模塊,假設(shè)發(fā)現(xiàn)它是大表。假設(shè)該表共有四個(gè)字段, 分別是(31、(2、(33、(34,共有兩個(gè)索引,分別是索引idxl、idx2,索引idxl包括一個(gè)字段,是 cl,索引idx2包括兩個(gè)字段,先后順序是c2、c3。
通過(guò)執(zhí)行路線圖可知,需要在表t上創(chuàng)建一個(gè)索引,包括一個(gè)字段,列字段名是 c30從該表的數(shù)據(jù)字典信息中知道,不存在需要的的索引。所以,對(duì)于表t,該SQL語(yǔ)句 不能使用任何索引,該SQL語(yǔ)句執(zhí)行的時(shí)候采用全表掃描的方式。這種情況下,應(yīng)當(dāng)采取的糾正措施是創(chuàng)建索引,包括一個(gè)字段,列字段名是c3。例3,設(shè)置檢驗(yàn)規(guī)則為發(fā)現(xiàn)SQL語(yǔ)句對(duì)某張大表的查詢中只有部分條件用上了非 唯一性索引,則告警。違反規(guī)則3情況舉例假設(shè)SQLi吾句是select*from t where c2 =,1,and c3 =,3,。則通過(guò)執(zhí)行路 線圖可知,該SQL使用了表t。通過(guò)訪問(wèn)數(shù)據(jù)存儲(chǔ)模塊,假設(shè)發(fā)現(xiàn)它是大表。假設(shè)表t共有 四個(gè)字段,分別是cl、c2、c3、c4,共有兩個(gè)索引,分別是索引idxl、idx2,索引idxl是唯一 性索引,包括一個(gè)字段,是c 1,非唯一性索引idx2包括一個(gè)字段,是c2。通過(guò)執(zhí)行路線圖可知,需要在表t上創(chuàng)建一個(gè)索引,索引的組成分兩種情況描述。 第一種情況,對(duì)索引唯一性沒(méi)有要求(即可以是唯一性索引,也可以是非唯一性索引的情 況),要?jiǎng)?chuàng)建的索引需要包括兩個(gè)字段,按照字段順序區(qū)分,可以是以下兩種情況中的任何 一種,分別是索引idxdl,包括兩個(gè)字段,按照字段先后順序是c2、c3,索引idxd2,包括兩 個(gè)字段,按照字段先后順序是c3、c2 ;第二種情況,如果僅限于唯一性索引,則可以是以下 兩種情況中的任何一種,分別是索引idxd3,包括字段c2,索引idxd4,包括字段c3。從數(shù)據(jù)字典信息中知道,不存在需要的索引。但是由于索引idx2的字段c2是索 引idxdl的字段的先導(dǎo)列,所以對(duì)于表t,SQL語(yǔ)句能夠使用索引idx2,此時(shí)只有部分條件 "c2 =’ 1’”用上了非唯一性索引,剩下的條件“c3 =’ 3’”將導(dǎo)致執(zhí)行計(jì)劃是在索引檢索的 結(jié)果集中進(jìn)一步過(guò)濾,采用這樣的執(zhí)行計(jì)劃性能不是最好。這種情況下,應(yīng)當(dāng)采取的糾正措施是創(chuàng)建索引idxdl、idxd2、idxd3、idxd4中的任 何一個(gè)索引。參照?qǐng)D2,在本實(shí)施例的一實(shí)施方式中,所述步驟S12后還包括步驟S120、根據(jù)檢驗(yàn)結(jié)果判斷是否進(jìn)行告警;如果檢驗(yàn)結(jié)果是存在問(wèn)題,則進(jìn)行 告警(步驟S121),并進(jìn)行步驟S123;否則,執(zhí)行所述數(shù)據(jù)庫(kù)操作(步驟S122);步驟S123、根據(jù)所述告警判斷數(shù)據(jù)庫(kù)操作是否執(zhí)行;如是,則執(zhí)行所述數(shù)據(jù)庫(kù)操 作(步驟S122);否則,結(jié)束。如步驟S120所述,根據(jù)檢驗(yàn)結(jié)果可獲知所述SQL語(yǔ)句中是否存在問(wèn)題。如果所述 SQL語(yǔ)句中存在問(wèn)題,則可進(jìn)行告警(步驟S121);否則,執(zhí)行所述SQL語(yǔ)句(步驟S122), 獲得執(zhí)行結(jié)果返回給所述數(shù)據(jù)庫(kù)操作的發(fā)送者。如步驟S123所述,對(duì)步驟S120中的告警,可根據(jù)問(wèn)題的嚴(yán)重性進(jìn)行分級(jí),分為可 執(zhí)行告警以及不可執(zhí)行告警。所述告警為可執(zhí)行告警,則表示被告警的所述SQL語(yǔ)句可以 執(zhí)行。所述告警為不可執(zhí)行告警,則表示被告警的所述SQL語(yǔ)句不可以執(zhí)行。當(dāng)告警產(chǎn)生 后,可通過(guò)判斷告警的級(jí)別,確定所述SQL語(yǔ)句是否執(zhí)行。如可執(zhí)行則執(zhí)行(步驟S122); 否則,結(jié)束步驟。如果違反上述例1中設(shè)置的檢驗(yàn)規(guī)則,則發(fā)出告警,并標(biāo)識(shí)該告警為可執(zhí)行告警, 所述SQL語(yǔ)句可以執(zhí)行。如果違反上述例2中設(shè)置的檢驗(yàn)規(guī)則,則發(fā)出告警,并標(biāo)識(shí)該告警為不可執(zhí)行告警,所述SQL語(yǔ)句不可以執(zhí)行。如果違反上述例3中設(shè)置的檢驗(yàn)規(guī)則,則發(fā)出 告警,并標(biāo)識(shí)告警為可執(zhí)行告警,所述SQL語(yǔ)句可以執(zhí)行。參照?qǐng)D3,在本實(shí)施例的另一實(shí)施方式中,所述通過(guò)分析SQL語(yǔ)句執(zhí)行計(jì)劃的方式 可包括步驟S110、通過(guò)標(biāo)注表示所述執(zhí)行計(jì)劃的執(zhí)行路線;步驟S111、按照?qǐng)?zhí)行路線分析取得所述執(zhí)行計(jì)劃。如步驟Sl 10所述,提取SQL語(yǔ)句進(jìn)行標(biāo)注。所述標(biāo)注可包括表名標(biāo)注、右邊表連 接字段標(biāo)注、左邊表連接字段標(biāo)注、條件字段標(biāo)注和返回字段標(biāo)注等。參照?qǐng)D4,為對(duì)所述標(biāo)注進(jìn)行更形象的說(shuō)明,可將所述標(biāo)注分區(qū),表示執(zhí)行計(jì)劃的 執(zhí)行路線。A區(qū)為表名標(biāo)注區(qū)、B區(qū)為左邊表連接字段標(biāo)注區(qū)、C區(qū)為右邊表連接字段標(biāo)注 區(qū)、D區(qū)為條件字段標(biāo)注區(qū)和E區(qū)為返回字段標(biāo)注區(qū)。其中,直線中間箭頭表示數(shù)據(jù)訪問(wèn)方向,直線中間下面區(qū)域是表名標(biāo)注區(qū)(A區(qū)), 用于標(biāo)注表名稱。直線左右兩個(gè)端點(diǎn)表示表與表之間的連接,左右端點(diǎn)下面分別是左邊表 連接字段標(biāo)注區(qū)(B區(qū))、右邊表連接字段標(biāo)注區(qū)(C區(qū)),B區(qū)用于標(biāo)注與左邊表連接的字 段列表,C區(qū)用于標(biāo)注與右邊表連接的字段列表。直線中間上面區(qū)域是條件字段標(biāo)注區(qū)(D 區(qū)),標(biāo)注SQL語(yǔ)句中用到的條件字段列表。直線上有一根折線分支的區(qū)域?yàn)榉祷刈侄螛?biāo)注 區(qū)(E區(qū)),標(biāo)注SQL語(yǔ)句中的返回字段列表。參照?qǐng)D5,是多表聯(lián)合SQL語(yǔ)句執(zhí)行路線示意圖。該圖表示了三張表聯(lián)合查詢SQL 語(yǔ)句的執(zhí)行路線,所述SQL語(yǔ)句可以是Selectt2. c2, t2. c3, t3. c3Fromtl,t2,t3Wheretl. cl = 1 and tl. c2 = 1 and tl. c3 = 1and tl. c4 = tl. cl and tl. c5 = t2. c5and t2. c4 = t3. cl表T3、T2和Tl按先后順序從右至左邊表連接。所述表T3的表名為T(mén)3、于左邊表 連接字段為空、與右邊表連接字段為Cl、條件字段為c2以及返回字段為c3 ;所述表T2的表 名為T(mén)2、與左邊表連接字段為c4、與右邊表連接字段為(cl、c5)、條件字段為空以及返回字 段為(c2、c3);所述表Tl的表名為T(mén)l、與左邊表連接字段為(c4、c5)、與右邊表連接字段為 空、條件字段為(cl、c2、C;3)以及返回字段為空值。直線兩端的端點(diǎn)表示兩張表在此聯(lián)合, 例如表T3字段cl與表T2字段c4聯(lián)合,表T2字段(cl、d)與表Tl字段(c4、d)聯(lián)合。如步驟Slll所述,基于所述該SQL語(yǔ)句的執(zhí)行計(jì)劃、數(shù)據(jù)字典信息,根據(jù)檢驗(yàn)規(guī) 則,進(jìn)行檢驗(yàn)。分析對(duì)于該SQL語(yǔ)句,在該表上需要構(gòu)建什么索引。索引需要包括以下字段先導(dǎo) 部分(僅限于唯一索引的情況)或者全部字段(唯一索引或者非唯一索引均可的情況),字 段先后順序是右邊表連接字段標(biāo)注區(qū)字段在最前面,然后是條件字段標(biāo)注區(qū)字段。同一標(biāo) 注區(qū)內(nèi)部字段無(wú)先后順序要求。由此得到需要的索引包括哪些字段,以及字段先后順序。
結(jié)合數(shù)據(jù)字典信息,得到該表上已經(jīng)存在哪些索引,分別包括哪些字段,以及字段 先后順序。參照?qǐng)D6,在本實(shí)施例的另一實(shí)施方式中,所述步驟S122之前還可包括步驟S131、判斷對(duì)SQL語(yǔ)句的檢測(cè)是否完成;如否,返回步驟S12 ;否則,進(jìn)行步驟 S122。如步驟S131所述,判斷SQL語(yǔ)句是否檢測(cè)完成,如否,則返回步驟12,繼續(xù)檢測(cè); 否則,進(jìn)行步驟S122,執(zhí)行SQL語(yǔ)句。參照?qǐng)D7,本發(fā)明提出另一實(shí)施例的一種SQL語(yǔ)句的檢驗(yàn)裝置20,在執(zhí)行數(shù)據(jù)庫(kù)操 作前,對(duì)所述SQL語(yǔ)句進(jìn)行檢驗(yàn);所述裝置20包括檢驗(yàn)規(guī)則設(shè)置模塊200,設(shè)置檢驗(yàn)規(guī)則;執(zhí)行計(jì)劃提取模塊22,根據(jù)所述SQL語(yǔ)句,取得執(zhí)行計(jì)劃以及與執(zhí)行計(jì)劃關(guān)聯(lián)的數(shù)據(jù)字典信息并保存;檢驗(yàn)?zāi)K23,根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢 驗(yàn)并取得檢驗(yàn)結(jié)果。檢驗(yàn)規(guī)則設(shè)置模塊200可在進(jìn)行數(shù)據(jù)庫(kù)操作之前,先設(shè)定好檢驗(yàn)規(guī)則。所述檢驗(yàn) 規(guī)則可在設(shè)定完成并保存后,可重復(fù)使用;且所述條件設(shè)置模塊200可根據(jù)具體需要進(jìn)行 檢驗(yàn)規(guī)則的增加、刪除和/或修改等操作。執(zhí)行計(jì)劃提取模塊22可對(duì)SQL語(yǔ)句進(jìn)行分析,取得所述SQL語(yǔ)句的執(zhí)行計(jì)劃以及 與執(zhí)行計(jì)劃關(guān)聯(lián)的數(shù)據(jù)字典信息并保存。所述執(zhí)行計(jì)劃包括執(zhí)行步驟以及每個(gè)步驟中的操 作對(duì)象。所述執(zhí)行步驟是數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)句執(zhí)行的步驟組合;所述步驟可以是從數(shù)據(jù)庫(kù)中 物理檢索數(shù)據(jù)行,或者是用其他方式處理數(shù)據(jù)行等對(duì)操作對(duì)象進(jìn)行的具體操作,取得操作 結(jié)果,提供給數(shù)據(jù)庫(kù)操作指令發(fā)送者使用。所述操作對(duì)象包括表名、右邊表連接字段、左邊 表連接字段、條件字段和返回字段等。取得執(zhí)行計(jì)劃的方式包括查詢數(shù)據(jù)庫(kù)系統(tǒng)表取得、通過(guò)數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)句的分析 取得或者通過(guò)程序?qū)QL語(yǔ)句的分析取得。查詢數(shù)據(jù)庫(kù)系統(tǒng)表取得執(zhí)行計(jì)劃的方式,是由于常用的商用數(shù)據(jù)庫(kù)會(huì)將執(zhí)行過(guò)的 SQL語(yǔ)句執(zhí)行計(jì)劃保存在數(shù)據(jù)庫(kù)系統(tǒng)表中,因此可通過(guò)訪問(wèn)數(shù)據(jù)庫(kù)中相關(guān)的系統(tǒng)表獲取相 應(yīng)SQL語(yǔ)句的執(zhí)行計(jì)劃。通過(guò)數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)句的分析取得,是通過(guò)向數(shù)據(jù)庫(kù)發(fā)送分析SQL語(yǔ)句執(zhí)行計(jì)劃 的請(qǐng)求,由數(shù)據(jù)庫(kù)分析獲取所述SQL語(yǔ)句的執(zhí)行計(jì)劃,并將結(jié)果返回。通過(guò)程序分析SQL語(yǔ)句執(zhí)行計(jì)劃的方式,是利用標(biāo)注表示出執(zhí)行計(jì)劃的執(zhí)行路 線,根據(jù)所述執(zhí)行路線進(jìn)行分析,從而取得執(zhí)行計(jì)劃。參照?qǐng)D8,在本實(shí)施例的另一實(shí)施方式中,所述執(zhí)行計(jì)劃提取模塊22包括執(zhí)行路線表示單元221,通過(guò)標(biāo)注表示所述執(zhí)行計(jì)劃的執(zhí)行路線;執(zhí)行計(jì)劃提取單元222,按照?qǐng)?zhí)行路線分析取得所述執(zhí)行計(jì)劃。通過(guò)程序分析SQL語(yǔ)句執(zhí)行計(jì)劃的方式可為首先,通過(guò)執(zhí)行路線表示單元221標(biāo) 注所述SQL語(yǔ)句表示出所述執(zhí)行計(jì)劃的執(zhí)行路線;所述標(biāo)注可包括表名標(biāo)注、右邊表連接 字段標(biāo)注、左邊表連接字段標(biāo)注、條件字段標(biāo)注和返回字段標(biāo)注等。然后,所述提取計(jì)劃單 元222,根據(jù)通過(guò)標(biāo)注所表示出的執(zhí)行路線,分析提取所述SQL語(yǔ)句的執(zhí)行計(jì)劃。
檢驗(yàn)?zāi)K23可根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行 檢驗(yàn),可獲知所述SQL語(yǔ)句中是否存在設(shè)計(jì)不當(dāng)?shù)葐?wèn)題(即是否存在問(wèn)題)。所述檢驗(yàn)?zāi)K 23可產(chǎn)生檢驗(yàn)結(jié)果,該檢驗(yàn)結(jié)果包括存在問(wèn)題以及不存在問(wèn)題兩種。參照?qǐng)D9,在本實(shí)施例的一實(shí)施方式中,所述裝置20還包括告警判斷模塊230以及 執(zhí)行判斷模塊231 ;該告警判斷模塊230可根據(jù)所述檢驗(yàn)?zāi)K23獲得的檢驗(yàn)結(jié)果,判斷是 否對(duì)所述數(shù)據(jù)庫(kù)操作進(jìn)行告警;該執(zhí)行判斷模塊231,與告警判斷模塊230連接,可根據(jù)所 述告警判斷數(shù)據(jù)庫(kù)操作是否執(zhí)行。上述告警判斷模塊230可根據(jù)在所述檢驗(yàn)?zāi)K23獲得的檢驗(yàn)結(jié)果,判斷是否告 警,如果檢驗(yàn)結(jié)果是存在問(wèn)題,則告警并保存該告警的信息;否則,執(zhí)行所述SQL語(yǔ)句。上述執(zhí)行判斷模塊231根據(jù)告警的級(jí)別,確定所述數(shù)據(jù)庫(kù)操作是否執(zhí)行。如可執(zhí) 行則允許執(zhí)行SQL語(yǔ)句;否則,結(jié)束。參照?qǐng)D10,在本實(shí)施例的另一實(shí)施方式中,所述SQL語(yǔ)句的檢驗(yàn)裝置20還可包括 數(shù)據(jù)字典提取模塊201,通過(guò)查詢數(shù)據(jù)庫(kù)系統(tǒng)表或者程序分析數(shù)據(jù)庫(kù)代碼提取數(shù)據(jù)字典信 肩、ο字典提取模塊201可通過(guò)分析數(shù)據(jù)庫(kù)中與SQL語(yǔ)句相關(guān)的系統(tǒng)表,提取需要的索 引信息、表信息、視圖信息和/或字段信息等?;蛘呤峭ㄟ^(guò)程序分析數(shù)據(jù)庫(kù)代碼,提取其中 的DDL(Data Defination Language,數(shù)據(jù)定義語(yǔ)言)語(yǔ)句,獲取所需要的索引信息、表信息、 視圖信息和/或字段信息等。參照?qǐng)D11,本發(fā)明提出另一實(shí)施例的一種提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng)30,在執(zhí)行數(shù) 據(jù)庫(kù)操作前,對(duì)所述SQL語(yǔ)句進(jìn)行檢驗(yàn);所述系統(tǒng)30包括檢驗(yàn)規(guī)則設(shè)置模塊300,設(shè)置檢驗(yàn)規(guī)則;SQL語(yǔ)句獲取模塊31,接收外部的數(shù)據(jù)庫(kù)操作,獲取SQL語(yǔ)句;執(zhí)行計(jì)劃提取模塊32,根據(jù)所述SQL語(yǔ)句,取得執(zhí)行計(jì)劃以及與執(zhí)行計(jì)劃關(guān)聯(lián)的 數(shù)據(jù)字典信息并保存;檢驗(yàn)?zāi)K33,根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢 驗(yàn)并取得檢驗(yàn)結(jié)果;SQL語(yǔ)句執(zhí)行模塊34,向數(shù)據(jù)庫(kù)發(fā)送執(zhí)行SQL語(yǔ)句請(qǐng)求,并處理返回結(jié)果。檢驗(yàn)規(guī)則設(shè)置模塊300可在進(jìn)行數(shù)據(jù)庫(kù)操作之前,先設(shè)定好檢驗(yàn)規(guī)則。所述檢驗(yàn) 規(guī)則可在設(shè)定完成并保存后,可重復(fù)使用;且所述條件設(shè)置模塊300可根據(jù)具體需要進(jìn)行 檢驗(yàn)規(guī)則的增加、刪除和/或修改等操作。SQL語(yǔ)句獲取模塊31可獲取數(shù)據(jù)庫(kù)操作中的SQL語(yǔ)句。執(zhí)行計(jì)劃提取模塊32可對(duì)所述SQL語(yǔ)句進(jìn)行分析,取得執(zhí)行計(jì)劃以及與執(zhí)行計(jì)劃 關(guān)聯(lián)的數(shù)據(jù)字典信息并保存。所述執(zhí)行計(jì)劃包括執(zhí)行步驟以及每個(gè)步驟中的操作對(duì)象。所 述執(zhí)行步驟是數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)句執(zhí)行的步驟組合;所述步驟可以是從數(shù)據(jù)庫(kù)中物理檢索數(shù) 據(jù)行,或者是用其他方式處理數(shù)據(jù)行等對(duì)操作對(duì)象進(jìn)行的具體操作,取得操作結(jié)果,提供給 數(shù)據(jù)庫(kù)操作指令發(fā)送者使用。所述操作對(duì)象包括表名、右邊表連接字段、左邊表連接字段、 條件字段和返回字段等。取得執(zhí)行計(jì)劃的方式包括查詢數(shù)據(jù)庫(kù)系統(tǒng)表取得、通過(guò)數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)句的分析 取得或者通過(guò)程序?qū)QL語(yǔ)句分析取得。
查詢數(shù)據(jù)庫(kù)系統(tǒng)表取得執(zhí)行計(jì)劃的方式,是由于常用的商用數(shù)據(jù)庫(kù)會(huì)將執(zhí)行過(guò)的 SQL語(yǔ)句執(zhí)行計(jì)劃保存在數(shù)據(jù)庫(kù)系統(tǒng)表中,因此可通過(guò)訪問(wèn)數(shù)據(jù)庫(kù)中相關(guān)的系統(tǒng)表獲取相 應(yīng)SQL語(yǔ)句的執(zhí)行計(jì)劃。通過(guò)數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)句分析取得執(zhí)行計(jì)劃的方式,是通過(guò)向數(shù)據(jù)庫(kù)發(fā)送分析SQL 語(yǔ)句執(zhí)行計(jì)劃的請(qǐng)求,由數(shù)據(jù)庫(kù)分析所述SQL語(yǔ)句的執(zhí)行計(jì)劃,并將結(jié)果返回。通過(guò)程序?qū)QL語(yǔ)句分析取得執(zhí)行計(jì)劃的方式,是利用標(biāo)注表示出執(zhí)行計(jì)劃的執(zhí) 行路線,根據(jù)所述執(zhí)行路線進(jìn)行分析,從而取得執(zhí)行計(jì)劃。參照?qǐng)D12,在本實(shí)施例的另一實(shí)施方式中,所述執(zhí)行計(jì)劃提取模塊32包括執(zhí)行路線表示單元321,通過(guò)標(biāo)注表示所述執(zhí)行計(jì)劃的執(zhí)行路線;執(zhí)行計(jì)劃提取單元322,按照?qǐng)?zhí)行路線分析取得所述執(zhí)行計(jì)劃。通過(guò)程序分析SQL語(yǔ)句取得執(zhí)行計(jì)劃的方式可為首先,通過(guò)執(zhí)行路線表示單元 321標(biāo)注所述SQL語(yǔ)句表示出所述執(zhí)行計(jì)劃的執(zhí)行路線;所述標(biāo)注可包括表名標(biāo)注、右邊 表連接字段標(biāo)注、左邊表連接字段標(biāo)注、條件字段標(biāo)注和返回字段標(biāo)注等。然后,所述執(zhí)行 計(jì)劃提取單元322,根據(jù)通過(guò)標(biāo)注所表示出的執(zhí)行路線,分析提取所述SQL語(yǔ)句的執(zhí)行計(jì) 劃。檢驗(yàn)?zāi)K33可根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行 檢驗(yàn),可獲知所述SQL語(yǔ)句中是否存在設(shè)計(jì)不當(dāng)?shù)葐?wèn)題(即是否存在問(wèn)題)。所述檢驗(yàn)?zāi)K 33可產(chǎn)生檢驗(yàn)結(jié)果,該檢驗(yàn)結(jié)果包括存在問(wèn)題以及不存在問(wèn)題兩種。參照?qǐng)D13,在本實(shí)施例的一實(shí)施方式中,所述系統(tǒng)30還包括告警判斷模塊330以 及執(zhí)行判斷模塊331 ;該告警判斷模塊330可根據(jù)所述檢驗(yàn)?zāi)K33獲得的檢驗(yàn)結(jié)果,判斷 是否對(duì)所述數(shù)據(jù)庫(kù)操作進(jìn)行告警;該執(zhí)行判斷模塊331,與上述告警判斷模塊330連接,可 根據(jù)告警判斷數(shù)據(jù)庫(kù)操作是否執(zhí)行。上述告警判斷模塊330可根據(jù)在所述檢驗(yàn)?zāi)K33獲得的檢驗(yàn)結(jié)果,判斷是否告 警,如果檢驗(yàn)結(jié)果是存在問(wèn)題,則告警并保存該告警的信息;否則,執(zhí)行所述SQL語(yǔ)句。上述執(zhí)行判斷模塊331根據(jù)告警的級(jí)別,確定所述數(shù)據(jù)庫(kù)操作是否執(zhí)行。如可執(zhí) 行則執(zhí)行SQL語(yǔ)句;否則,結(jié)束。SQL語(yǔ)句執(zhí)行模塊34可根據(jù)所述告警判斷模塊330以及執(zhí)行判斷模塊331的判 斷,在確定執(zhí)行所述數(shù)據(jù)庫(kù)操作時(shí),則執(zhí)行所述SQL語(yǔ)句,獲得查詢結(jié)果返回給所述數(shù)據(jù)庫(kù) 操作的發(fā)送者。參照?qǐng)D14,在本實(shí)施例的另一實(shí)施方式中,所述提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng)30還可 包括數(shù)據(jù)字典提取模塊301,通過(guò)查詢數(shù)據(jù)庫(kù)系統(tǒng)表或者程序分析數(shù)據(jù)庫(kù)代碼提取數(shù)據(jù)字 典信息。數(shù)據(jù)字典提取模塊301可通過(guò)查詢數(shù)據(jù)庫(kù)中與SQL語(yǔ)句相關(guān)的系統(tǒng)表,提取數(shù)據(jù) 字典信息?;蛘呤峭ㄟ^(guò)程序分析數(shù)據(jù)庫(kù)代碼,提取其中的DDL語(yǔ)句,獲取數(shù)據(jù)字典信息。本實(shí)施例的提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng)30還可設(shè)置存儲(chǔ)設(shè)備(圖未示出),可用于 存儲(chǔ)執(zhí)行計(jì)劃、數(shù)據(jù)字典信息以及檢驗(yàn)規(guī)則等信息。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用 本發(fā)明說(shuō)明書(shū)及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān) 的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種SQL語(yǔ)句的檢驗(yàn)方法,在執(zhí)行數(shù)據(jù)庫(kù)操作前,對(duì)SQL語(yǔ)句進(jìn)行檢驗(yàn);其特征在 于,包括步驟設(shè)置檢驗(yàn)規(guī)則;根據(jù)所述SQL語(yǔ)句,取得執(zhí)行計(jì)劃以及與執(zhí)行計(jì)劃關(guān)聯(lián)的數(shù)據(jù)字典信息;根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢驗(yàn)并取得檢驗(yàn)結(jié)^ ο
2.根據(jù)權(quán)利要求1所述的SQL語(yǔ)句的檢驗(yàn)方法,其特征在于,所述根據(jù)取得的所述執(zhí)行 計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢驗(yàn)并取得檢驗(yàn)結(jié)果的步驟后還包括步驟根據(jù)檢驗(yàn)結(jié)果判斷是否進(jìn)行告警;如是,進(jìn)行告警,并進(jìn)行下一步驟;否則,執(zhí)行所述 數(shù)據(jù)庫(kù)操作;根據(jù)所述告警判斷數(shù)據(jù)庫(kù)操作是否執(zhí)行;如是,則執(zhí)行所述數(shù)據(jù)庫(kù)操作;否則,結(jié)束。
3.根據(jù)權(quán)利要求1或2所述的SQL語(yǔ)句的檢驗(yàn)方法,其特征在于,所述取得執(zhí)行計(jì)劃的 方式包括通過(guò)查詢數(shù)據(jù)庫(kù)系統(tǒng)表取得、通過(guò)數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)句的分析取得或者通過(guò)對(duì)SQL語(yǔ)句 分析取得。
4.根據(jù)權(quán)利要求3所述的SQL語(yǔ)句的檢驗(yàn)方法,其特征在于,所述提取SQL語(yǔ)句分析取 得執(zhí)行計(jì)劃的方式進(jìn)一步包括步驟通過(guò)標(biāo)注表示所述執(zhí)行計(jì)劃的執(zhí)行路線; 按照?qǐng)?zhí)行路線分析取得所述執(zhí)行計(jì)劃。
5.一種SQL語(yǔ)句的檢驗(yàn)裝置,在執(zhí)行數(shù)據(jù)庫(kù)操作前,對(duì)SQL語(yǔ)句進(jìn)行檢驗(yàn);其特征在 于,所述裝置包括檢驗(yàn)規(guī)則設(shè)置模塊,設(shè)置檢驗(yàn)規(guī)則;執(zhí)行計(jì)劃提取模塊,根據(jù)所述SQL語(yǔ)句,取得執(zhí)行計(jì)劃以及與執(zhí)行計(jì)劃關(guān)聯(lián)的數(shù)據(jù)字典信息并保存;檢驗(yàn)?zāi)K,根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢驗(yàn)并取 得檢驗(yàn)結(jié)果。
6.根據(jù)權(quán)利要求5所述的SQL語(yǔ)句的檢驗(yàn)裝置,其特征在于,所述執(zhí)行計(jì)劃提取模塊進(jìn) 一步包括執(zhí)行路線表示單元,通過(guò)標(biāo)注表示所述執(zhí)行計(jì)劃的執(zhí)行路線; 執(zhí)行計(jì)劃提取單元,按照?qǐng)?zhí)行路線分析取得所述執(zhí)行計(jì)劃。
7.根據(jù)權(quán)利要求5或6所述的SQL語(yǔ)句的檢驗(yàn)裝置,其特征在于,所述裝置還包括 告警判斷模塊,根據(jù)所述檢驗(yàn)?zāi)K獲得的檢驗(yàn)結(jié)果判斷是否進(jìn)行告警;執(zhí)行判斷模塊,根據(jù)所述告警判斷數(shù)據(jù)庫(kù)操作是否執(zhí)行。
8.根據(jù)權(quán)利要求5或6所述的SQL語(yǔ)句的檢驗(yàn)裝置,其特征在于,所述裝置還包括 數(shù)據(jù)字典提取模塊,通過(guò)分析數(shù)據(jù)庫(kù)系統(tǒng)表或者分析數(shù)據(jù)庫(kù)代碼提取數(shù)據(jù)字典信息。
9.一種提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng),在執(zhí)行數(shù)據(jù)庫(kù)操作前,對(duì)SQL語(yǔ)句進(jìn)行檢驗(yàn);其特征 在于,所述系統(tǒng)包括檢驗(yàn)規(guī)則設(shè)置模塊,設(shè)置檢驗(yàn)規(guī)則; SQL語(yǔ)句獲取模塊,接收外部的數(shù)據(jù)庫(kù)操作,獲取SQL語(yǔ)句;執(zhí)行計(jì)劃提取模塊,根據(jù)所述SQL語(yǔ)句,取得執(zhí)行計(jì)劃以及與執(zhí)行計(jì)劃關(guān)聯(lián)的數(shù)據(jù)字典信息并保存;檢驗(yàn)?zāi)K,根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢驗(yàn)并取 得檢驗(yàn)結(jié)果;SQL語(yǔ)句執(zhí)行模塊,向數(shù)據(jù)庫(kù)發(fā)送執(zhí)行SQL語(yǔ)句請(qǐng)求,并處理返回結(jié)果。
10.根據(jù)權(quán)利要求9所述的提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng),其特征在于,所述執(zhí)行計(jì)劃提取 模塊進(jìn)一步包括執(zhí)行路線表示單元,通過(guò)標(biāo)注表示所述執(zhí)行計(jì)劃的執(zhí)行路線; 執(zhí)行計(jì)劃提取單元,按照?qǐng)?zhí)行路線分析取得所述執(zhí)行計(jì)劃。
11.根據(jù)權(quán)利要求9或10所述的提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng),其特征在于,所述系統(tǒng)還包括告警判斷模塊,根據(jù)所述檢驗(yàn)?zāi)K獲得的檢驗(yàn)結(jié)果判斷是否進(jìn)行告警; 執(zhí)行判斷模塊,根據(jù)所述告警判斷數(shù)據(jù)庫(kù)操作是否執(zhí)行。
12.根據(jù)權(quán)利要求9或10所述的提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng),其特征在于,所述系統(tǒng)還包括數(shù)據(jù)字典提取模塊,通過(guò)分析數(shù)據(jù)庫(kù)系統(tǒng)表或者分析數(shù)據(jù)庫(kù)代碼提取數(shù)據(jù)字典信息。
全文摘要
本發(fā)明揭示了一種SQL語(yǔ)句的檢驗(yàn)方法、裝置及提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng)。所述SQL語(yǔ)句的檢驗(yàn)方法,在執(zhí)行數(shù)據(jù)庫(kù)操作前,對(duì)所述SQL語(yǔ)句進(jìn)行檢驗(yàn);包括步驟設(shè)置檢驗(yàn)規(guī)則;根據(jù)所述SQL語(yǔ)句,取得執(zhí)行計(jì)劃以及與執(zhí)行計(jì)劃關(guān)聯(lián)的數(shù)據(jù)字典信息;根據(jù)取得的所述執(zhí)行計(jì)劃以及數(shù)據(jù)字典信息,利用檢驗(yàn)規(guī)則進(jìn)行檢驗(yàn)并取得檢驗(yàn)結(jié)果。所述SQL語(yǔ)句的檢驗(yàn)裝置及提高數(shù)據(jù)庫(kù)可靠性的系統(tǒng),通過(guò)對(duì)SQL語(yǔ)句的檢驗(yàn),限制可能引起問(wèn)題的數(shù)據(jù)庫(kù)操作,提升系統(tǒng)的可靠性。
文檔編號(hào)G06F17/30GK102053961SQ20091011025
公開(kāi)日2011年5月11日 申請(qǐng)日期2009年10月27日 優(yōu)先權(quán)日2009年10月27日
發(fā)明者謝東 申請(qǐng)人:中興通訊股份有限公司