您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

DB2日志(2) 用C语言扩展实现DB2日志管理及主备同步

2024/2/29 4:45:22发布17次查看
还好db2提供了相关的userexit程序(又名用户出口程序)可以使我们管理日志文件并有了扩展功能的可能性.在这一点上db2明显要比orac
还好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做些磁带库方面的扩展.
总之,看个人的创意了. ,
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product