筆者在單位使用Unix Openserver 5.05 操作系統和Informix 7.3 資料庫管理系統。對如何做好Unix 系統Informix數據的備份,筆者在日常工作中積累了一些技巧,現介紹給大家。
一、Informix數據備份命令
1.Ontape命令:該命令可以在線進行數據備份,提供0、1、2級三種不同級別的備份方式,其0級備份是對數據空間的完整備份(包括資料庫邏輯日誌),其備份量較大,在此基礎上的1、2級備份,是增量備份,備份量較小。但在數據恢復時,如果0級備份出了問題,則不能進行數據恢復。備份的數據以專用的格式存貯,對用戶「不可見」,給用戶一種不踏實的感覺。
2.Dbexport命令:該命令是對資料庫的完整備份(包括數據結構)。備份的數據格式是文本文件,用戶可以用VI進行編輯,進行部份數據恢復。但不能進行在線備份,需要使資料庫離線。同時要對多個資料庫進行備份時,要用shell程序實現。
3.Unload命令:該命令對資料庫中的一張表進行備份。其優點是方便靈活,備份的數據格式是文本文件,用戶可以用VI進行編輯,進行部分數據恢復。能實現在線數據備份。其缺點是如要對資料庫進行完整備份,要進行編程。
通過以上介紹可知,Ontape命令面向數據空間、dbexport命令面向資料庫、unload命令面向數據表,三種命令各有其長處,也有其不足。綜合考慮,筆者認為採用ontape命令進行周備份(0級備份),用unload命令進行日備份比較合理,方便靈活。
二、用unload命令備份Informix-4gl
用unload命令備份Informix-4gl 的源程序如下:
Define database_name Char(20)
Main
Define tabname Char(18)
Define tmpstr Char(100)
Database database_name
Let database_name = Arg_Val(1)
Declare cur_unload0 Cursor For
Select @tabname From systables
Where @tabid 〉=100 And @tabtype = ="T"
ForEach cur_unload0 Into tabname
Display "Unloading ", tabname Clipped, "..."
Let tmpstr = "echo 'Unload To ", database_name Clipped, "/", tabname Clipped, ".unl Select From ", tabname Clipped,"' | isql ", database_name Clipped, " -"
Run tmpstr
End ForEach
Close Database
End Main
程序中資料庫名從命令行中獲得,對資料庫中的每一張表進行循環,轉存成相應表名的文本文件。
三、對多個資料庫操作的Shell程序
以上程序操作的對象為單個資料庫,如要對 Informix - 4gl 中的每一個資料庫進行備份,則可以用一Shell程序執行。以下是相應的Shell程序,名為 auto_backup。
YYMMDD=`date '+%y%m%d'`
FILENAME=b$YYMMDD\.tar
unload0 motor
unload0 idc
……
tar -fcv $FILENAME ?
compress $FILENAME
省略號處可加上若干資料庫。為了節省空間,對備份好的數據打包、壓縮,生成一個文件。
四、將備份好的數據傳送到數據備份機
對上述備份好的數據,需要將它異機備份或用磁帶進行備份。筆者認為,設置一台專用數據備份機,並在該機上配有一光碟刻錄機,可即時地將數據備份到可讀寫光碟上。
為了將數據從Unix 系統中傳送到Windows 95或Windows 98中去,可使用FTP程序。為了使程序能自動執行,應在Unix用戶中建立.netrc文件,並定義用戶的FTP寫目錄為刻錄光碟。以下是.netrc文件實例:
machine sjbf
login fq
passwd qqqqqq
該文件定義了FTP到一遠程機器為sjbf,用戶為fq,口令為 qqqqqq。
同時建立一文件 auto_ftp,其清單如下:
prompt off
put ?Z
文件auto_backup的最後加入命令:
ftp sjbf 〈 auto_ftp
五、自動定時執行備份
為了使計算機自動執行備份程序,可使用Unix系統中的cron定時執行機制,建議讓Unix系統中的Informix用戶去執行。在Unix系統中,用Informix用戶登錄,執行crontab -e,其內容為:
30 12 ??? /prog/auto_backup
經過以上幾步,我們就做好了自動備份程序,機器每天12:30會自動執行數據備份,並將數據送到可讀寫光碟中去,系統管理員要做的事,就是當光碟中的數據滿時,換一張可讀寫光碟而已。這樣數據備份,相對來講比較安全可靠。如果有一遠程機器可以FTP,則可以非常方便地進行遠程異機備份,極大提高數據備份的可靠性。