基于c语言的db2数据库开发,DB2日志(2) 用C语言扩展实现DB2日志管理及主备同步
還好DB2提供了相關的USEREXIT程序(又名用戶出口程序)可以使我們管理日志文件并有了擴展功能的可能性.在這一點上DB2明顯要比Oracle開放些.
實現
1.首先將USEREXIT接口打開,讓數據庫支持USEREXIT程序
--查看當前狀態(Windows環境下)
db2 get db cfg for XCLDB2 |find /I "userexit"
--打開userexit
db2 update db cfg for XCLDB2 using userexit on
--查看當前狀態(Windows環境下)
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 系統
Db2uext2.cxbsa — 對 XBSA Draft 0.8 客戶機的支持
這些樣本程序中的每個都只需要稍作修改(如 buffer_size 、 audit_log_activation 、 audit_log_path 、 error_log_activation 和 error_log_path )
除了上面這些,還可以用db2uext2.ctsm來實現.它是新的替代版.
3.以Windows環境為例演示如何編譯擴展.
3.1 用Visual Studio新建一個屬性為空項目的控制臺應用程序工程.注意,工程名為"Db2uext2",
工程目錄為"c:\DB2C"
3.2 將 Db2uext2.cdisk 復制到 C:\DB2C\db2uext2 目錄下,將其更名為Db2uext2.c.
然后在Visual Studio工程中將文件導入.
導入成功后打開文件. 查找并替換 "c:\\mylogs\\" 為自己所要的目錄如 "c:\\xcllogs\\"
其實主要是更改的這幾個參數,具體含義在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 應當可以在"C:\xcllogs\XCLDB2\NODE0000"目錄下查到新產生的日志
C:\>tree C:\xcllogs
卷 WINXP 的文件夾 PATH 列表
卷序列號為 88F1-6579
C:\XCLLOGS
└─XCLDB2
└─NODE0000
c:\>dir C:\xcllogs\XCLDB2\NODE0000
上面舉的是Windows下的,在Unix下時,一定要注意,需先mkdir目錄并授權(如777),
并chown -R 目錄給DB2的用戶.
引申:
上面只是舉了個最簡單的例子,但如果把這個例子擴展下.甚至可以通過日志文件的同步
或異步復制到異機或遠程存儲來實現數據庫的容災.
簡單的說一個主備數據庫同步的實現方法 :
1. 首先在備份數據庫服務器上,用主庫的備份恢復出一個完整的DB2數據庫.
這個備份服務器硬件什么的可以不一致,就是文件系統劃分不一樣時,需要用重定向恢復來生成備庫.
2. 將備份服務器的活動日志目錄,設為主庫服務器有讀寫權限.
3. 參考上面的例子,實現一個擴展.用于將日志傳一份至備份服務器的活動日志目錄.
4. 在備份服務器上弄一個定時作業,定時前滾 "db2 rollforward to end of logs"
哈哈,這樣兩邊就同步了.
這個擴展還可以加上自動定期整理日志的功能.也可以利用Db2uext2.ctape做些磁帶庫方面的擴展.
總之,看個人的創意了.
總結
以上是生活随笔為你收集整理的基于c语言的db2数据库开发,DB2日志(2) 用C语言扩展实现DB2日志管理及主备同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 多线程 参数,如何用C语言实现多
- 下一篇: 【渝粤题库】陕西师范大学200781 数