DB2 ® Vendor Enablement, PartnerWorld ® for Developers, IBM Developer Technical Support (DTS) Center - 达拉斯
2003 年 6 月
本文说明了如何使用用户出口程序来管理 DB2 通用数据库数据库日志文件的归档和检索。
简介
DB2 Universal Database™ 使用日志文件作为确保数据一致性和可恢复性的主要方法。在前一篇文章 DB2 通用数据库中事务性日志记录概述中,我介绍了事务性日志记录的概念并说明了如何管理日志。在本文中,我将带您做进一步的探讨,并说明 DB2 UDB 可以如何使用用户出口程序来归档和检索数据库日志文件。另外,我还将提供循序渐进的示例来说明如何修改、编译和测试 db2uext2.cdisk 样本用户出口程序,该程序随已安装的 DB2 UDB 服务器产品附带。您将在本文末尾找到关于用 DB2 UDB 进行用户出口编程的其它参考资料 链接。
本文讨论了 Windows 2000 和 AIX 5L 上的 DB2 V8.1 企业服务器版修订包 1(单分区版)服务器。虽然也有其它样本用户出口程序(例如至磁带的用户出口或 Tivoli 存储管理器(Tivoli Storage Manager)),但我没在本文讨论它们。
用户出口在 DB2 UDB 中如何工作?
在 DB2 UDB 中使用用户出口程序是为了提供一种归档和检索数据库日志文件的方法以便进行日志冗余处理以及将日志存储在非易失性的介质上。我们要知道的重要一点是:根据您的特定需求,可以在用户出口中实现包括归档和检索日志在内的其它操作。
如果需要使用归档日志文件来恢复数据库,则在 DB2 UDB 中实行用户出口策略不会恢复 100% 的事务。用户出口程序只是一种通过将现有日志文件复制到安全位置来提供更多保护的方法。它是数据完整性策略的一部分,但却是重要部分。
编译了用户出口程序之后,db2uext2 可执行文件将被放在数据库管理器可以发现它的目录中。在 UNIX® 上,该目录是 <instance home>/sqllib/adm ,在 Windows® 上,该目录是 <drive letter>\Program Files\IBM\SQLLIB\BIN 。
除非数据库管理器知道可以使用用户出口程序,否则它不会调用 db2uext2。数据库管理器知道可以调用 db2uext2 的唯一方法是将数据库配置参数 userexit 设置成 on。一旦设置了该参数并且重复利用了 DB2 实例,数据库管理器就会每五分钟调用一次用户出口程序以检查某些日志文件,这些日志文件可以被归档到特定于程序的归档目录。
如果需要进行数据库恢复,则数据库管理器将在前滚操作期间调用 db2uext2,以将归档的日志文件复制回活动日志目录中。日志文件就会被重新应用到已恢复的数据库。
让我们看一看数据库管理器调用用户出口程序的调用格式。请注意,也可以在用户出口样本程序的注释部分找到该信息:
db2uext2 -OS<os> -RL<release> -RQ<request> -DB<dbname> -NN<nodenumber> -LP<logpath> -LN<logname> [-AP<adsmpasswd>]
其中:
os = 操作系统
release = DB2 发行版
request = “ARCHIVE”或“RETRIEVE”
dbname = 数据库名称
nodenumber = 节点号
logpath = 日志文件路径
logname = 日志文件名
logsize = 日志文件大小(可选)
startingpage = 以 4K 页大小为单位的起始偏移(可选)
adsmpasswd = ADSM 密码(可选)
注:只有在 logpath 是裸设备时才使用 logsize 和 startingpage。
用以下命名约定来归档和从磁盘检索日志文件:
归档:归档路径+数据库名+节点号+日志文件名
检索:检索路径+数据库名+节点号+日志文件名
例如:如果归档路径是“c:\mylogs”,
检索路径是“c:\mylogs”,
数据库名是“SAMPLE”,
节点号是 NODE0000,
文件名是 S0000001.LOG,
日志文件将是:
归档到 - c:\mylogs\SAMPLE\NODE0000\S0000001.LOG
检索自 - c:\mylogs\SAMPLE\NODE0000\S0000001.LOG
下面展示了用户出口中逻辑是如何流动的:
1) 安装信号处理程序。
2) 验证传递的参数数目。
3) 验证请求的操作。
4) 启动审计跟踪(如果请求的话)。
5) 根据所请求的操作采取以下路径之一:
a) 如果请求的操作是归档文件,则将该日志文件从日志路径复制到归档路径。
i) 如果没找到日志文件,则到第 6 步。
b) 如果请求的操作是检索文件,则将该日志文件从检索路径复制到日志路径。
i) 如果没找到日志文件,则到第 6 步。
6) 将错误记入日志(如果请求和需要的话)。
7) 终止审计跟踪(如果请求的话)。
8) 退出并给出适当的返回码。
可以手工调用用户出口程序以归档日志文件,但最好使用 ARCHIVE LOG 命令以便在指定以上参数时不会因为您的原因而出错。可以在本文的末尾找到 ARCHIVE LOG 命令的 链接。
日志文件术语
DB2 中用户出口程序的基本功能是将日志文件复制到活动日志目录或从中复制。需要在这里指出一些术语以澄清活动日志目录的位置以及数据库日志文件的状态。
活动日志目录:
该目录位于您的数据库目录中。在 Windows 上,如果在 C:\ 创建了名为 SAMPLE 的单一数据库,并且实例名称是 db2inst1,则将存在以下目录结构:
C:\DB2INST1\NODE0000\SQL000001\SQLOGDIR
SQL00001 是 SAMPLE 数据库的数据库目录,SQLOGDIR 是活动日志目录。
下面的图 1 显示了 Windows 操作系统上的活动日志目录:
图 1. 活动日志目录日志文件状态
在活动日志目录中,日志文件可以是 活动日志,也可以是 联机归档日志。活动日志是 DB2 为进行当前事务处理和崩溃恢复而需要的那些日志。联机归档日志是 DB2 UDB 进行常规处理时不再需要的日志,但进行数据库恢复时可能还会需要它。当实现用户出口程序时,这些联机归档日志应该最终作为归档日志目录中的副本出现。
既然 DB2 UDB 中用户出口程序的目的是将数据库日志复制到归档目录中,您最终将在活动日志目录(缺省是 SQLOGDIR)中得到重复的日志文件。您可能考虑除去这些重复的联机归档日志以释放文件系统空间。在从数据库目录中除去这些日志之前,要十分细心地验证是否已经将它们成功地复制到归档目录中。还必须确保数据库管理器进行崩溃恢复时不再需要它们。要确定活动日志目录中哪些日志文件不为正常处理所需,可用以下命令检查数据库配置:
db2 "get db cfg for sample"
该命令的数据库配置输出将包括第一个活动日志文件,例如:
First active log file = S000009.LOG
上面输出中所示的日志文件 S000009.LOG 是数据库的当前活动日志。任何小于该编号的日志文件都被认为是联机归档日志。
下面是一个示例:
在下面的方案中,活动日志目录中有日志文件 S000000.LOG - S000009.LOG ,归档日志目录中有 S000000.LOG - S000008.LOG 。因为 S000009.LOG 是第一个活动日志文件,所以,可以从活动日志目录中删除 S000001.LOG - S000008.LOG 以释放磁盘空间。必须将 S000009.LOG 文件留在活动日志目录中,因为当前事务仍然在使用它。
也可以检查数据库历史文件,以查看活动日志目录中不再需要哪些日志文件。以下命令将列出数据库备份信息:
db2 "list history backup all for database sample"
下面是该命令的输出示例:
List History File for samp
上一篇教程: 开发JSF应用程序: 第 3 部分
下一篇教程: 在 Linux 上模拟大规模并行数据库处理!






