蘇亞濤
(亳州學院 電子與信息工程系,安徽 亳州 236800)
高校信息化建設中共享數(shù)據(jù)中心是整個信息同步的核心,共享數(shù)據(jù)中心數(shù)據(jù)來源于各應用系統(tǒng)如:人事系統(tǒng)、教務系統(tǒng)、一卡通系統(tǒng)等(見圖1)。各應用系統(tǒng)負責對本系統(tǒng)的數(shù)據(jù)進行維護和管理,共享數(shù)據(jù)中心的數(shù)據(jù)與各應用系統(tǒng)數(shù)據(jù)要保持實時同步,因此數(shù)據(jù)同步技術是整個共享數(shù)據(jù)中心的關鍵技術[1]。
ETL是建立數(shù)據(jù)倉庫的基礎,它是對數(shù)據(jù)分布和異構的有效集成[2]。ETL機制主要由數(shù)據(jù)抽取、轉換和加載組成。數(shù)據(jù)抽取是指根據(jù)目標數(shù)據(jù)系統(tǒng)的要求從源數(shù)據(jù)系統(tǒng)中獲取數(shù)據(jù)的過程;數(shù)據(jù)轉換是指根據(jù)目標數(shù)據(jù)系統(tǒng)所需的形式和業(yè)務需求,改變源數(shù)據(jù)系統(tǒng)對數(shù)據(jù)的需求過程,在轉變過程中要根據(jù)情況對數(shù)據(jù)的錯誤和不一致進行清洗和加工;數(shù)據(jù)加載是將按要求轉換的數(shù)據(jù)裝載到目的數(shù)據(jù)系統(tǒng)的過程[3]。ETL機制目前已經(jīng)比較成熟,許多專家、學者提出了很多的ETL策略和模式,Oracle、SQL Server、DB2等主流數(shù)據(jù)庫都提供了對ETL機制的支持。將ETL機制應用于高校共享數(shù)據(jù)中心,可以實現(xiàn)將分布于各應用系統(tǒng)中的數(shù)據(jù)與共享數(shù)據(jù)中心進行數(shù)據(jù)同步。ETL流程如圖2所示。
圖1 高校共享數(shù)據(jù)中心結構
圖2 ETL運行機制
2.1.1 數(shù)據(jù)抽取
數(shù)據(jù)抽取是從數(shù)據(jù)源中抽取數(shù)據(jù)的過程,有全量抽取和增量抽取兩種方式。全量抽取簡單但效率低;增量抽取效率高,但抽取機制相對復雜。全量抽取是將源數(shù)據(jù)庫中的數(shù)據(jù)全部抽取,但對于數(shù)據(jù)量龐大的數(shù)據(jù)庫來說,會增加數(shù)據(jù)傳輸?shù)木W(wǎng)絡流量,增加抽取和轉換的時間,全量抽取對于數(shù)據(jù)量大的數(shù)據(jù)庫來說是不可行的[4]。增量抽取可以有效地避免全部抽取數(shù)據(jù),只對上一次數(shù)據(jù)抽取時間點后數(shù)據(jù)庫中變化的數(shù)據(jù)進行抽取,增量抽取包括插入、修改和刪除數(shù)據(jù)。
增量抽取效率高、速度快,其關鍵在于要準確獲取變化的數(shù)據(jù)。增量抽取主要包括觸發(fā)器方式、時間戳方式、日志表方式、CDC方式、全表對比方式、全表刪除插入方式等。觸發(fā)器方式是指在被抽取的數(shù)據(jù)表上設立觸發(fā)器,當該表中產(chǎn)生新增、更新或刪除等數(shù)據(jù)改變時觸發(fā)器會記錄改變數(shù)據(jù),然后將改變數(shù)據(jù)存儲在一個臨時表中,在臨時表中的數(shù)據(jù)抽取完畢后,再將臨時表記錄刪除。時間戳方式是在源數(shù)據(jù)表中建立一個時間戳字段,用于記錄每一次的抽取結束時間,每次進行數(shù)據(jù)抽取時,與時間戳字段記錄的時間進行對比,只針對上次抽取時間以后的數(shù)據(jù)進行抽取。全表刪除插入方式是在提取數(shù)據(jù)時刪除目標表中的所有數(shù)據(jù),然后將源數(shù)據(jù)表中提取的數(shù)據(jù)復制到目標表中。全表對比方式是建立一個與源數(shù)據(jù)表具有相同或相似結構的表,在該表中對源表的主鍵進行記錄,在執(zhí)行抽取操作時,對該表和源表進行全面對比,對變化的數(shù)據(jù)進行抽取[5]。日志表方式是指在被抽取的源數(shù)據(jù)庫中,通過系統(tǒng)日志表記錄數(shù)據(jù)變化情況,通過日志獵取變化數(shù)據(jù)進行抽取。CDC方式是Orcale 9i版本數(shù)據(jù)庫的新技術,CDC方式通過對數(shù)據(jù)庫自身日志進行分析,得出數(shù)據(jù)變化的情況,Oracle的CDC分為同步和異步兩種模式。各種數(shù)據(jù)抽取方法的效率、準確性的對比見表1所示。
表1 數(shù)據(jù)抽取方式對比
2.1.2 數(shù)據(jù)的轉換、加工
在抽取源數(shù)據(jù)庫中的數(shù)據(jù)后,這些數(shù)據(jù)在編碼標準、數(shù)據(jù)格式方面與目標數(shù)據(jù)庫的要求或格式無法嚴格匹配,并且數(shù)據(jù)抽取過程中會出現(xiàn)數(shù)據(jù)不完整或異常等情況,所以必須對已抽取數(shù)據(jù)進行轉換、加工。數(shù)據(jù)的轉換和加工主要通過ETL引擎或數(shù)據(jù)庫函數(shù)實現(xiàn)。數(shù)據(jù)庫中還提供了實現(xiàn)數(shù)據(jù)轉換的函數(shù),可以利用這些函數(shù)進行數(shù)據(jù)轉換,但通過函數(shù)進行數(shù)據(jù)的加工有一定的局限性。
2.1.3 數(shù)據(jù)裝載
數(shù)據(jù)轉換和加工后,要將數(shù)據(jù)存儲到目標數(shù)據(jù)庫中,數(shù)據(jù)的裝載使用SQL語句對目的數(shù)據(jù)庫進行更新,常用的SQL語句如insert、update、delete等。為了提高裝載效率,特別是裝載數(shù)據(jù)量較大時,可以采用批量處理,如sqldr 等。
由于Oracle是當前使用最廣泛的數(shù)據(jù)庫,因此針對Oracle進行數(shù)據(jù)庫間數(shù)據(jù)同步進行詳細介紹,Oracle的數(shù)據(jù)同步機制有多種方式,如DLL方法、Orcale快照。
2.2.1 傳統(tǒng)數(shù)據(jù)同步方法——DLL方法
DLL方法是基于Oracle數(shù)據(jù)庫鏈接,在目標數(shù)據(jù)庫中建立對應于源數(shù)據(jù)庫的表或視圖。數(shù)據(jù)同步可以采取時間戳更新、全表刪除插入、全表比較更新等。具體操作步驟如下:
步驟1:在目標數(shù)據(jù)庫中配置與源數(shù)據(jù)庫對應的實例名(服務名)。對tnsname.ora文件進行如下配置。
SOURCE=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=IP)(PORT=port))——“IP”為具體IP地址,“port”為端口號
(CONNECT_DATE=(SERVER=DEDICATED)
(SERVICE_NAME= SERVICE_SOURCE)))
步驟2:對目標數(shù)據(jù)庫建立DBLink。
create dataBase like DL_SD connected to user indetifide by password using ‘S_SOURCE’;
其中DL_SD是DB Link的名稱,user、password為源數(shù)據(jù)庫的用戶名、密碼,S_SOURCE為配置的實例名(服務名)。
步驟3:建立與源數(shù)據(jù)庫對應的數(shù)據(jù)庫表或視圖。
create table Table1 as select *from Table1 @S_SOURCE;
create or replace view V_S1 as select * from Table1 @S_SOURCE;
步驟4:采用全表刪除插入、對比更新、時間戳更新進行對數(shù)據(jù)同步。
Delete from Table1;
Insert into Table1 as select*from S_SOURCE @S_SOURCE;
同步方法根據(jù)實際情況而定,如在校園一卡通系統(tǒng)人員信息表使用全表刪除插入方式進行數(shù)據(jù)同步,消費信息表使用時間戳方式進行數(shù)據(jù)同步。
2.2.2 Orcale快照
Orcale數(shù)據(jù)庫的快照是在目標數(shù)據(jù)庫中建立數(shù)據(jù)表,在源數(shù)據(jù)庫中對需要同步的數(shù)據(jù)表建立快照日志,日志表將記錄其對應表中的數(shù)據(jù)的變化,當快照刷新時,被處理后的源數(shù)據(jù)表中變化數(shù)據(jù)將存儲到目標數(shù)據(jù)庫中的表中。對Oracle數(shù)據(jù)庫和遠程數(shù)據(jù)庫必須以DB Link為基礎。DB Link建好后,再執(zhí)行如下步驟:
步驟1:建立源數(shù)據(jù)庫表快照日志。
Create snapshot log on S_SOURCE;
步驟2:建立共享數(shù)據(jù)中心的快照。
create snapshot S_N1_ Table1 as select * from Table1 @AS SELECT * FROM S_SOURCE @S_SOURCE;
步驟3:設置刷新時間。
alter snapshot S_N1_ Table1 refresh fast start wite sysdate+10/24*60 next trunk(sysdate)+1+1/240;
其中,“start”為設置執(zhí)行刷新的時間為10 m后執(zhí)行,“next”表示每天1點進行刷新。
由于教務系統(tǒng)中的數(shù)據(jù)都采用快照模式來同步數(shù)據(jù),因此需要在現(xiàn)有的教務系統(tǒng)數(shù)據(jù)庫中建立相應的快照日志,并通過快照的定時刷新來同步數(shù)據(jù)。
當為非Oracle數(shù)據(jù)庫系統(tǒng)時,Oracle數(shù)據(jù)庫提供了透明網(wǎng)關來實現(xiàn)數(shù)據(jù)同步。MS SQL Server、Sybase、DB2等主流數(shù)據(jù)都可以被Oracle透明網(wǎng)關支持。如圖3所示,其他數(shù)據(jù)庫通過Oracle透明網(wǎng)關與Oracle服務進行交互,透明網(wǎng)關服務器對于Oracle服務器來說就是一個Oracle服務器。
圖3 Oracle透明網(wǎng)關結構
以MS SQL Server為例說明透明網(wǎng)關的配置(以下建立文件的路徑為“%ORACLE_HOME% etwordadmin”):
步驟1:建立源數(shù)據(jù)庫在共享數(shù)據(jù)中心Oracle數(shù)據(jù)庫下的別名byname。建立文件initTEST.ora編輯其內(nèi)容:
HS_FDS_CONNECT_INFO=”SERVER=192.168.10.100;DATABASE=byname”
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
步驟2:建立listener編輯其內(nèi)容。
(SID_DESC=
(SID_NAME= byname)
(ORACEL_HOME=D:oracleproduct10.1.0db_1)
(PROGRAM=tg4msql))
步驟3:修改tnsnamees.ora。
ZNDB=
(DESCRIPTION=
(ADDRESS_LIST=
SOURCE=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=IP)(PORT=port))——“IP”為具體IP地址,“port”為端口號
(CONNECT_DATA=(SID= byname))
(HS= byname)))
說明:在MS SQL Server透明網(wǎng)關的配置中,需要安裝Oracle透明網(wǎng)關組件,且運行在windows系統(tǒng)之上。至此,配置工作完成,可以建立數(shù)據(jù)庫連接(DB Link)實現(xiàn)Oracle與SQL Server的數(shù)據(jù)庫連接。
除了使用Oracle自帶的數(shù)據(jù)同步機制,還可以開發(fā)第三方的程序進行數(shù)據(jù)庫間數(shù)據(jù)的同步。這樣可以減少源數(shù)據(jù)庫共享數(shù)據(jù)中心對數(shù)據(jù)轉換和加工的負擔。特別是針對一些學校原有系統(tǒng)普遍使用SQL Server數(shù)據(jù)庫的情況[6],即使使用透明網(wǎng)關,但只能部署在windows服務器上,容易導致操作不穩(wěn)定,所以在SQL Server與Oracle之間的數(shù)據(jù)同步中,可以開發(fā)一些數(shù)據(jù)同步的程序。
數(shù)據(jù)同步包括兩種方式:定時同步和實時同步。實時同步容易造成對數(shù)據(jù)庫的頻繁操作,導致數(shù)據(jù)庫負載過大。因此,在沒有特殊要求的情況下,最好使用定時同步方式進行數(shù)據(jù)同步。
定時數(shù)據(jù)同步可以避免在峰值時間增加對數(shù)據(jù)的訪問,有效減輕數(shù)據(jù)庫的負擔。例如,一卡通數(shù)據(jù)庫中師生的存取、消費數(shù)據(jù),對這些數(shù)據(jù)進行統(tǒng)計和分析,可以很好地掌握校園消費狀況,這部分數(shù)據(jù)的實時性不強,可以每天或幾天進行查詢一次,因此可以設計成定時數(shù)據(jù)同步,如數(shù)據(jù)同步時間定為每天凌晨。定時同步分為Oracle的定時任務和第三方程序定時同步兩種方法。
2.5.1 Oracle定時任務
Oracle提供了一種定時執(zhí)行任務的功能——Oracle job。先編寫存儲過程實現(xiàn)數(shù)據(jù)同步功能,再通過Oracle job完成存儲過程的定時執(zhí)行。job的代碼如下:
Variable job_N1 number;
Begin
——每天3點執(zhí)行
Dbms_job.submit(:job_N1,‘ykt.p_jwc_tb_all;’,to_date(‘2017-08-20 3:00:00’,‘yyyy-mm-dd hh24:mi:ss’),‘TRUNC(SYSDATE+1)+(3*60+30/(24*60))’);
Commit;
End;
2.5.2 第三方程序定時同步
Oracle定時任務僅適用于Oracle之間的數(shù)據(jù)同步,但現(xiàn)實中,也會出現(xiàn)使用非Oracle數(shù)據(jù)庫情況,這時可以使用Oracle透明網(wǎng)關或第三方程序來實現(xiàn)同步。已經(jīng)對Oracle透明網(wǎng)關進行了闡述,第三方同步程序中會使用一個定時線程來對同步時間進行設置,程序會按照同步時間實現(xiàn)數(shù)據(jù)同步。
執(zhí)行數(shù)據(jù)同步需要考慮到數(shù)據(jù)庫的負擔問題,大部分數(shù)據(jù)同步都使用定時同步,但也有一些情況需要進行實時同步,如學生課程成績數(shù)據(jù)庫中的數(shù)據(jù),教務系統(tǒng)對成績進行修改后,就需要及時與共享數(shù)據(jù)中心數(shù)據(jù)進行同步,否則就會影響學生實時查詢、打印成績。針對這種情況可以考慮使用如觸發(fā)器同步或采取教師客戶端手動同步機制,即以成績更新為觸發(fā)數(shù)據(jù)同步操作或教師手動操作完成數(shù)據(jù)同步。
共享數(shù)據(jù)中心是高校數(shù)據(jù)資源共享統(tǒng)一服務平臺應用的共享和交流平臺,是智慧校園中各種結構化數(shù)據(jù)或數(shù)據(jù)交換平臺和各種應用系統(tǒng)的統(tǒng)一管理平臺,數(shù)據(jù)同步機制與實現(xiàn)為進一步的數(shù)據(jù)挖掘和數(shù)據(jù)分析提供重要依據(jù)。
[1] 邱 亮.關于分布式云數(shù)據(jù)中心架構及管理關鍵技術研究[J].電子技術與軟件工程,2016(09):97-99.
[2] 黃 峰.分布式云數(shù)據(jù)中心架構及管理關鍵技術[J].自動化儀表,2014(08):35-37.
[3] 舒 暉,任 宇.基于信息化環(huán)境的網(wǎng)絡教學與資源共享管理平臺建設[J].中國現(xiàn)代教裝備,2017(21):41-43.
[4] 馬文龍,朱妤晴,蔣德鈞,等.Key-Value型NoSQL本地存儲系統(tǒng)研究[J].計算機學報,2017,40:1-35.
[5] 劉 露,郭 磊,楊秀云,等.數(shù)字化校園三大平臺建設研究[J].電子技術與軟件工程,2017(10):187-188.
[6] 劉業(yè)峰.基于BS結構的B2C電子商務管理系統(tǒng)設計與開發(fā)[J].沈陽工程學院學報:自然科學版,2017,13(1):59-65.