国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

AIMS數(shù)據(jù)恢復(fù)情況檢查軟件的設(shè)計(jì)與實(shí)現(xiàn)

2016-06-30 19:09:14張西波
電腦知識(shí)與技術(shù) 2016年14期

張西波

摘要:人工檢查AIMS數(shù)據(jù)的恢復(fù)情況費(fèi)時(shí)、費(fèi)力,還容易出錯(cuò),該文使用Python DB-API 訪問oracle和Sqlite3數(shù)據(jù)庫,實(shí)現(xiàn)AIMS數(shù)據(jù)恢復(fù)情況的檢查。AIMS的數(shù)據(jù)保存在oracle數(shù)據(jù)庫中,需要比較的表名放在SQLite3中,通過DB-API接口分別連接主用和備用Oracle數(shù)據(jù)庫,統(tǒng)計(jì)出每個(gè)表的行數(shù),統(tǒng)計(jì)結(jié)果放到文本文件中,通過比較文本文件來檢查數(shù)據(jù)的恢復(fù)情況。

關(guān)鍵詞:AIMS;Python;SQLite3

中圖分類號(hào):TP393.0 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)14-0011-02

Design and Implementation of Checking Software for AIMS Data Recovery

ZHANG Xi-bo

(Technical Support Department, Tianjin ATM Sub-bureau of North China ATMB, Tianjin 300300,China)

Abstract: It's time-consuming laborious and error prone to check recovery condition of AIMS data, I access Oracle and Sqlite3 database with Python DB-API. AIMS data was stored in oracle and the compared table name was stored in SQLite3, compare the total lines of every tables from the main and backup AIMS server to achieve checking.

Key words: AIMS; Python; SQLite3

1 引言

航班信息系統(tǒng)英文簡(jiǎn)稱AIMS,軟件版本2.5,它是天津空管業(yè)務(wù)中除thales自動(dòng)化處理系統(tǒng)以外的另一個(gè)重要生產(chǎn)系統(tǒng)。該系統(tǒng)為所有保障飛行安全運(yùn)行提供服務(wù),程序化和標(biāo)準(zhǔn)化管制員的日常操作,降低人為差錯(cuò)的可能性。在飛服、進(jìn)近、塔臺(tái)部門和外地管制部門之間傳遞信息,使管制單位的相關(guān)人員了解航空器飛行計(jì)劃、掌握飛行動(dòng)態(tài)、進(jìn)行相關(guān)業(yè)務(wù)數(shù)據(jù)處理。系統(tǒng)主要服務(wù)器由AIMS服務(wù)器和前置服務(wù)器組成,由于當(dāng)時(shí)AIMS系統(tǒng)沒有采用群集技術(shù),主備系統(tǒng)進(jìn)行切換時(shí)需要手工同步數(shù)據(jù)。保存在oracle數(shù)據(jù)庫中的數(shù)據(jù)采用手工方式備份,數(shù)據(jù)的恢復(fù)也只能使用手工方式,備份的腳本有好幾個(gè),備份的表有31個(gè),恢復(fù)后沒有程序進(jìn)行恢復(fù)效果的檢查,在工作中容易出現(xiàn)備份或恢復(fù)出現(xiàn)遺漏的情況,僅靠人工去比對(duì)話工作量很大也不現(xiàn)實(shí)。本文使用Python編寫程序,讓程序檢查,做數(shù)據(jù)恢復(fù)情況的檢查工作。

2 數(shù)據(jù)恢復(fù)情況軟件的設(shè)計(jì)

2.1 系統(tǒng)的連接和工作情況

