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
- 每天自動備份Oracle資料庫Oracle資料庫
- Oracle資料庫(資料泵)遷移方案(上)Oracle資料庫
- Oracle資料庫(資料泵)遷移方案(下)Oracle資料庫
- Oracle expdp資料泵遠端匯出Oracle
- linux實現mysql資料庫每天自動備份定時備份LinuxMySql資料庫
- expdp 邏輯備份指令碼指令碼
- 使用資料泵(expdp、impdp)遷移資料庫流程資料庫
- Mysql資料庫自動備份MySql資料庫
- Oracle資料泵匯出匯入(expdp/impdp)Oracle
- oracle資料庫的impdp,expdpOracle資料庫
- oracle 備份資料庫,匯出資料庫Oracle資料庫
- 資料庫邏輯遷移方案資料庫
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- 「Oracle」Oracle 資料庫備份還原Oracle資料庫
- 【Datapump】Oracle資料泵遷移資料命令參考(expdp/impdp說明)Oracle
- oracle資料庫備份之exp增量備份Oracle資料庫
- 實現MySQL資料庫的實時備份MySql資料庫
- 【DATAPUMP】Oracle資料泵定時備份刪除指令碼Oracle指令碼
- golang實現mysql資料庫備份GolangMySql資料庫
- BMMySQL定時備份資料庫(全庫備份)的實現meuMySql資料庫
- SQL SERVER 2012資料庫自動備份的方法SQLServer資料庫
- mysqlpump 資料庫備份程式MySql資料庫
- mysqldump 資料庫備份程式MySql資料庫
- oracle uncatalog資料庫備份檔案Oracle資料庫
- 進階寶典一|SqlServer資料庫自動備份設定SQLServer資料庫
- 使用impdp,expdp資料泵進入海量資料遷移
- 通過dblink,資料泵expdp遠端跨版本導庫
- 【資料泵】EXPDP匯出表結構(真實案例)
- DB2資料庫自動備份方法TRDB2資料庫
- 資料庫實驗五:資料庫程式設計資料庫程式設計
- 資料庫實驗八 資料庫程式設計資料庫程式設計
- Oracle EXPDP自動備份緩慢問題解決Oracle
- oracle資料庫使用rman備份指令碼Oracle資料庫指令碼
- 資料庫備份資料庫
- 8種手動和自動備份MySQL資料庫的方法MySql資料庫
- 【DB筆試面試164】在Oracle中,如何徹底停止expdp資料泵程式?筆試面試Oracle