还好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"目录下查到新产生的日志