一種適用于電力系統(tǒng)的數(shù)據(jù)解列及恢復(fù)方法、裝置制造方法【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種適用于電力系統(tǒng)的數(shù)據(jù)解列及恢復(fù)方法、裝置,其中方法包括,在電力系統(tǒng)的平臺(tái)層中設(shè)置第一數(shù)據(jù)庫(kù)和數(shù)據(jù)恢復(fù)單元。其中第一數(shù)據(jù)庫(kù)運(yùn)行在內(nèi)存中,由第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型以及靜態(tài)參數(shù)在內(nèi)存中的實(shí)時(shí)映像組成,用于向調(diào)度自動(dòng)化系統(tǒng)提供電網(wǎng)模型以及靜態(tài)參數(shù)的查詢(xún)。數(shù)據(jù)恢復(fù)單元負(fù)責(zé)所有的與第二數(shù)據(jù)庫(kù)相關(guān)的讀寫(xiě)操作,在有數(shù)據(jù)寫(xiě)入時(shí),按照時(shí)標(biāo)特性將歷史數(shù)據(jù)進(jìn)行存儲(chǔ)并在第二數(shù)據(jù)庫(kù)正常時(shí)寫(xiě)入第二數(shù)據(jù)庫(kù)。本發(fā)明實(shí)現(xiàn)了在第二數(shù)據(jù)庫(kù)故障時(shí),電力系統(tǒng)仍能進(jìn)行電網(wǎng)模型以及靜態(tài)參數(shù)的查詢(xún),以保證基本功能不受影響,并實(shí)現(xiàn)了在第二數(shù)據(jù)庫(kù)恢復(fù)正常后,故障期間的歷史數(shù)據(jù)能夠恢復(fù),保證了數(shù)據(jù)的連續(xù)性和完整性?!緦?zhuān)利說(shuō)明】—種適用于電力系統(tǒng)的數(shù)據(jù)解列及恢復(fù)方法、裝置【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及電力系統(tǒng)調(diào)度自動(dòng)化【
技術(shù)領(lǐng)域:
】,尤其涉及一種適用于電力系統(tǒng)的數(shù)據(jù)解列及恢復(fù)方法、裝置?!?br>背景技術(shù):
】[0002]早期的電力系統(tǒng)是不使用數(shù)據(jù)庫(kù)(本發(fā)明中指商用庫(kù),即關(guān)系型數(shù)據(jù)庫(kù))的,其數(shù)據(jù)保存都是采用文件的私有格式進(jìn)行管理,這種數(shù)據(jù)管理方式的主要問(wèn)題在于信息檢索比較困難,另外由于沒(méi)有開(kāi)放的接口,信息再利用工作難以展開(kāi)。隨著數(shù)據(jù)庫(kù)技術(shù)的成熟以及調(diào)度自動(dòng)化系統(tǒng)的發(fā)展,國(guó)內(nèi)的調(diào)度自動(dòng)化系統(tǒng)開(kāi)始使用數(shù)據(jù)庫(kù),數(shù)據(jù)保存與檢索能力大大提高,然而多了一個(gè)環(huán)節(jié)就多了一個(gè)故障點(diǎn),數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)管理系統(tǒng)本身有時(shí)會(huì)發(fā)生故障而不能正常工作。數(shù)據(jù)庫(kù)故障時(shí),既無(wú)法提供數(shù)據(jù)的檢索服務(wù),影響了電力系統(tǒng)的基本SCADA/AGC(四遙:遙信、遙測(cè)、遙控、遙調(diào))功能,也無(wú)法將實(shí)時(shí)數(shù)據(jù)進(jìn)行存儲(chǔ)以形成歷史數(shù)據(jù),影響了歷史信息的連續(xù)性和完整性。為此需要提供一種方法以解決上述問(wèn)題。【
發(fā)明內(nèi)容】[0003]為了實(shí)現(xiàn)在電力系統(tǒng)中數(shù)據(jù)庫(kù)故障的有效隔離,使得在數(shù)據(jù)庫(kù)故障的情況下,電力調(diào)度自動(dòng)化系統(tǒng)的基本功能不受影響,同時(shí)當(dāng)數(shù)據(jù)庫(kù)恢復(fù)正常以后,故障期間的歷史數(shù)據(jù)能夠順利恢復(fù),不丟失任何信息,確保歷史信息的連續(xù)性和完整性,本發(fā)明提供了一種適用于電力系統(tǒng)的數(shù)據(jù)解列及恢復(fù)方法,該方法采用如下技術(shù)方案:當(dāng)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層接收到對(duì)電網(wǎng)模型和靜態(tài)參數(shù)的讀取請(qǐng)求時(shí),調(diào)用第一數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口TableOpen和TableGet在第一數(shù)據(jù)庫(kù)中進(jìn)行查詢(xún),TableOpen的輸入?yún)?shù)為constchar*app_name矛口constinttable_no;TableGet白勺輸人參數(shù)為char氺field—name,輸出參數(shù)為char**field_buf_ptr和intbufsize;當(dāng)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層接收到對(duì)歷史數(shù)據(jù)的讀取請(qǐng)求時(shí),調(diào)用第二數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口SelectSql通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE在第二數(shù)據(jù)庫(kù)中進(jìn)行查詢(xún),SelectSql的輸入?yún)?shù)為constchar*sql_str,輸出參數(shù)為T(mén)SelectResultStru_outout_select_result和SEQDBErrorStru_outout_db_error;其中,第一數(shù)據(jù)庫(kù)和數(shù)據(jù)恢復(fù)單元DB_SERVICE設(shè)置在電力系統(tǒng)的平臺(tái)層中,第一數(shù)據(jù)庫(kù)以及第二數(shù)據(jù)庫(kù)構(gòu)成系統(tǒng)的整體數(shù)據(jù)庫(kù)環(huán)境;第一數(shù)據(jù)庫(kù)運(yùn)行在內(nèi)存中,由第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型以及靜態(tài)參數(shù)在內(nèi)存中的實(shí)時(shí)映像組成;第二數(shù)據(jù)庫(kù)中存儲(chǔ)有電網(wǎng)模型、靜態(tài)參數(shù)和歷史數(shù)據(jù);訪(fǎng)問(wèn)第一數(shù)據(jù)庫(kù)的接口和訪(fǎng)問(wèn)第二數(shù)據(jù)庫(kù)的接口統(tǒng)一封裝在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層中;數(shù)據(jù)恢復(fù)單元DB_SERVICE負(fù)責(zé)所有的與第二數(shù)據(jù)庫(kù)相關(guān)的讀寫(xiě)操作:當(dāng)所述數(shù)據(jù)恢復(fù)單元DB_SERVICE接收到寫(xiě)入性質(zhì)的請(qǐng)求時(shí),調(diào)用db_Commit服務(wù)進(jìn)程的主線(xiàn)程將每次接收到的帶有時(shí)標(biāo)特性的歷史數(shù)據(jù)逐一寫(xiě)到不同文件中,并將這些文件按照時(shí)間的順序保存在硬盤(pán)文件系統(tǒng)中,形成一組文件序列,同時(shí)另外一個(gè)線(xiàn)程判斷第二數(shù)據(jù)庫(kù)的狀態(tài),若第二數(shù)據(jù)庫(kù)正常則按照時(shí)間順序讀取所述文件序列,解析其內(nèi)容后寫(xiě)入第二數(shù)據(jù)庫(kù),若第二數(shù)據(jù)庫(kù)不正常,則進(jìn)入循環(huán)等待狀態(tài);當(dāng)數(shù)據(jù)恢復(fù)單元DB_SERVICE接收到第一數(shù)據(jù)庫(kù)的同步請(qǐng)求時(shí),調(diào)用同步程序DB_Modify_Server將第一數(shù)據(jù)庫(kù)中的實(shí)時(shí)數(shù)據(jù)寫(xiě)入到第二數(shù)據(jù)庫(kù)中作為歷史數(shù)據(jù)存儲(chǔ),當(dāng)當(dāng)數(shù)據(jù)恢復(fù)單元DB_SERVICE接收到第二數(shù)據(jù)庫(kù)的同步請(qǐng)求時(shí),調(diào)用同步程序DB_Modify_Server讀取第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型和靜態(tài)參數(shù)來(lái)更新第一數(shù)據(jù)庫(kù);在數(shù)據(jù)恢復(fù)單元DB_SERVICE中,電網(wǎng)模型、靜態(tài)參數(shù)以及歷史數(shù)據(jù)的訪(fǎng)問(wèn)被封裝為不同的服務(wù)。[0004]本發(fā)明還提供了一種適用于電力系統(tǒng)的數(shù)據(jù)解列及恢復(fù)裝置,該裝置包括:第一數(shù)據(jù)庫(kù)、數(shù)據(jù)恢復(fù)單元DB_SERVICE以及第二數(shù)據(jù)庫(kù);其中,第一數(shù)據(jù)庫(kù)和數(shù)據(jù)恢復(fù)單元DB_SERVICE設(shè)置在電力系統(tǒng)的平臺(tái)層中,第一數(shù)據(jù)庫(kù)以及第二數(shù)據(jù)庫(kù)構(gòu)成系統(tǒng)的整體數(shù)據(jù)庫(kù)環(huán)境;第一數(shù)據(jù)庫(kù)運(yùn)行在內(nèi)存中,由第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型以及靜態(tài)參數(shù)在內(nèi)存中的實(shí)時(shí)映像組成;第二數(shù)據(jù)庫(kù)中存儲(chǔ)有電網(wǎng)模型、靜態(tài)參數(shù)和歷史數(shù)據(jù);訪(fǎng)問(wèn)第一數(shù)據(jù)庫(kù)的接口和訪(fǎng)問(wèn)第二數(shù)據(jù)庫(kù)的接口統(tǒng)一封裝在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層中;第一數(shù)據(jù)庫(kù),用于在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層接收到對(duì)電網(wǎng)模型和靜態(tài)參數(shù)的讀取請(qǐng)求時(shí),調(diào)用第一數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口TableOpen和TableGet進(jìn)行查詢(xún),TableOpen的輸入?yún)?shù)為constchar*app_name和constinttable_no;TableGet的輸入?yún)?shù)為char*field_name,輸出參數(shù)為char林field_buf_ptr和intbufsize;第一數(shù)據(jù)庫(kù),還用于通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE中的同步程序DB_Modify_Server將實(shí)時(shí)數(shù)據(jù)寫(xiě)入到第二數(shù)據(jù)庫(kù)中作為歷史數(shù)據(jù)存儲(chǔ);第二數(shù)據(jù)庫(kù),用于在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層接收到對(duì)歷史數(shù)據(jù)的讀取請(qǐng)求時(shí),調(diào)用第二數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口SelectSql通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE在進(jìn)行查詢(xún),SelectSql的輸入?yún)?shù)為constchar*sql_str,輸出參數(shù)為T(mén)SelectResultStru_outout_select_result和SEQDBErrorStru_outout_db_error;第二數(shù)據(jù)庫(kù),還用于通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE中的同步程序DB_Modify_Server讀取第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型和靜態(tài)參數(shù)來(lái)更新第一數(shù)據(jù)庫(kù);數(shù)據(jù)恢復(fù)單元DB_SERVICE,用于負(fù)責(zé)所有的與第二數(shù)據(jù)庫(kù)相關(guān)的讀寫(xiě)操作;數(shù)據(jù)恢復(fù)單元DB_SERVICE將電網(wǎng)模型、靜態(tài)參數(shù)以及歷史數(shù)據(jù)的訪(fǎng)問(wèn)封裝為不同的服務(wù);所述數(shù)據(jù)恢復(fù)單元DB_SERVICE,具體用于在接收到寫(xiě)入性質(zhì)的請(qǐng)求時(shí),調(diào)用db_commit服務(wù)進(jìn)程的主線(xiàn)程將每次接收到的帶有時(shí)標(biāo)特性的歷史數(shù)據(jù)逐一寫(xiě)到不同文件中,并將這些文件按照時(shí)間的順序保存在硬盤(pán)文件系統(tǒng)中,形成一組文件序列,同時(shí)調(diào)用另外一個(gè)線(xiàn)程在第二數(shù)據(jù)庫(kù)正常時(shí)按照時(shí)間順序讀取所述文件序列,解析其內(nèi)容后寫(xiě)入第二數(shù)據(jù)庫(kù),在第二數(shù)據(jù)庫(kù)不正常時(shí),進(jìn)入循環(huán)等待狀態(tài)。[0005]根據(jù)本發(fā)明提供的具體實(shí)施例,本發(fā)明公開(kāi)了以下技術(shù)效果:本發(fā)明中,在電力系統(tǒng)的平臺(tái)層中設(shè)置了存儲(chǔ)有電網(wǎng)模型和靜態(tài)參數(shù)的第一數(shù)據(jù)庫(kù),既可以滿(mǎn)足電力系統(tǒng)對(duì)模型和靜態(tài)參數(shù)的高速訪(fǎng)問(wèn),也可以實(shí)現(xiàn)第二數(shù)據(jù)庫(kù)故障時(shí)電力系統(tǒng)依然可通過(guò)訪(fǎng)問(wèn)第一數(shù)據(jù)庫(kù)讀取原先電網(wǎng)模型和靜態(tài)參數(shù)的要求,保證了電力系統(tǒng)的基本功能。設(shè)置數(shù)據(jù)恢復(fù)單元,在有寫(xiě)入性質(zhì)請(qǐng)求時(shí),根據(jù)時(shí)標(biāo)特性存儲(chǔ)歷史數(shù)據(jù),并在第二數(shù)據(jù)庫(kù)正常時(shí),將歷史數(shù)據(jù)寫(xiě)入第二數(shù)據(jù)庫(kù),保證了歷史數(shù)據(jù)的連續(xù)性和完整性。【專(zhuān)利附圖】【附圖說(shuō)明】[0006]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。[0007]圖1是本發(fā)明系統(tǒng)典型數(shù)據(jù)庫(kù)環(huán)境圖;圖2是數(shù)據(jù)恢復(fù)單元處理寫(xiě)入請(qǐng)求的流程圖?!揪唧w實(shí)施方式】[0008]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。[0009]為使本發(fā)明更加清楚,首先對(duì)以下實(shí)施例中將要涉及的名詞進(jìn)行解釋。[0010]第二數(shù)據(jù)庫(kù),本發(fā)明中指商用庫(kù),即電力關(guān)系型數(shù)據(jù)庫(kù),用于提供數(shù)據(jù)的保存和檢索。其中存儲(chǔ)有電網(wǎng)模型、靜態(tài)參數(shù)和歷史數(shù)據(jù)。[0011]電網(wǎng)模型,電力系統(tǒng)中的主要對(duì)象及其相關(guān)屬性的抽象描述,如變電站、變壓器、母線(xiàn)、斷路器等。[0012]靜態(tài)參數(shù),是調(diào)度自動(dòng)化系統(tǒng)正常運(yùn)行所需要的配置參數(shù),如各個(gè)進(jìn)程的啟停配置、系統(tǒng)數(shù)據(jù)源地址、系統(tǒng)界面樣式等。[0013]歷史數(shù)據(jù),本發(fā)明中是指電網(wǎng)運(yùn)行過(guò)程中隨著時(shí)間推移而快速增長(zhǎng)的采樣數(shù)據(jù),從采集裝置采樣到的時(shí)候是實(shí)時(shí)數(shù)據(jù),但存到第二數(shù)據(jù)庫(kù)之后即稱(chēng)為歷史數(shù)據(jù),這些數(shù)據(jù)包括遙測(cè)數(shù)據(jù)、遙信變位信息、系統(tǒng)告警信息等動(dòng)態(tài)數(shù)據(jù)。[0014]本發(fā)明實(shí)施例1提供了一種適用于電力系統(tǒng)的第二數(shù)據(jù)庫(kù)故障隔離方法,應(yīng)用本發(fā)明的方法時(shí),需要調(diào)度自動(dòng)化系統(tǒng)對(duì)第二數(shù)據(jù)庫(kù)以及第一數(shù)據(jù)庫(kù)混合環(huán)境的支持。[0015]在電力系統(tǒng)的平臺(tái)層中設(shè)置一個(gè)第一數(shù)據(jù)庫(kù)。如圖1所示,此時(shí),系統(tǒng)的整體數(shù)據(jù)庫(kù)環(huán)境擴(kuò)展到由第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)共同構(gòu)成。具體的,在數(shù)據(jù)訪(fǎng)問(wèn)接口層中增加訪(fǎng)問(wèn)第一數(shù)據(jù)庫(kù)的接口,與原有的數(shù)據(jù)訪(fǎng)問(wèn)接口即第二數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)接口進(jìn)行統(tǒng)一的封裝,實(shí)現(xiàn)系統(tǒng)中數(shù)據(jù)庫(kù)環(huán)境對(duì)應(yīng)用的透明。[0016]第一數(shù)據(jù)庫(kù)運(yùn)行在內(nèi)存中,由第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型以及靜態(tài)參數(shù)在內(nèi)存中的實(shí)時(shí)映像組成,并由同步程序DB_Modify_Server負(fù)責(zé)第一數(shù)據(jù)庫(kù)中與第二數(shù)據(jù)庫(kù)中的同步。具體的,同步程序DB_Modify_Server將第一數(shù)據(jù)庫(kù)中的實(shí)時(shí)數(shù)據(jù)寫(xiě)入到第二數(shù)據(jù)庫(kù)中作為歷史數(shù)據(jù)存儲(chǔ),并讀取第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型和靜態(tài)參數(shù)來(lái)更新第一數(shù)據(jù)庫(kù)。[0017]在其中一個(gè)實(shí)施例中,可在第一數(shù)據(jù)庫(kù)首次運(yùn)行時(shí),通過(guò)同步程序?qū)⒌诙?shù)據(jù)庫(kù)中的電網(wǎng)模型和靜態(tài)參數(shù)加載到第二數(shù)據(jù)庫(kù)中。在后續(xù)的運(yùn)行中,可周期性的或在第一數(shù)據(jù)庫(kù)需要時(shí)進(jìn)行同步。[0018]本發(fā)明中,當(dāng)訪(fǎng)問(wèn)接口層接收到數(shù)據(jù)訪(fǎng)問(wèn)請(qǐng)求時(shí),若數(shù)據(jù)類(lèi)型為電網(wǎng)模型和靜態(tài)參數(shù),則調(diào)用第一數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口,在第一數(shù)據(jù)庫(kù)中進(jìn)行檢索查詢(xún)。該接口為T(mén)ableOpen和TableGet,TableOpen的輸入?yún)?shù)為constchar*app_name(應(yīng)用名稱(chēng))和constinttable_no(內(nèi)存庫(kù)表號(hào));TableGet的輸入?yún)?shù)為char*field_name(內(nèi)存庫(kù)表的域名),輸出參數(shù)為char**field_buf_ptr(輸出數(shù)據(jù)內(nèi)存空間)和intbufsize(內(nèi)存大小)。可見(jiàn),該第一數(shù)據(jù)庫(kù)的設(shè)置滿(mǎn)足了電力系統(tǒng)的高速訪(fǎng)問(wèn)需求,也避免了在第二數(shù)據(jù)庫(kù)故障時(shí),無(wú)法進(jìn)行電網(wǎng)模型和靜態(tài)參數(shù)訪(fǎng)問(wèn)現(xiàn)象的發(fā)生。[0019]在電力系統(tǒng)的平臺(tái)層中設(shè)置一個(gè)數(shù)據(jù)恢復(fù)單元DB_SERVICE。如圖1所示,該服務(wù)具體設(shè)置于在第二數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)接口與第二數(shù)據(jù)庫(kù)之間。由其負(fù)責(zé)所有與第二數(shù)據(jù)庫(kù)相關(guān)的讀寫(xiě)操作。在該服務(wù)中,將電網(wǎng)模型、靜態(tài)參數(shù)以及歷史數(shù)據(jù)的訪(fǎng)問(wèn)封裝為不同的服務(wù)。[0020]當(dāng)訪(fǎng)問(wèn)接口層接收到數(shù)據(jù)訪(fǎng)問(wèn)請(qǐng)求時(shí),若數(shù)據(jù)類(lèi)型為歷史數(shù)據(jù),則調(diào)用第二數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口,通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE在第二數(shù)據(jù)庫(kù)中進(jìn)行檢索查詢(xún)。該接口具體為SelectSql,其輸入?yún)?shù)為constchar*sql_str(查詢(xún)數(shù)據(jù)的sql語(yǔ)句),輸出參數(shù)為T(mén)SelectResultStru_outout_select_result(查詢(xún)的數(shù)據(jù)集)和SEQDBErrorStru_outout_db_error(執(zhí)行結(jié)果字符串集合)。[0021]當(dāng)數(shù)據(jù)恢復(fù)單元DB_SERVICE接收到第一數(shù)據(jù)庫(kù)對(duì)電網(wǎng)模型和靜態(tài)參數(shù)的同步請(qǐng)求時(shí),從第二數(shù)據(jù)庫(kù)中加載對(duì)應(yīng)的數(shù)據(jù)至第一數(shù)據(jù)庫(kù)。[0022]附圖2描述了數(shù)據(jù)恢復(fù)單元DB_SERVICE處理寫(xiě)入請(qǐng)求的基本流程。應(yīng)用程序?qū)v史數(shù)據(jù)寫(xiě)入請(qǐng)求發(fā)送給進(jìn)程名為db_Commit服務(wù)進(jìn)程,該服務(wù)進(jìn)程為多線(xiàn)程工作模式。其中,主線(xiàn)程判斷是否接收到新的請(qǐng)求,在接受到新請(qǐng)求后將請(qǐng)求按照時(shí)間順序以相應(yīng)格式存儲(chǔ)在硬盤(pán)文件系統(tǒng)的某個(gè)特定目錄(緩存目錄)的文件序列中后返回應(yīng)用程序;而(*_commit服務(wù)的另一線(xiàn)程周期性地判斷第二數(shù)據(jù)庫(kù)的狀態(tài),如果狀態(tài)正常,則讀取緩存目錄中的文件,如果有文件則按照時(shí)間順序?qū)ξ募蛄羞M(jìn)行解析,解析得到的內(nèi)容直接向第二數(shù)據(jù)庫(kù)提交,提交成功則刪除該文件并進(jìn)入下一次循環(huán);如果第二數(shù)據(jù)庫(kù)狀態(tài)不正常,則直接進(jìn)入循環(huán)等待狀態(tài)。[0023]通過(guò)數(shù)據(jù)恢復(fù)單元實(shí)現(xiàn)了在第二數(shù)據(jù)庫(kù)恢復(fù)正常后,故障期間的歷史數(shù)據(jù)能夠恢復(fù),保證了數(shù)據(jù)的連續(xù)性和完整性。[0024]本發(fā)明還提供了一種適用于電力系統(tǒng)的數(shù)據(jù)解列及恢復(fù)裝置,具體包括第一數(shù)據(jù)庫(kù)、數(shù)據(jù)恢復(fù)單元DB_SERVICE以及第二數(shù)據(jù)庫(kù);其中,第一數(shù)據(jù)庫(kù)和數(shù)據(jù)恢復(fù)單元DB_SERVICE設(shè)置在電力系統(tǒng)的平臺(tái)層中,第一數(shù)據(jù)庫(kù)以及第二數(shù)據(jù)庫(kù)構(gòu)成系統(tǒng)的整體數(shù)據(jù)庫(kù)環(huán)境;第一數(shù)據(jù)庫(kù)運(yùn)行在內(nèi)存中,由第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型以及靜態(tài)參數(shù)在內(nèi)存中的實(shí)時(shí)映像組成;第二數(shù)據(jù)庫(kù)中存儲(chǔ)有電網(wǎng)模型、靜態(tài)參數(shù)和歷史數(shù)據(jù);訪(fǎng)問(wèn)第一數(shù)據(jù)庫(kù)的接口和訪(fǎng)問(wèn)第二數(shù)據(jù)庫(kù)的接口統(tǒng)一封裝在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層中;第一數(shù)據(jù)庫(kù),用于在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層接收到對(duì)電網(wǎng)模型和靜態(tài)參數(shù)的讀取請(qǐng)求時(shí),調(diào)用第一數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口TableOpen和TableGet進(jìn)行查詢(xún),TableOpen的輸入?yún)?shù)為constchar*app_name和constinttable_no;TableGet的輸入?yún)?shù)為char*field_name,輸出參數(shù)為char林field_buf_ptr和intbufsize;第一數(shù)據(jù)庫(kù),還用于通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE中的同步程序DB_Modify_Server將實(shí)時(shí)數(shù)據(jù)寫(xiě)入到第二數(shù)據(jù)庫(kù)中作為歷史數(shù)據(jù)存儲(chǔ);第二數(shù)據(jù)庫(kù),用于在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層接收到對(duì)歷史數(shù)據(jù)的讀取請(qǐng)求時(shí),調(diào)用第二數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口SelectSql通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE在進(jìn)行查詢(xún),SelectSql的輸入?yún)?shù)為constchar*sql_str,輸出參數(shù)為T(mén)SelectResultStru_outout_select_result和SEQDBErrorStru_outout_db_error;第二數(shù)據(jù)庫(kù),還用于通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE中的同步程序DB_Modify_Server讀取第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型和靜態(tài)參數(shù)來(lái)更新第一數(shù)據(jù)庫(kù);數(shù)據(jù)恢復(fù)單元DB_SERVICE,用于負(fù)責(zé)所有的與第二數(shù)據(jù)庫(kù)相關(guān)的讀寫(xiě)操作;數(shù)據(jù)恢復(fù)單元DB_SERVICE將電網(wǎng)模型、靜態(tài)參數(shù)以及歷史數(shù)據(jù)的訪(fǎng)問(wèn)封裝為不同的服務(wù);所述數(shù)據(jù)恢復(fù)單元DB_SERVICE,具體用于在接收到寫(xiě)入性質(zhì)的請(qǐng)求時(shí),調(diào)用db_commit服務(wù)進(jìn)程的主線(xiàn)程將每次接收到的帶有時(shí)標(biāo)特性的歷史數(shù)據(jù)逐一寫(xiě)到不同文件中,并將這些文件按照時(shí)間的順序保存在硬盤(pán)文件系統(tǒng)中,形成一組文件序列,同時(shí)調(diào)用另外一個(gè)線(xiàn)程在第二數(shù)據(jù)庫(kù)正常時(shí)按照時(shí)間順序讀取所述文件序列,解析其內(nèi)容后寫(xiě)入第二數(shù)據(jù)庫(kù),在第二數(shù)據(jù)庫(kù)不正常時(shí),進(jìn)入循環(huán)等待狀態(tài)。[0025]以上對(duì)本發(fā)明所提供的適用于電力系統(tǒng)的數(shù)據(jù)解列及恢復(fù)方法和適用于電力系統(tǒng)的數(shù)據(jù)解列及恢復(fù)裝置,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處。綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制?!緳?quán)利要求】1.一種適用于電力系統(tǒng)的數(shù)據(jù)解列及恢復(fù)方法,其特征在于,所述方法包括:當(dāng)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層接收到對(duì)電網(wǎng)模型和靜態(tài)參數(shù)的讀取請(qǐng)求時(shí),調(diào)用第一數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口TableOpen和TableGet在第一數(shù)據(jù)庫(kù)中進(jìn)行查詢(xún),TableOpen的輸入?yún)?shù)為constchar*app_name矛口constinttable_no;TableGet白勺輸人參數(shù)為char氺field—name,輸出參數(shù)為char**field_buf_ptr和intbufsize;當(dāng)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層接收到對(duì)歷史數(shù)據(jù)的讀取請(qǐng)求時(shí),調(diào)用第二數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口SelectSql通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE在第二數(shù)據(jù)庫(kù)中進(jìn)行查詢(xún),SelectSql的輸入?yún)?shù)為constchar*sql_str,輸出參數(shù)為T(mén)SelectResultStru_outout_select_result和SEQDBErrorStru_outout_db_error;其中,第一數(shù)據(jù)庫(kù)和數(shù)據(jù)恢復(fù)單元DB_SERVICE設(shè)置在電力系統(tǒng)的平臺(tái)層中,第一數(shù)據(jù)庫(kù)以及第二數(shù)據(jù)庫(kù)構(gòu)成系統(tǒng)的整體數(shù)據(jù)庫(kù)環(huán)境;第一數(shù)據(jù)庫(kù)運(yùn)行在內(nèi)存中,由第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型以及靜態(tài)參數(shù)在內(nèi)存中的實(shí)時(shí)映像組成;第二數(shù)據(jù)庫(kù)中存儲(chǔ)有電網(wǎng)模型、靜態(tài)參數(shù)和歷史數(shù)據(jù);訪(fǎng)問(wèn)第一數(shù)據(jù)庫(kù)的接口和訪(fǎng)問(wèn)第二數(shù)據(jù)庫(kù)的接口統(tǒng)一封裝在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層中;數(shù)據(jù)恢復(fù)單元DB_SERVICE負(fù)責(zé)所有的與第二數(shù)據(jù)庫(kù)相關(guān)的讀寫(xiě)操作:當(dāng)所述數(shù)據(jù)恢復(fù)單元DB_SERVICE接收到寫(xiě)入性質(zhì)的請(qǐng)求時(shí),調(diào)用db_Commit服務(wù)進(jìn)程的主線(xiàn)程將每次接收到的帶有時(shí)標(biāo)特性的歷史數(shù)據(jù)逐一寫(xiě)到不同文件中,并將這些文件按照時(shí)間的順序保存在硬盤(pán)文件系統(tǒng)中,形成一組文件序列,同時(shí)另外一個(gè)線(xiàn)程判斷第二數(shù)據(jù)庫(kù)的狀態(tài),若第二數(shù)據(jù)庫(kù)正常則按照時(shí)間順序讀取所述文件序列,解析其內(nèi)容后寫(xiě)入第二數(shù)據(jù)庫(kù),若第二數(shù)據(jù)庫(kù)不正常,則進(jìn)入循環(huán)等待狀態(tài);當(dāng)數(shù)據(jù)恢復(fù)單元DB_SERVICE接收到第一數(shù)據(jù)庫(kù)的同步請(qǐng)求時(shí),調(diào)用同步程序DB_Modify_Server將第一數(shù)據(jù)庫(kù)中的實(shí)時(shí)數(shù)據(jù)寫(xiě)入到第二數(shù)據(jù)庫(kù)中作為歷史數(shù)據(jù)存儲(chǔ),當(dāng)當(dāng)數(shù)據(jù)恢復(fù)單元DB_SERVICE接收到第二數(shù)據(jù)庫(kù)的同步請(qǐng)求時(shí),調(diào)用同步程序DB_Modify_Server讀取第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型和靜態(tài)參數(shù)來(lái)更新第一數(shù)據(jù)庫(kù);在數(shù)據(jù)恢復(fù)單元DB_SERVICE中,電網(wǎng)模型、靜態(tài)參數(shù)以及歷史數(shù)據(jù)的訪(fǎng)問(wèn)被封裝為不同的服務(wù)。2.一種適用于電力系統(tǒng)的數(shù)據(jù)解列及恢復(fù)裝置,其特征在于,所述裝置包括:第一數(shù)據(jù)庫(kù)、數(shù)據(jù)恢復(fù)單元DB_SERVICE以及第二數(shù)據(jù)庫(kù);其中,第一數(shù)據(jù)庫(kù)和數(shù)據(jù)恢復(fù)單元DB_SERVICE設(shè)置在電力系統(tǒng)的平臺(tái)層中,第一數(shù)據(jù)庫(kù)以及第二數(shù)據(jù)庫(kù)構(gòu)成系統(tǒng)的整體數(shù)據(jù)庫(kù)環(huán)境;第一數(shù)據(jù)庫(kù)運(yùn)行在內(nèi)存中,由第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型以及靜態(tài)參數(shù)在內(nèi)存中的實(shí)時(shí)映像組成;第二數(shù)據(jù)庫(kù)中存儲(chǔ)有電網(wǎng)模型、靜態(tài)參數(shù)和歷史數(shù)據(jù);訪(fǎng)問(wèn)第一數(shù)據(jù)庫(kù)的接口和訪(fǎng)問(wèn)第二數(shù)據(jù)庫(kù)的接口統(tǒng)一封裝在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層中;第一數(shù)據(jù)庫(kù),用于在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層接收到對(duì)電網(wǎng)模型和靜態(tài)參數(shù)的讀取請(qǐng)求時(shí),調(diào)用第一數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口TableOpen和TableGet進(jìn)行查詢(xún),TableOpen的輸入?yún)?shù)為constchar*app_name和constinttable_no;TableGet的輸入?yún)?shù)為char*field_name,輸出參數(shù)為char林field_buf_ptr和intbufsize;第一數(shù)據(jù)庫(kù),還用于通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE中的同步程序DB_Modify_Server將實(shí)時(shí)數(shù)據(jù)寫(xiě)入到第二數(shù)據(jù)庫(kù)中作為歷史數(shù)據(jù)存儲(chǔ);第二數(shù)據(jù)庫(kù),用于在數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層接收到對(duì)歷史數(shù)據(jù)的讀取請(qǐng)求時(shí),調(diào)用第二數(shù)據(jù)庫(kù)對(duì)應(yīng)的接口SelectSql通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE在進(jìn)行查詢(xún),SelectSql的輸入?yún)?shù)為constchar*sql_str,輸出參數(shù)為T(mén)SelectResultStru_outout_select_result和SEQDBErrorStru_outout_db_error;第二數(shù)據(jù)庫(kù),還用于通過(guò)數(shù)據(jù)恢復(fù)單元DB_SERVICE中的同步程序DB_Modify_Server讀取第二數(shù)據(jù)庫(kù)中的電網(wǎng)模型和靜態(tài)參數(shù)來(lái)更新第一數(shù)據(jù)庫(kù);數(shù)據(jù)恢復(fù)單元DB_SERVICE,用于負(fù)責(zé)所有的與第二數(shù)據(jù)庫(kù)相關(guān)的讀寫(xiě)操作;數(shù)據(jù)恢復(fù)單元DB_SERVICE將電網(wǎng)模型、靜態(tài)參數(shù)以及歷史數(shù)據(jù)的訪(fǎng)問(wèn)封裝為不同的服務(wù);所述數(shù)據(jù)恢復(fù)單元DB_SERVICE,具體用于在接收到寫(xiě)入性質(zhì)的請(qǐng)求時(shí),調(diào)用db_commit服務(wù)進(jìn)程的主線(xiàn)程將每次接收到的帶有時(shí)標(biāo)特性的歷史數(shù)據(jù)逐一寫(xiě)到不同文件中,并將這些文件按照時(shí)間的順序保存在硬盤(pán)文件系統(tǒng)中,形成一組文件序列,同時(shí)調(diào)用另外一個(gè)線(xiàn)程在第二數(shù)據(jù)庫(kù)正常時(shí)按照時(shí)間順序讀取所述文件序列,解析其內(nèi)容后寫(xiě)入第二數(shù)據(jù)庫(kù),在第二數(shù)據(jù)庫(kù)不正常時(shí),進(jìn)入循環(huán)等待狀態(tài)?!疚臋n編號(hào)】G06F17/30GK104346364SQ201310325319【公開(kāi)日】2015年2月11日申請(qǐng)日期:2013年7月30日優(yōu)先權(quán)日:2013年7月30日【發(fā)明者】趙家慶,趙京虎,蘇大威,張珂珩,李匯群,徐春雷,霍雪松,周宇植,楊洪,李春,呂洋,丁宏恩,錢(qián)科軍,唐勝,李佩玨申請(qǐng)人:國(guó)家電網(wǎng)公司,江蘇省電力公司蘇州供電公司,江蘇瑞中數(shù)據(jù)股份有限公司,江蘇省電力公司