Java程式呼叫expdp資料泵實現自動邏輯備份Oracle資料庫的方案設計
如果用Java開發一個程式,能夠呼叫Oracle的資料泵expdp實現自動備份,這樣即使是一個不懂Linux,UNIX等作業系統命令以及Oracle資料庫的業務人員,也能透過點選頁面上的選單,實現資料庫的邏輯備份。本文提供了一個設計的思路,供大家學習與交流。
針對資料量比較小的情況下,使用expdp進行備份速度也是比較快的。如果資料量稍大,還可以透過新增parallel引數,用於提升備份的速度,但parallel數值不要超過伺服器CPU數量。
針對Java程式呼叫expdp的方案,需要思考如下幾個問題:
(1)備份需要等待返回嗎?還是透過Java程式調起expdp程式就好?
(2)如果需要等待返回,等了很長時間沒返回怎麼辦?
(3)如果需要等待返回,expdp備份失敗怎麼辦?
(4)如果備份失敗,該又怎樣告訴使用者?
對於問題1,這裡選擇等待返回。一個使用者友好型的設計,是需要和使用者進行互動的,所以要設計成有返回的程式。
對於問題2,3,4,其實是同一個問題,就是程式怎麼告知使用者備份成功了,或者備份失敗了。這裡選擇計時器+日誌檢索+狀態查詢+訊息中心的設計模式,用於應對下列幾種情況:
(1)如果備份程式正常完成工作,各項檢查無誤,透過訊息中心向使用者返回成功資訊。
(2)如果備份程式執行失敗,檢查export.log存在ORA報錯資訊,透過訊息中心向使用者返回失敗資訊。
(3)如果備份程式hang住了,很長時間無返回,比如設定1小時,同時expdp的job狀態也是存在的,那麼就透過訊息中心向使用者返回告警資訊。
下面描述完整的設計過程:
1.準備工作
(1)建立directory和作業系統目錄,配置read,write許可權。
(2)檢查計劃備份資料的Oracle例項當前狀態為read,write。
(3)手工備份hr使用者,測試expdp命令能否正常執行。我曾遇到directory為NFS檔案系統,備份時提示錯誤。
(4)評估備份所需的空間,使用資料泵expdp的estimate=statistics|blocks和estimate_only=y引數對資料庫備份大小進行評估。
(5)檢查邏輯備份的儲存空間是否充足,可以執行命令df -k或df -h檢視。
2.程式設計
設計Java程式,部署在Oracle資料庫伺服器的某一個節點下(可以部署在Tomcat,Weblogic等中介軟體裡,也可以選擇獨立部署,開發人員按照規範自行開發),與伺服器的Oracle使用者進行命令互動,發起expdp的備份命令。
這裡解釋一下計時器+日誌檢索+狀態查詢+訊息中心的設計模式,每個功能的作用:
(1)狀態查詢
狀態查詢的功能是確定expdp是否還在執行,透過定時任務每幾秒查詢資料庫sql,檢視伺服器程式等方式確認,這裡時間間隔可以選擇3秒,5秒等,短時間的偏差不會影響功能體驗。
① 程式呼叫sql,查詢expdp發起時的job是否還在執行
② ps -ef | grep expdp |grep job_name檢視Linux系統程式是否存在
(2)日誌檢索設計
在expdp命令執行完成之後,檢查匯出日誌中是否存在ORA字元,如果存在,意味著有報錯資訊。
(注:如果想設計的更加智慧,可以抓取ORA資訊,呼叫oerr獲取報錯資訊,透過訊息中心傳送給技術人員)
(3)計時器
計時器從程式向系統呼叫expdp命令時開始啟用,狀態查詢確認執行完畢後停止。如果出現超過1小時expdp程式還未停止,程式透過訊息中心向技術人員傳送告警資訊。
(注:超時時間的閾值可以根據實際情況自行調整,30分鐘,2小時都行)
(4)訊息中心
訊息中心是一套獨立的訊息傳送程式,可選擇方案較多,這裡列舉常用四種方案:
①較為簡單的就是向操作介面返回訊息,顯示在頁面上;
②時效性比較低的可以選擇呼叫郵件伺服器,向相關人員傳送成功/失敗/告警郵件;
③時效性較高的是呼叫微信/QQ等網際網路通訊軟體的API介面向使用者推送訊息;
④時效性最高的是透過移動、聯通、電信等運營商向使用者手機傳送簡訊。
到這裡,心中應該有一個程式方案的雛形了。
不過有一點需要注意一下,expdp的命令最好設計成為可配置的,千萬不要硬編碼到程式中,不然程式的可擴充性、可維護性就大大降低。
3.測試案例/場景的準備
為了能夠充分測試各種應用場景以及測試的便利性,這裡做一些約定,同時設計一些測試場景/案例。
約定內容如下:
(1)新掛載一個50M的盤,directory備份路徑指向該盤
(2)使用最簡單的介面操作返回訊息。
測試場景/案例
(1)成功:備份scott使用者,expdp很快完成備份,操作介面在1分鐘之內顯示備份成功訊息。
(2)失敗:全備資料庫,備份會因為磁碟空間滿報錯,操作介面稍後會收到備份失敗訊息。
(3)失敗:刪除備份directory目錄後,備份scott使用者,操作介面會收到備份失敗訊息。
(4)失敗:在expdp備份資料庫的時候,kill備份程式,操作介面會收到備份失敗訊息。
(5)失敗:在expdp備份資料庫的時候,暫停job,操作介面會收到備份失敗訊息。
(6)告警:將計時器超時時間改為1分鐘,全備資料庫,操作介面在1分鐘之後收到告警訊息。
如果讀者有興趣,可以自行開發微信的API推送訊息,或者透過郵件伺服器推送郵件訊息。
如果要傳送簡訊的話,需要和運營商簽訂協議,有條件的朋友,可以在公司的測試環境測試。
4.程式調優/修復BUG
經過多輪測試之後,可能會發現程式某些地方設計不合理,可能會發現程式未按照預期執行,也可能會發現程式有BUG報錯。
那麼下一步,那就是程式調優和修復BUG的工作了,直到自己用著方便,業務用著舒服 ,開發用著滿意。加油吧~
至此,一套完整的Java程式呼叫expdp資料泵實現自動邏輯備份Oracle資料庫的方案設計完畢。
如有其他問題,歡迎交流指正。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31394774/viewspace-2219493/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫的邏輯備份工具-expdp資料泵Oracle資料庫
- oracle邏輯備份之--資料泵Oracle
- [EXPDP]使用11g的資料泵實現對邏輯備份資料進行加密加密
- 【EXPDP】使用11g的資料泵實現對邏輯備份資料進行加密加密
- 使用crontab和expdp實現資料庫定期邏輯備份資料庫
- oracle資料泵備份(Expdp命令)Oracle
- ORACLE資料庫的邏輯備份(轉)Oracle資料庫
- windowns系統,oracle資料庫expdp自動備份Oracle資料庫
- 資料庫邏輯備份(轉)資料庫
- Linux環境下資料庫自動邏輯備份Linux資料庫
- 自動備份Oracle資料庫Oracle資料庫
- Rman-ORACLE資料庫RMAN實現自動備份Oracle資料庫
- Oracle 邏輯備份 expdp/impdpOracle
- 每天自動備份Oracle資料庫Oracle資料庫
- Linux或UNIX系統下oracle資料庫expdp自動備份LinuxOracle資料庫
- 邏輯備份全庫或者邏輯備份多個使用者的資料
- oracle邏輯備用資料庫(一)Oracle資料庫
- 揭祕ORACLE備份之--邏輯備份(EXPDP)Oracle
- 程式設計實現備份和還原資料庫程式設計資料庫
- 【Toad】使用Toad呼叫expdp資料泵備份資料步驟及注意事項
- 資料庫自動備份資料庫
- 資料庫(表)的邏輯備份與恢復資料庫
- Linux 平臺下 Oracle 資料泵備份(expdp) SHELL 指令碼LinuxOracle指令碼
- Oracle 邏輯備份之EXPDP精講Oracle
- 資料庫的定時備份(小庫、資料泵工具)資料庫
- aix oracle 10g實現資料庫的遠端自動備份AIOracle 10g資料庫
- 認識資料庫物理備份和邏輯備份區別資料庫
- Mysql資料庫自動備份MySql資料庫
- Oracle自動備份資料(轉)Oracle
- shell,ant指令碼實現自動資料泵(exp.expdp)匯出匯入資料指令碼
- linux實現mysql資料庫每天自動備份定時備份LinuxMySql資料庫
- Oracle資料泵的備份與恢復Oracle
- Oracle資料庫三種備份方案Oracle資料庫
- Oracle備份恢復五(資料泵)Oracle
- Oracle資料庫(資料泵)遷移方案(上)Oracle資料庫
- Oracle資料庫(資料泵)遷移方案(下)Oracle資料庫
- 資料庫備份方案資料庫
- expdp 邏輯備份指令碼指令碼