航班信息系統(tǒng)主備用系統(tǒng)分別連在兩個(gè)不同的交換機(jī)上,由于主用服務(wù)器和備用服務(wù)器的ip地址完全一樣,平時(shí)正常工作的時(shí)候只有主用系統(tǒng)連接終端,備用系統(tǒng)沒有外接終端,系統(tǒng)的數(shù)據(jù)保存在oracle數(shù)據(jù)庫中,主備用系統(tǒng)之間數(shù)據(jù)的同步依靠exp和imp命令。系統(tǒng)的連接情況見圖1。日常需執(zhí)行腳本有導(dǎo)出今日明日計(jì)劃、 導(dǎo)入今日明日、導(dǎo)出空軍計(jì)劃、導(dǎo)入空軍計(jì)劃。主備切換需執(zhí)行腳本:導(dǎo)出資料庫、導(dǎo)入資料庫、導(dǎo)出航路、導(dǎo)入航路、導(dǎo)出用戶和設(shè)置、導(dǎo)入用戶和設(shè)置、導(dǎo)出今日明日、導(dǎo)入今日明日、導(dǎo)出空軍計(jì)劃、導(dǎo)入空軍計(jì)劃、導(dǎo)出長期非定期和導(dǎo)入長期非定期。冬春和夏秋航班換季時(shí)需要執(zhí)行腳本:導(dǎo)出長期非定期、導(dǎo)入長期非定期、導(dǎo)出今日明日計(jì)劃和導(dǎo)入今日明日計(jì)劃。

2.2 數(shù)據(jù)恢復(fù)情況檢查軟件的設(shè)計(jì)思想

為了減少差錯(cuò)和提高工作效率,編制程序作數(shù)據(jù)恢復(fù)情況的檢查,程序設(shè)計(jì)語言使用Python。Python是一種面向?qū)ο?、解釋型?jì)算機(jī)語言,它自帶一個(gè)輕量級(jí)的關(guān)系型數(shù)據(jù)庫SQLite3,SQLite3遵守?cái)?shù)據(jù)庫的四個(gè)要素:原子性、一致性、隔離性和持久性,支持事物操作,所有的維護(hù)來自于程序本身,Python非常容易讀取和保存數(shù)據(jù)到SQLite3。我把所有需要保存的oracle數(shù)據(jù)庫表名保存到SQLite3中。備份時(shí),根據(jù)SQLite3中的表名,統(tǒng)計(jì)出每個(gè)備份Oracle表的記錄數(shù),表名和每個(gè)表的行數(shù)寫入plan_main.txt文件,恢復(fù)時(shí)做同樣的操作,只是表名和每個(gè)表的行數(shù)寫入plan_back.txt文件。做檢查恢復(fù)情況時(shí),比較兩個(gè)文本中每個(gè)表的記錄行數(shù)就可以知道那個(gè)表已經(jīng)恢復(fù)好了,那個(gè)表還存在問題。

3 數(shù)據(jù)恢復(fù)情況軟件的實(shí)現(xiàn)

3.1 在SQLite3中建立需要備份表名的表

CREATE TABLE table_back (id INTEGER NOT NULL PRIMARY KEY, table_name TEXT, description TEXT);

Id字段為序號(hào),table_name字段為oracle數(shù)據(jù)備份中表的名字,description字段保存腳本操作時(shí)的名稱。

[ID\&table_name\&description\&1\&ZRINFO\&航路\&2\&today\&今日明日\&3\&TOD_CONFIG\&用戶和設(shè)置\&4\&COMPANY\&TOD_CONFIG\&…\&…\&…\&]

上表是需要備份表的例子。如果需要備份的表有變化,直接修改table_back中的數(shù)據(jù)就可以了,不用修改程序。

3.2 數(shù)據(jù)庫操作

