DB2的日志模式
1.1循环日志
当循环日志生效时,事务数据将通过循环的方式写入主要日志文件。当存储于某个日志文件中的所有记录都不再需要用于恢复时,该日志文件将被重用,并且可以在以后再次成为活动日志文件。这意味着在循环日志模式中,日志文件的内容最终将被新日志条目重写。由于日志文件的内容被重写覆盖了,因此我们只能将数据库恢复到最后一次完整的数据库备份。不能使用循环日志执行时间点(point-in-time)恢复。
1.2 归档日志
在归档日志模式中,redo log条目将写入主要日志文件。但是,与循环日志不同,这些日志文件永远都不可重用。当存储于某个日志文件中的所有记录都不再需要用于恢复时,该日志文件将被标记为非活动而不是可重用。这意味着它的内容永远都不会被覆盖。当第一个主要日志文件变满时,系统将分配一个新的日志文件,这样主要日志文件的配置数量(LOGPRIMARY数据库参数)将一直可用。
与单个事务相关的所有条目必须在活动日志空间中保持一致。如果长时间运行的事务所需要的日志空间大于主要日志文件可以提供的空间,则可能会分配并使用次要日志文件。在归档日志模式中,通过结合使用数据库备份映像和日志文件,我们可以将数据库恢复到具体的时间点。有关此流程的详细描述请参见下文。
设置了归档模式后,数据库将支持前滚恢复。此时,系统中将会存在三种类型的日志文件:
活动日志:该日志包含尚未提交或回滚的事务单元的相关信息,以及已提交但尚未写入数据库文件的事务的信息。
联机存档日志:活动日志中所有改动对正常处理已不需要,即该日志中所记录的事务都已提交并写入数据库文件时,该活动日志转换为联机存档日志。称之为联机,是由于它们与活动日志存放在同一个目录下。
脱机存档日志:将联机存档日志从活动日志目录下Copy到另外的地方存档,就称为脱机存档日志。这些日志可能在数据库前滚恢复的时候仍然需要。
(所谓联机归档日志,就是归档日志文件和活动日志文件同在一个目录下;而离线归档日志,则是归档日志与活动日志分开存放)
日志模式修改:https://www.cnblogs.com/net2012/archive/2013/02/04/2891502.html
管理数据库日志的工作可以手工完成(即将联机存档日志手工拷贝到某个archive目录),也可由编写USEREXIT程序自动维护。 手工管理数据库LOG
既然 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"
注:根据您的恢复策略,在有些情况下前面的前滚操作可能会在数据库上执行。归档目录中旧的日志文件可能会被具有相同名称的新日志文件覆盖,从而会阻止您使用旧日志文件对数据库进行时间点恢复。用户出口程序的程序员需要考虑这种情况,这一点非常重要
程序工具自动管理(未验证)
由于DB2对所有平台都提供了相应的USEREXIT示例程序,而且非常易于修改和使用,所以IBM建议用户使用USEREXIT程序来管理日志文件。
使用USEREXIT程序的方法
要使用User exit program自动化log文件的archiving和retrieval过程:
1. 设置database cfg参数logarchmeth1 为USEREXIT
connect to sample
update db cfg using logarchmeth1 USEREXIT
connect reset
2. 创建user exit programs。该程序必须是一个名为db2uext2的可执行文件。DB2在各种平台上都提供了User Exit的示例程序,用户可以通过直接修改该样本文件来实现自己的user exit程序。
在UNIX(R) based的系统中,该程序存放在sqllib/samples/c目录下.
There are four sample user exit programs for UNIX based systems:
• db2uext2.ctsm
This sample uses Tivoli(R) Storage Manager to archive and retrieve database log files.
• db2uext2.ctape
This sample uses tape media to archive and retrieve database log files .
• db2uext2.cdisk
This sample uses the operating system COPY command and disk media to archive and retrieve database log files.
• db2uxt2.cxbsa
This sample works with the XBSA Draft 0.8 published by the X/Open group. It can be used to archive and retrieve database log files. This sample is only supported on AIX.
• 在Windows(R) 系统中,该文件存放在sqllib/samples/c目录下。
There are two sample user exit programs for Windows operating systems:
• db2uext2.ctsm
This sample uses Tivoli Storage Manager to archive and retrieve database log files.
• db2uext2.cdisk
This sample uses the operating system COPY command and disk media to archive and retrieve database log files.
3. 配置该示例程序,指定要将日志文件Archive到哪个系统目录中(在windows平台下,程序中默认为c:\mylogs)。
#define ARCHIVE_PATH "c:\\mylogs\\"
#define RETRIEVE_PATH "c:\\mylogs\\"
#define AUDIT_ERROR_PATH "c:\\mylogs\\"
4. 编译该C文件
cl db2uext2.c
5. 拷贝db2uext2.exe到/SQLLIB/BIN目录下
6. 在db2cmd中键入archive log for db sample user db2admin using duan1980命令强制执行log日志归档任务。查看c:\mylogs目录下有无日志文件归档,验证是否成功。
参考原文:
https://blog.csdn.net/woshilipengfei/article/details/83327416
https://blog.csdnnet/xiyuan1999/article/details/7898683