劉繼敏
摘要:在原有的數據驗證平臺中采用軟件進行數據交換,存在較大的因中間環節處理失敗或是單點故障的可能性,同時監控困難。在新的數據驗證平臺中直接采用在oracle中使用PL/SQL語言進行事務處理,極大提高了系統的穩定性和高執行性能。
關鍵詞:PL/SQL;數據驗證平臺;事務控制;自治性事務;并發訪問與會話
中圖分類號:TP311 文獻標識碼:A 文章編號:1007-9416(2017)10-0101-01
1 為什么選擇PLSQL腳本語言
數據驗證平臺是數據交換類型的中間平臺,它作為一種數據交換服務在后臺運行,首要解決的問題就是平臺的穩定性。
數據驗證平臺原有的設計方案是基于IBM InfoSphere DataStage軟件作為數據抽取和同步的中間層,它將各個業務系統數據庫中的證書和產品數據同步到數據驗證平臺的數據庫。再通過Java編寫的Web應用進行Job定時調度,調用總局e-CIQ的Web Service接口來發送通關驗證平臺的證書和產品數據。該設計方案引入Java Web應用和IBM InfoSphere DataStage等中間處理環節,這些環節并不是必須的,而且會帶來更多的因中間環節處理失敗或是單點故障的可能性。同時,IBM InfoSphere DataStage是第三方軟件,目前還只能從日志文件中得到每次任務處理結果信息,監控不方便。
新的數據驗證平臺設計方案是完全使用ORACLE數據庫端的腳本語言PL/SQL來實現,不再使用舊方案的Java Web應用和IBM InfoSphere DataStage。新方案的所有代碼完全在數據驗證平臺自身的數據庫中調度和運行,具備高度穩定性和高執行性能。
PL/SQL一種塊結構的語言,主要用于ORACLE數據庫中。PL/SQL程序塊是最基本單位,整個PL/SQL程序塊分三部分:用DECLARE關鍵字的聲明部分、用BEGIN/END關鍵字包括的執行部分和用EXCEPTION關鍵字的異常處理部分。程序塊是可以嵌套的,完全可以控制變量的可見范圍和異常范圍。PL/SQL語言可以完成相關的數據抽取、數據準備、數據打包和數據發送等功能。
2 面臨的技術問題
理論上,雖然PL/SQL可以實現數據驗證平臺數據交換所有功能,但作為生產力語言,還是需要對它的語法規范、數據類型、程序包封裝、事務控制和自治性的事務控制(ORACLE特性功能)、并發訪問與數據庫會話關系、異常處理、JOB功能調度和性能優化等方面進一步深入研究,完善解決以上各類問題。
3 具體實現方法
3.1 JOB調度
數據驗證平臺主體的功能是通過JOB調度來驅動的,使用ORACLE程序包DBMS_SCHEDULER.CREATE_JOB方法創建執行JOB。以下腳本是JOB任務的創建、恢復、暫停和刪除腳本。在創建腳本中,JOB_ACTION參數值是JOB要執行的程序代碼,該代碼調用程序包INTF_MAIN的PC_MAIN方法,即INTF_MAIN.PC_MAIN()。REPEAT_INTERVAL參數值是JOB執行的時間間隔,DAILY是每天運行,BYHOUR、BYMINUTE和BYSECOND是定義具體執行的整點時刻。
3.2 程序包功能
數據驗證平臺將所有的可執行代碼封裝到ORACLE的PACKAGE對象中,就像剛才在創建JOB時調用ORACLE系統級的程序包DBMS_SCHEDULER一樣。程序包對象分為兩部分來定義,一是接口部分,二是實現部分。
程序包INTF_MAIN包括數據驗證平臺所有的業務功能。程序包實現的部分方法,包括全局變量定義和PC_MAIN方法的定義(JOB創建時調用的主程序方法)。
我們在實施中可以看到還調用了INTF_LOGS包和INTF_ EMAIN包,這兩個包是我們開發用于日志記錄包和郵件發送包。
還可以看到,對于每個業務系統,都會調用PC_CERTTYPE方法,傳入指定業務系統的系統ID,例如證書等系統。
3.3 并發訪問與會話
對于ORACLE每一次后臺JOB調度,都會啟動一個新的SESSION,即每次都是不同的SID與SERIAL#組合(SID可能會相同,但SERIAL#肯定不同)。同時,程序包INTF_MAIN包體中定義的全局變量只在JOB當前執行的會話中可以共享訪問,在不同的會話中是不能共享數據的,因此JOB執行任務可以并行執行。
3.4 事務控制
在PC_CERTTYPE方法內部,實現了數據邏輯處理的四個階段,數據接收、數據準備、數據打包和數據發送。對于每一個數據處理階段,是一個完整的事務提交和回滾。如果事務提交,會提交數據和記錄日志。如果發生回滾,則會記錄日志和發送郵件。
3.5 自治性事務
自治事務是指一個塊結構內部的事務控制脫離外部調用的事務上下文,這個塊結構本身的事務稱之為自治事務,外部調用的事務稱之為主事務。自治事務通過編譯器參數PRAGMA AUTONOMOUS_ TRANSACTION來指定。自治事務由主事務啟動后,主事務進入掛起狀態,當自治事務執行提交事務或回滾事務后,主事務恢復執行,主事務做自己的提交或回滾。也就是說,即使主事務回滾,自治事務也可以提交成功的。通關驗證平臺對于JOB執行的日志數據記錄采用自治事務。對于每一個數據處理階段(參考PC_CERTTYPE代碼),采用一個主事務提交或回滾。但是,無論主事務是否成功,自治事務作為獨立與主事務的事務,是可以提交并記錄日志的。
3.6 PL/SQL語言結構
從PC_CERTTYPE方法中,可以看到該方法整體是一個BEGIN … END代碼結構。對于每一個數據邏輯處理階段,又會嵌套一個BEGIN EXCEPTION END;代碼結構。EXCEPTION中可以編寫異常處理代碼,與JAVA異常機制類似,可以定義異常、捕獲異常、拋出異常和嵌套異常。
4 結語
采用ORACLE數據庫端的腳本語言PL/SQL來實現新的數據驗證平臺。通過實踐驗證,具有極高的穩定性和優秀的性能表現。在具體實現中,針對事務處理,在JOB調度、程序包功能、并發訪問與會話、事務控制、自治性事務處理等方面具有很強的處理能力。
參考文獻
[1]Oracle PL/SQL程序設計(第6版),ISBN: 9787115448750,史蒂芬·弗伊爾斯坦(Steven Feuerstein)(作者),比爾·普里比爾(Bill Pribyl)(作者),方鑫 (譯者),人民郵電出版社,2017年7月.endprint