DB2的日志分为两种模式,日志循环与归档日志,也就是非归档和归档模式。下面就具体介绍一下这两种方式以及和备份归档设置的关系。 一、日志循环 这是默认方式,也就是非归档模式,这种模式只支持(backup offline)脱机备份,在备份过程中需要DB2停止服务。 在DB2中查看数据库设置,如发现如下信息 $db2 get db cfg for db_name |grep -i log 结果如下: Log retain for recovery enabled ( LOGRETAIN) = OFF User exit for logging enabled (USEREXIT) = OFF HADR log write synchronization mode (HADR_SYNCMODE) = NEARSYNC First log archive method (LOGARCHMETH1) = OFF 则说明为非归档模式, 默认情况下为循环日志 在这种模式下进行脱机备份需要注意: 1、停止应用对DB2的访问。可以通过db2 list applications命令查看现有的连接,然后通过db2 force application命令来结束连接。另外通过db2 deactivate database命令来确保数据库未处于活动状态。 2、通过db2 backup db 数据库名 命令来对数据库进行备份。 二、归档日志 归档日志不是默认的,需要配置后才会生效,这种模式下的数据库是可恢复的数据库,支持在线备份、前滚恢复和崩溃恢复。 配置DB2归档日志模式主要是要修改Log retain for recovery enabled和First log archive method这两个参数。 修改参数(update更新参数)后,查看数据库是如下设置 $db2 get db cfg for db_name |grep -i log Log retain for recovery enabled (LOGRETAIN) = RECOVERY User exit for logging enabled (USEREXIT) = OFF HADR log write synchronization mode (HADR_SYNCMODE) = NEARSYNC First log archive method (LOGARCHMETH1) = LOGRETAIN 注意这里First log archive method的参数LOGRETAIN只表明你开启了归档,还需进一步设置才能正常备份 下面需要进一步指定归档目录的路径 更改归档目录: $db2 update db cfg for db_name using LOGARCHMETH1 "disk:/archive/db_name_db_log" 使用归档日志,当日志文件满时,会自动对它进行归档,归档的目的地就是Logarchmeth1设置的位置。归档日志文件之后,必须人工将无用的归档日志删除,以便新的日志文件可以复用磁盘空间。每当日志文件已满,DB2 就开始将记录写至另一个日志文件,并且不断创建新日志文件。 如果在归档日志文件时发生错误,归档将暂挂一段时间,此时间由“Log archive retry Delay (secs)” ARCHRETRYDELAY数据库配置参数指定,还可以使用“ Number of log archive retries on error ”NUMARCHRETRY 数据库配置参数来指定 DB2 尝试将日志文件归档到主要或辅助归档目录的次数,然后它再尝试将日志文件归档到故障转移目录(由“ Failover log archive path” FAILARCHPATH 数据库配置参数指定)。 还有就是容易遇见数据库事务日志已满导致备份出错的问题,这是可以查看这三个参数 Log file size (4KB) (LOGFILSIZ) = 8192 Number of primary log files (LOGPRIMARY) = 10 Number of secondary log files (LOGSECOND) = 4 并适当调整日志文件大小和主辅日志的文件个数。 最后就是要注意这两个参数的设置 Options for logarchmeth1 (LOGARCHOPT1) = Second log archive method (LOGARCHMETH2) = 有以下几种情况: 1、Logarchmeth1设置为LOGRETAIN,Logarchmeth2设置为OFF 这时归档日志位置就是DB2数据库日志的位置,需要人工干预归档日志的转移和空间维护工作 2、Logarchmeth1设置为USEREXIT,Logarchmeth2设置为OFF 这时归档日志的管理交由USEREXIT来处理,通过设置编译USEREXIT可以实现相对复杂一些的归档管理方式 3、Logarchmeth1设置为指定目录<Directory>,Logarchmeth2设置为OFF 归档日志的工作将会自动进行,需要归档日志将会被自动归档到<Directory>指定的位置,由于归档是自动进行,DB2的日志目录中只有正常logprimary+logsecond个数的数据库日志。 4、Logarchmeth1设置为<Directory1>,Logarchmeth2设置为<Directory2> 归档日志的工作将会自动进行,需要归档日志将会被自动归档到<Directory1>和<Directory2>指定的位置,也就是会产生两份归档日志。由于归档是自动进行,DB2的日志目录中只有正常logprimary+logsecond个数的数据库日志。对性能有一定的影响。 <Directory1>或者<Directory2>都可以设置为TSM。一般推荐<Directory1>为文件系统,<Directory2>设置为TSM,这样既可以归档到TSM离线保存,又可以在线使用文件系统中的归档日志,比较方便。 注意:设置Logarchmeth1和Logarchmeth2后,数据库会进入backup pending状态,必须进行一次脱机备份,数据才会进入recovery模式并且正常工作。 三、备份与恢复 1、简单的冷备与恢复 $ db2 backup db [dbname] to 路径 $ db2 restore db [dbname] from 路径 taken at 时间戳 2、在线热备与恢复 $ db2 backup db dbname online to 路径 include logs $ db2 restore db dbname from 路径 taken at 时间戳 $ db2 "rollforward db dbname to 2013-02-31-20.00.00.000000 using local time and complete overflow log path (/backup/logs)" 前滚日志恢复至指定时间点 3、查看备份记录 $ db2 list history backup all for dbname 可以看到备份的纪录