Python對(duì)于關(guān)系數(shù)據(jù)庫的訪問制定了一個(gè)標(biāo)準(zhǔn),SQLite和Oracle數(shù)據(jù)庫都遵從這一規(guī)范,高級(jí)數(shù)據(jù)庫API定義了一組用于連接數(shù)據(jù)庫服務(wù)器、執(zhí)行SQL查詢并獲得結(jié)果的函數(shù)和對(duì)象。其中主要有兩個(gè)主要對(duì)象:一個(gè)用于管理數(shù)據(jù)庫連接的Connection對(duì)象,另一個(gè)用于執(zhí)行查詢的Cursor對(duì)象,首先創(chuàng)建連接對(duì)象,然后再創(chuàng)建Cursor對(duì)象,使用Cursor對(duì)象執(zhí)行sql操作。連接SQLite3比較容易,importi sqlite3內(nèi)置模塊后就可以了。連接Oracle數(shù)據(jù)庫相對(duì)麻煩一些,需要安裝cx_Oracle擴(kuò)展包,安裝Oracle客戶端軟件(oracle Install Client),配置成功后,才能對(duì)oracle數(shù)據(jù)庫進(jìn)行操作。連接數(shù)據(jù)庫時(shí),每種數(shù)據(jù)庫模塊都提供一個(gè)模塊級(jí)函數(shù)Connect(parameters)。其中實(shí)際使用的參數(shù)因數(shù)據(jù)庫不同而不同。

3.3 程序關(guān)鍵代碼

程序由三個(gè)python文件組成:aims_main.py(在AIMS主用服務(wù)器上運(yùn)行)、aims_back.py(在AIMS備用服務(wù)器上運(yùn)行)和aims_diff.py(每個(gè)表行數(shù)比較)

import cx_Oracle

import sqlite3

class table:#連接oracle 和SQLite3的類

def __init__(self,user_name,user_pass,service_name,file_name):

connstr=self.user_name+'/'+self.user_pass+'@'+self.service_nam

self.conn=cx_Oracle.connect(connstr) #連接數(shù)據(jù)庫

self.cursor=self.conn.cursor()

self.file_name=file_name

self.fd=open(self.file_name,'wb')

def count_table(self,table_name):

self.table_name=table_name

sqlstr="select count(*) from "+self.table_name

self.cursor.execute(sqlstr) #統(tǒng)計(jì)每個(gè)表的行數(shù)

num=self.cursor.fetchone()

import filecmp

x=filecmp.cmp("plan_main.txt","plan_back.txt") #每個(gè)表記錄數(shù)比較

if x :print(" same one ")

else :

print("different one ")

備份和恢復(fù)成功顯示”same one”,備份和恢復(fù)不成功顯示 “different one”,數(shù)據(jù)的比較用程序完成。程序執(zhí)行完后,為了便于查看比較情況,把輸出的文件導(dǎo)入Excel表中,選取部分表,比較情況見圖2。

4 結(jié)論

本設(shè)計(jì)采取程序和數(shù)據(jù)分離的想法,備份的表放在SQLite3數(shù)據(jù)庫中,備份的表發(fā)生改變時(shí)只需要使用SQLite3修改table_back,程序不用修改。本方案能夠很好地完成數(shù)據(jù)恢復(fù)情況的檢查工作。Python語言簡(jiǎn)潔、面向?qū)ο?、容易讀、易于擴(kuò)展和易于維護(hù),調(diào)試和修改都很方便,擁有一個(gè)強(qiáng)大的標(biāo)準(zhǔn)庫,標(biāo)準(zhǔn)庫提供了系統(tǒng)管理、網(wǎng)絡(luò)通信、文本處理、數(shù)據(jù)庫接口等功能,非常適合擴(kuò)展程序的功能。

參考文獻(xiàn):

[1] 周偉. Python開發(fā)技術(shù)詳解[M]. 機(jī)械工業(yè)出版社,2009:174-175.

齐齐哈尔市| 时尚| 中方县| 易门县| 酒泉市| 怀化市| 涟水县| 横山县| 寿光市| 和政县| 乐平市| 墨玉县| 东丰县| 绥棱县| 砀山县| 宁化县| 佛山市| 息烽县| 甘洛县| 张家界市| 万源市| 浦县| 通河县| 克东县| 富蕴县| 托里县| 株洲县| 昌平区| 屯昌县| 桐庐县| 建水县| 滨海县| 申扎县| 尤溪县| 仁怀市| 金坛市| 南昌县| 登封市| 丰城市| 西乌珠穆沁旗| 兰考县|