楊世英,孟彩菊,趙春華,靳玉貞,何 佳
(1.山西省地震局太原基準地震臺,山西 太原 030025;2.太原大陸裂谷動力學國家野外科學觀測研究站,山西 太原 030025)
?
地震前兆數(shù)據(jù)庫定制化數(shù)據(jù)的獲取
楊世英1,2,孟彩菊1,2,趙春華1,2,靳玉貞1,2,何 佳1,2
(1.山西省地震局太原基準地震臺,山西 太原 030025;2.太原大陸裂谷動力學國家野外科學觀測研究站,山西 太原 030025)
在了解地震前兆數(shù)據(jù)庫結(jié)構(gòu)的基礎上,介紹了通過使用數(shù)據(jù)庫客戶端軟件和編程的方式訪問地震前兆數(shù)據(jù)庫以獲取定制化數(shù)據(jù)的方法,通過應用實例進一步說明使用這些方法,可以方便地從前兆數(shù)據(jù)庫中獲取定制化的數(shù)據(jù),便于分析研究。
數(shù)據(jù)庫;地震前兆數(shù)據(jù);數(shù)據(jù)獲取
“十五”數(shù)字地震觀測網(wǎng)絡項目完成以來,地震前兆觀測數(shù)據(jù)基于中國地震前兆臺網(wǎng)數(shù)據(jù)管理系統(tǒng)實現(xiàn)地震臺站、區(qū)域中心、國家中心和學科中心四級節(jié)點的匯集、管理、交換及應用。目前,臺站監(jiān)測人員使用“中國地震前兆臺網(wǎng)數(shù)據(jù)處理系統(tǒng)”“運行評價系統(tǒng)”“跟蹤分析平臺”、MapSIS等軟件完成日常數(shù)據(jù)處理及相關分析。雖然這些軟件功能強大,在一般情況下,可以滿足日常大部分工作的需求,但也存在靈活性不足的缺點,無法根據(jù)實際情況對前兆數(shù)據(jù)庫數(shù)據(jù)進行定制。該文簡要介紹前兆數(shù)據(jù)庫結(jié)構(gòu),給出通過客戶端工具訪問前兆數(shù)據(jù)庫的方法、實例及在.NET編程環(huán)境下,訪問前兆數(shù)據(jù)庫的基本步驟及關鍵代碼,并列舉應用實例。
通過查閱“地震前兆數(shù)據(jù)庫結(jié)構(gòu) 臺站觀測”及相關的地震行業(yè)標準,了解地震前兆數(shù)據(jù)庫的結(jié)構(gòu)為:地震前兆數(shù)據(jù)庫的方案(schema)名為“QZDATA”,所有表均置于該方案下。表包括數(shù)據(jù)表、日志表、基礎數(shù)據(jù)表和數(shù)據(jù)字典表四類,不同類型的表通過表名中包含的代碼來標識[1]。
以數(shù)據(jù)表為例,以測項分量為最小管理單元,按測項和采樣率建表,將不同臺站相同測項相同采樣率的數(shù)據(jù)放在一個表中。原始數(shù)據(jù)表、預處理數(shù)據(jù)表及產(chǎn)品數(shù)據(jù)表的命名規(guī)則是“QZ_測項代碼_表類型標識_采樣率代碼”,表中每日每個測項分量一條記錄,起始時間為當天,觀測值序列將觀測值數(shù)據(jù)以ASCⅡ字符形式存放,一天的單個或多個數(shù)據(jù)按采樣次序以一個空格符分隔連接起來,缺數(shù)用“NULL”表示,全天缺數(shù)時可用“NULLALL”表示。采樣率高于1次每秒的數(shù)據(jù),數(shù)據(jù)表中每小時每個測項分量一條記錄,觀測值序列將觀測值數(shù)據(jù)以二進制壓縮數(shù)據(jù)存放,并增加一個“壓縮算法代碼”字段描述所采用的壓縮算法[2]。
可以通過表的E-R關系圖進一步了解前兆庫中表之間的關系。
地震前兆數(shù)據(jù)基于oracle數(shù)據(jù)庫進行存儲,常用的oracle客戶端工具除官方的Oracle SQL Developer外,還有第三方的TOAD、PL/SQL Developer、Oracle SQL Handler等,其中Quest軟件公司的TOAD工具適合開發(fā)人員和DBA人員使用,可以通過一個圖形化的用戶界面快速訪問數(shù)據(jù)庫,完成復雜的SQL、PL/SQL編輯和測試。如,可以快速訪問數(shù)據(jù)字典,瀏覽數(shù)據(jù)庫中的表、索引、存儲過程;編輯、運行、調(diào)整和調(diào)試優(yōu)化SQL、PL/SQL、存儲過程和觸發(fā)器等,還可連接多個表、多個數(shù)據(jù)庫及快速生成報表[3]。
下面舉一個獲取某臺某測項全部日志的例子。運行TOAD軟件,執(zhí)行“New Connection”輸入數(shù)據(jù)庫名及登錄賬號,連接到前兆數(shù)據(jù)庫;通過“Schema browser”瀏覽相關的表,熟悉所要查詢的表名和字段;在“Editor”窗口中輸入“select * from qzdata.qz_232_dlg where stationid ='14013' order by startdate”語句,執(zhí)行“Execute statement”即在 Data Grid區(qū)域得到查詢的數(shù)據(jù);在Data Grid區(qū)域的快捷菜單中,執(zhí)行“Save AS”可將查詢結(jié)果輸出到Excel表,或執(zhí)行“Report”由向?qū)?zhí)行報表輸出。
在熟悉SQL查詢語言和TOAD軟件的使用技巧后,可完成非常復雜的數(shù)據(jù)查詢。為保證數(shù)據(jù)的安全,應使用僅有瀏覽數(shù)據(jù)權(quán)限的用戶賬號訪問數(shù)據(jù)庫。
微軟的Visual Studio .NET是一種功能強大、面向?qū)ο蟮木幊坦ぞ?,用戶可使用自己熟悉的語言(如VB、C#)進行開發(fā)。ADO.NET是.NET平臺中的一種封裝數(shù)據(jù)庫訪問技術,其表現(xiàn)形式是.NET的類庫,擁有2個核心組件,即.NET Data Provider(數(shù)據(jù)提供程序)和DataSet(數(shù)據(jù)集)。數(shù)據(jù)提供程序用于連接到數(shù)據(jù)庫、執(zhí)行命令和檢索結(jié)果,數(shù)據(jù)集是數(shù)據(jù)的一種內(nèi)存駐留表示形式,其中包含對數(shù)據(jù)進行包含、排序和約束的表以及表間的關系。
數(shù)據(jù)提供程序組件主要包括Connection(數(shù)據(jù)連接),用來建立到數(shù)據(jù)源的連接;Command(數(shù)據(jù)命令),用來執(zhí)行各種查詢命令;DataReader(數(shù)據(jù)閱讀器),用來以一種前向只讀的方式高效地訪問數(shù)據(jù)源;DataAdapter(數(shù)據(jù)適配器),可將其理解為數(shù)據(jù)源和數(shù)據(jù)集之間的橋梁等[4]。
以下代碼演示由ADO.NET從前兆數(shù)據(jù)庫查詢數(shù)據(jù)最基本的步驟,代碼中采用Oracle的.NET Framework數(shù)據(jù)提供程序,并使用System.Data.OracleClient命名空間。
(1) 建立到數(shù)據(jù)源的連接。
Private qzConn As New OracleConnection(connectionString)
qzConn.Open()
其中的connectionString變量為連接字符串,格式應符合連接oracle數(shù)據(jù)源的要求,類似于″Data Source=10.14.51.XXX/pdbqz;Persist Security Info=True;User ID=XXXXX;Password=XXXXX;Unicode=True″。
(2) 建立適配器并向數(shù)據(jù)集“填充”數(shù)據(jù)。
Private qzAdapter As New OracleDataAdapter(″″, qzConn)
Private qzDataSet As DataSet
qzAdapter.SelectCommand.CommandText = sqlQueryStr
qzAdapter.Fill(qzDataSet, atableName)
其中的sqlQueryStr 變量為SQL查詢命令字符,格式應符合oracle查詢語法,類似于SELECT * FROM QZDATA.QZ_223_DYS_01 WHERE (STATIONID = ′14001′) AND (POINTID = ′1′) AND (ITEMID = ′2232′) AND (STARTDATE >= TO_DATE(′2010/1/28′, ′YYYY/MM/DD′)) AND (STARTDATE <= TO_DATE(′2010/2/7′, ′YYYY/MM/DD′)) ORDER BY STARTDATE。
(3) 關閉連接。
qzAdapter.Dispose()
qzDataSet.Dispose()
qzConn.Close()
對查詢到的數(shù)據(jù),可根據(jù)實際需要生成文本、EXCEL等各種所需格式的文檔。
科研人員進行課題研究使用數(shù)據(jù)庫中的某種數(shù)據(jù),當其他地震行業(yè)軟件不能完全滿足其要求時,使用上述兩種方法,可以簡單地訪問前兆數(shù)據(jù)庫獲取到所需數(shù)據(jù)。現(xiàn)舉例如下:(1) 2009年,在完成省局課題《數(shù)字化地磁低點位移的應用研究》時,使用編程方法從數(shù)據(jù)庫中取得指定臺站所選時間段內(nèi)的地磁Z分量低點位移Z日變化的低點時間。(2) 2010年,完成省局課題《山西數(shù)字形變數(shù)據(jù)頻譜特征分析》時,使用客戶端工具訪問前兆數(shù)據(jù)庫獲取所需數(shù)據(jù)及日志報表。(3) 2011年,完成中國地震局三結(jié)合課題《太原基準地震臺地磁背景噪聲分析》時,使用編程方法從前兆數(shù)據(jù)庫獲取地磁秒數(shù)據(jù)并進行頻譜分析。(4) 2012年,《地電繪圖軟件》中,使用編程方法從前兆數(shù)據(jù)庫中獲取繪制各種圖件所需的數(shù)據(jù)等。
通過使用數(shù)據(jù)庫客戶端軟件和編程的方式訪問地震前兆數(shù)據(jù)庫,以獲取定制化數(shù)據(jù)的方法,可以幫助科研人員完成各種科研項目數(shù)據(jù)的獲取。隨著各種前兆軟件功能的不斷完善,以上例子中實現(xiàn)的部分功能在相關軟件中也可以實現(xiàn),但本文介紹的方法對科研人員仍有參考價值,對基于MySQL的測震數(shù)據(jù)庫的訪問也有一定的借鑒意義。
[1] 中國地震局.DB/T 51-2012 地震前兆數(shù)據(jù)庫結(jié)構(gòu) 臺站觀測[S].北京:地震出版社,2012.
[2] 周克昌,蔣春花,紀壽文,等.地震前兆數(shù)據(jù)庫系統(tǒng)設計[J].地震,2010,30(2):143-151.
[3] Quest公司.TOAD for Oracle使用手冊[M].北京:Quest公司,2006.
[4] 李建華,劉玉生.Visual C# 2005全程指南[M].北京:電子工業(yè)出版社,2008.
(英文摘要
Acquisition of Customized Data from Seismic Precursor Database
YANG Shi-ying1,2, MENG Cai-ju1,2, ZHAO Chun-hua1,2, JIN Yu-zhen1,2, HE Jia1,2
(1.Taiyuan Referential Seismological Station of Earthquake Administration of Shanxi Province, Taiyuan Shanxi 030025, China;2.Stake Key Observatory of Shanxi Rift System, Taiyuan Shanxi 030025, China)
On the basis of understanding the structure of earthquake precursor database, the methods of accessing an earthquake precursor database to obtain customized data are described by using database client software and a programming approach. The use of these methods is further illustrated through an application example. By using these methods, it is easy to get customized data from the precursor database, which is convenient for analysis and research.
Database; Seismic precursor data; Data acquisition
1000-6265(2016)04-0040-02
2016-03-17
楊世英(1973— ),男,山西省襄汾人。2004年畢業(yè)于太原理工大學,高級工程師。
P315.99
A