基于c语言的db2数据库开发,DB2日志(2) 用C语言扩展实现DB2日志管理及主备同步
還好DB2提供了相關(guān)的USEREXIT程序(又名用戶出口程序)可以使我們管理日志文件并有了擴展功能的可能性.在這一點上DB2明顯要比Oracle開放些.
實現(xiàn)
1.首先將USEREXIT接口打開,讓數(shù)據(jù)庫支持USEREXIT程序
--查看當前狀態(tài)(Windows環(huán)境下)
db2 get db cfg for XCLDB2 |find /I "userexit"
--打開userexit
db2 update db cfg for XCLDB2 using userexit on
--查看當前狀態(tài)(Windows環(huán)境下)
db2 get db cfg for XCLDB2 |find /I "userexit"
2. 去DB2安裝目錄下找到例子程序
Unix下: sqllib/samples/c
Windows下: C:\Program Files\IBM\SQLLIB\samples\c
例子文件:
Db2uext2.cadsm — 對 Tivoli Storage Manager 的支持,也稱為 ADSM
Db2uext2.cdisk — 對磁盤的支持
Db2uext2.ctape — 對本地磁帶的支持,僅可用于 UNIX 系統(tǒng)
Db2uext2.cxbsa — 對 XBSA Draft 0.8 客戶機的支持
這些樣本程序中的每個都只需要稍作修改(如 buffer_size 、 audit_log_activation 、 audit_log_path 、 error_log_activation 和 error_log_path )
除了上面這些,還可以用db2uext2.ctsm來實現(xiàn).它是新的替代版.
3.以Windows環(huán)境為例演示如何編譯擴展.
3.1 用Visual Studio新建一個屬性為空項目的控制臺應(yīng)用程序工程.注意,工程名為"Db2uext2",
工程目錄為"c:\DB2C"
3.2 將 Db2uext2.cdisk 復制到 C:\DB2C\db2uext2 目錄下,將其更名為Db2uext2.c.
然后在Visual Studio工程中將文件導入.
導入成功后打開文件. 查找并替換 "c:\\mylogs\\" 為自己所要的目錄如 "c:\\xcllogs\\"
其實主要是更改的這幾個參數(shù),具體含義在C程序的代碼注釋中很詳細:
#define ARCHIVE_PATH "c:\\xcllogs\\"
#define RETRIEVE_PATH "c:\\xcllogs\\"
#define AUDIT_ACTIVE 1 /* enable audit trail logging */
#define ERROR_ACTIVE 1 /* enable error trail logging */
#define AUDIT_ERROR_PATH "c:\\xcllogs\\" /* path must end with a slash */
#define AUDIT_ERROR_ATTR "a" /* append to text file */
#define BUFFER_SIZE 32 /* # of 4K pages for output buffer */
3.3將編譯好的Reselse版本的db2uext2.exe文件放在DB2管理程序能找到的目錄下.
編譯后的db2uext2.exe文件存放目錄:
Windows下:
C:\Program Files\IBM\SQLLIB\BIN
Unix下:
/sqllib/adm
3.4 測試擴展程序是否生效
3.4.1 在DB2 CLP下手工強制歸檔一份日志
db2 archive log for db XCLDB2
3.4.2 應(yīng)當可以在"C:\xcllogs\XCLDB2\NODE0000"目錄下查到新產(chǎn)生的日志
C:\>tree C:\xcllogs
卷 WINXP 的文件夾 PATH 列表
卷序列號為 88F1-6579
C:\XCLLOGS
└─XCLDB2
└─NODE0000
c:\>dir C:\xcllogs\XCLDB2\NODE0000
上面舉的是Windows下的,在Unix下時,一定要注意,需先mkdir目錄并授權(quán)(如777),
并chown -R 目錄給DB2的用戶.
引申:
上面只是舉了個最簡單的例子,但如果把這個例子擴展下.甚至可以通過日志文件的同步
或異步復制到異機或遠程存儲來實現(xiàn)數(shù)據(jù)庫的容災.
簡單的說一個主備數(shù)據(jù)庫同步的實現(xiàn)方法 :
1. 首先在備份數(shù)據(jù)庫服務(wù)器上,用主庫的備份恢復出一個完整的DB2數(shù)據(jù)庫.
這個備份服務(wù)器硬件什么的可以不一致,就是文件系統(tǒng)劃分不一樣時,需要用重定向恢復來生成備庫.
2. 將備份服務(wù)器的活動日志目錄,設(shè)為主庫服務(wù)器有讀寫權(quán)限.
3. 參考上面的例子,實現(xiàn)一個擴展.用于將日志傳一份至備份服務(wù)器的活動日志目錄.
4. 在備份服務(wù)器上弄一個定時作業(yè),定時前滾 "db2 rollforward to end of logs"
哈哈,這樣兩邊就同步了.
這個擴展還可以加上自動定期整理日志的功能.也可以利用Db2uext2.ctape做些磁帶庫方面的擴展.
總之,看個人的創(chuàng)意了.
總結(jié)
以上是生活随笔為你收集整理的基于c语言的db2数据库开发,DB2日志(2) 用C语言扩展实现DB2日志管理及主备同步的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 多线程 参数,如何用C语言实现多
- 下一篇: 取一个高雅好听的网名146个