DB2数据库的日志文件管理

DB2数据库的日志文件管理html

DB2的日志模式程序员

 

1.1循环日志sql

  当循环日志生效时,事务数据将经过循环的方式写入主要日志文件。当存储于某个日志文件中的全部记录都再也不须要用于恢复时,该日志文件将被重用,而且能够在之后再次成为活动日志文件。这意味着在循环日志模式中,日志文件的内容最终将被新日志条目重写。因为日志文件的内容被重写覆盖了,所以咱们只能将数据库恢复到最后一次完整的数据库备份。不能使用循环日志执行时间点(point-in-time)恢复。数据库

1.2 归档日志windows

  在归档日志模式中,redo log条目将写入主要日志文件。可是,与循环日志不一样,这些日志文件永远都不可重用。当存储于某个日志文件中的全部记录都再也不须要用于恢复时,该日志文件将被标记为非活动而不是可重用。这意味着它的内容永远都不会被覆盖。当第一个主要日志文件变满时,系统将分配一个新的日志文件,这样主要日志文件的配置数量(LOGPRIMARY数据库参数)将一直可用。安全

  与单个事务相关的全部条目必须在活动日志空间中保持一致。若是长时间运行的事务所须要的日志空间大于主要日志文件能够提供的空间,则可能会分配并使用次要日志文件。在归档日志模式中,经过结合使用数据库备份映像和日志文件,咱们能够将数据库恢复到具体的时间点。有关此流程的详细描述请参见下文。工具

  设置了归档模式后,数据库将支持前滚恢复。此时,系统中将会存在三种类型的日志文件:spa

  活动日志:该日志包含还没有提交或回滚的事务单元的相关信息,以及已提交但还没有写入数据库文件的事务的信息。.net

  联机存档日志:活动日志中全部改动对正常处理已不须要,即该日志中所记录的事务都已提交并写入数据库文件时,该活动日志转换为联机存档日志。称之为联机,是因为它们与活动日志存放在同一个目录下。日志

  脱机存档日志:将联机存档日志从活动日志目录下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.csdn.net/xiyuan1999/article/details/7898683
相关文章
相关标签/搜索