DB2数据库的日志文件说明
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 sample
Number of matching file entries = 4
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
-- --- ------------------ ---- --- ------------ ------------
B D 20030416162026001 F D S0000010.LOG S0000014.LOG
------------------------------------------------------------
Contains 2 tablespace(s):
00001 SYSCATSPACE
00002 USERSPACE1
------------------------------------------------------------
在上面的输出中,最早的日志将表明:需要 S0000010.LOG及其之后的任何日志。可以安全地删除
S00000010.LOG之前的任何日志。再次提醒,在从活动日志目录中删除日志文件之前,验证在活动日志目录中存在这些日志文件的副本是非常重要的。
尽管可以从活动日志目录手工删除日志文件,但是除去联机归档日志文件的更安全方法是通过 prune
logfile命令。可以使用该命令来删除活动日志目录中的日志文件。在下面的示例中,以下命令将删除日志文件
S000000.LOG - S000008.LOG:
db2 "prune logfile prior to S000009.LOG"
注:根据您的恢复策略,在有些情况下前面的前滚操作可能会在数据库上执行。归档目录中旧的日志文件可能会被具有相同名称的新日志文件覆盖,从而会阻止您使用旧日志文件对数据库进行时间点恢复。用户出口程序的程序员需要考虑这种情况,这一点非常重要