基于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做些磁带库方面的扩展.

总之,看个人的创意了.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ZigBee 自组网模块的路灯控制网络

相关数据显示,中国有600多个城市在进行智慧化建设。智慧城市最关键的特征就是串联整座城市,整个城市互相联动。路灯是城市必不可少的市政基础设施。要发展智慧城市,智慧路灯物联网是一个切入口。目前很多城市也在大力推广功能多样的智慧路灯&…

安防监控工程中该如何选择光端机?

目前市场上多路数字视频光端机,涉及的技术指标种类繁多,大部分工程上和用户也缺乏相应的手段而无法判断技术指标是否合理和真实,因此在选择产品时,容易迷失方向。今天,飞畅科技的小编从两个方面来描述在安防工程中比较…

你一定要了解的NB-IoT !

NB-IoT是指窄带物联网(NarrowBand-InternetofThings)技术。NB-IoT聚焦于低功耗广覆盖(LPWAN)物联网(IoT)市场,是一种可在全球范围内广泛应用的新兴技术。 说起NB-IoT的引…

c语言strcpy函数 内部分配,C语言strcpy函数实现.

看面试题的时候有个题目是不使用库函数,实现strcpy函数.(字符串拷贝函数)这个是我写的代码,在机器上编译过了.void my_strcpy(char *t,char *s){while((*t*s));}看了很多帖子,发现我这个代码的问题还是很多的.即使这么简单的一个小程序也有很多的东西需要考虑.下面总结:1.关于函…

光端机需要成对使用吗?

有些新客户坏了一个其他品牌的设备,想买一个设备去替换,总会来质询,“光端机要成对使用吗?”。答案是对的,其实光端机要成对使用的。光端机是用在以光纤作为载体的光、电传换器。发送端和接收端必须是同一种设备。那么…

LoRa 和NB-IoT 那个才是智慧停车低成本的最佳选择

随着现在城市发展,人们的生活水平也是在逐渐的提高,并且大部分的家庭也是配备了汽车,但是一说到停车这个话题,尤其是大城市不得不说停车难的问题。因为停车问题的逐渐发酵,所以智慧停车也就因运而生了。 智慧停车发展潜…

vert.x_选择Vert.x的3个理由

vert.xVert.x是用于JVM的轻量级高性能应用程序平台 现代Web应用程序和移动客户端的兴起重新定义了Web服务器的期望。 Node.js是第一个识别范式转换并提供解决方案的技术。 应用程序平台Vert.x继承了Node.js的一些创新,并使其在JVM上可用,将新鲜的想法与…

工业以太网交换机可以家用吗?

工业交换机也称作工业以太网交换机,即应用于工业控制领域的以太网交换机设备,由于采用的网络标准,其开放性好、应用广泛以及价格低廉、使用的是透明而统一的TCP/IP协议,以太网已经成为工业控制领域的主要通信标准。 工业交换机具…

自考c语言程序阅读题,自考C语言程序设计模拟试题二答案.DOC

本资料由广州自考网收集整理,更多自考资料请登录 HYPERLINK "http://www.gzzk.cc" www.gzzk.cc下载再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。 第 PAGE 1 页 (共 NUMPAGES 3 页)自考“C语言程序设计”模…

lora近几年发展的具体介绍

大家好,我是LoRa,以下是我的“名片”: 经过过去几年的成长,相信大家对我已经有了比较深入的了解了,毕竟我也算在业界打出知名度了。 但是,经过了解发现发现很多业界人士对我仍然存有误解,因此我希望通过本文…

TOF测距功能的原理及使用方法

一、飞行时间测距法TOF(time-of-flight)测距方法 该方法属于双向测距技术,利用数据信号在一对收发机之间往返的飞行时间来测量两点间的距离。将发射端发出数据信号和接收到接收端应答信号的时间间隔记为Tt,接收端收到发射端的数据信号和发出应…

c语言二维数组教材分析,C语言《二维数组》说课稿.docx

《二维数组》说课稿一、教学目标通过本次课教学,学生能进一步理解二维数组的定义,二维数组的引用的方 法;掌握二维数组的初始化技能目标:培养学生逻辑思维能力、综合运用知识的能力和自主学习能力; 二、教材分析选用教…

Java –从列表中删除所有空值

介绍: 在本文中,我们将学习如何使用普通的Java,Java 8 lambda表达式和某些第三方库从Java 列表中删除空值 。 所以,让我们开始吧! 从Java中的 让我们探索从Java 列表中删除null的不同方法: 1. Java 7或更…

飞畅科技关于网管型环网交换机的工作原理介绍

现如今,随着通信产业的发展和国民经济信息化的发展,管理型环网交换机市场稳步增长。 它的成本效益高,高度灵活性,相对简单并且易于实施。 以太网技术已成为当今重要的LAN网络技术,并且管理型环网交换机已成为人们深受欢…

无线数传在桥梁检测中传感器信号的采集应用

桥梁检测是利用传感器感受被测物体的物理量信号,并将感受到的信号,按一定的规律转换为电信号输出;然后使用自动采集装置采集传感器的电信号,并使用无线数据传输模块将数据上传到远端服务器上,以满足信息的处理、存储、…

交换机该选择千兆还是百兆的呢?

为能负载现在越来越复杂的视频监控系统网络,交换机需要接入的摄像头数量也就越多,交换机的数据量就越大,交换机必须具备非常稳定的转换数据的能力来传输大量而又持续的视频数据。那么,交换机该选择千兆还是百兆的呢?接…

c语言减去随机数为负数,scratch教程:随机数和负数的概念

记得在之前的兴趣课程里面有提到过几个随机数和负数的概念,对于很多刚刚接触编程的小朋友可能还不知道什么是随机数、什么是负数?先说概念随机数是专门的随机试验的结果。 随机数最重要的特性是:它所生成的后面的那个数与前面的那个数毫无关系。通俗的讲…

CC1310射频芯片的433M无线模块设计

1、特点 CC1310是TI公司最新推出的高效型/超低功耗无线MCU中低于1GHz系列器件的重要器 件。极低的有源RF和MCU电流以及低功耗模式流耗可确保电池的使用寿命,允许在能源采集应用中使用小型纽扣电池。 CC1310器件在支持多个物理层和RF标准的平台中将灵活的超低功耗RF收…

电源模块的9个主要性能指标及其作用

一、电源模块的作用和优势 电源模块是电压转换设备之一,它的主要功能是将交流电和直流电相互转换,除此之外,它还具有维护方便,设计灵活,节省成本和时间,高功率,高效率和高可靠性的优点。 在某种…

飞畅科技教你如何选择合适的PoE交换机?

PoE交换机除了具备普通交换机的功能外,还具备有PoE供电功能,可以给网络摄像机(IPC)、无线AP等网络设备供电,从而让它们免去了繁杂的电源布线。选择合适的PoE交换机就需要注意以下要点: 1、供电标准 确定受…