?

AIMS數據恢復情況檢查軟件的設計與實現

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

張西波

摘要:人工檢查AIMS數據的恢復情況費時、費力,還容易出錯,該文使用Python DB-API 訪問oracle和Sqlite3數據庫,實現AIMS數據恢復情況的檢查。AIMS的數據保存在oracle數據庫中,需要比較的表名放在SQLite3中,通過DB-API接口分別連接主用和備用Oracle數據庫,統計出每個表的行數,統計結果放到文本文件中,通過比較文本文件來檢查數據的恢復情況。

關鍵詞:AIMS;Python;SQLite3

中圖分類號:TP393.0 文獻標識碼:A 文章編號: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 引言

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

2 數據恢復情況軟件的設計

2.1 系統的連接和工作情況

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

2.2 數據恢復情況檢查軟件的設計思想

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

3 數據恢復情況軟件的實現

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

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

Id字段為序號,table_name字段為oracle數據備份中表的名字,description字段保存腳本操作時的名稱。

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

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

3.2 數據庫操作

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

3.3 程序關鍵代碼

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

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) #連接數據庫

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) #統計每個表的行數

num=self.cursor.fetchone()

import filecmp

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

if x :print(" same one ")

else :

print("different one ")

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

4 結論

本設計采取程序和數據分離的想法,備份的表放在SQLite3數據庫中,備份的表發生改變時只需要使用SQLite3修改table_back,程序不用修改。本方案能夠很好地完成數據恢復情況的檢查工作。Python語言簡潔、面向對象、容易讀、易于擴展和易于維護,調試和修改都很方便,擁有一個強大的標準庫,標準庫提供了系統管理、網絡通信、文本處理、數據庫接口等功能,非常適合擴展程序的功能。

參考文獻:

[1] 周偉. Python開發技術詳解[M]. 機械工業出版社,2009:174-175.

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合