技术开发 频道

基于TSM的DB2备份和跨节点恢复

  四、数据库的备份

  本节介绍使用TSM进行DB2的离线备份、在线备份、在线增量备份。

  安装了TSM API并且正确配置之后,就可以进行离线备份了,本例在恢复演练DB2服务器上离线备份db2inst1中的ZSHWL数据库。

  注意:由于离线备份需要断开应用的数据库连接,所以在生产环境除非申请停机时间否则不要尝试,本例是在恢复演练DB2服务器上做的。

  以实例用户登录,要进行数据库的离线备份,需要确认没有应用或者用户连接到这个数据库。使用DB2 LIST APPLICATIONS命令来查看是不是有应用连接到数据库:

[db2inst1@db2tsmdrill ~]$ db2 list applications for db ZSHWL
Auth Id  Application   Appl.      Application Id                            DB       # of
           Name          Handle                                               Name    Agents
-------- -------------- ---------- ---------------------------------------- -------- -----
DB2INST1 db2bp          17         *LOCAL.db2inst1.150616022445             ZSHWL    1

  要进行离线备份,需要把所有连接到数据库的应用都断开。可以到应用一侧去登出数据库,也可以在数据库一侧使用db2 force application all命令,但是需要注意这个命令会把连接到当前实例下的所有数据库的所有应用都断开,一般可以使用指定Handle号的方式来断开特定数据库的连接,多个Handle号之间可以用逗号分开。本例中我们要断开Handle为17的连接:

[db2inst1@db2tsmdrill ~]$ db2 "force application (17)"
DB20000I  The FORCE APPLICATION command completed successfully.
DB21024I  This command is asynchronous and may not be effective immediately.

  再确认一下数据库的连接,现在已经没有应用连接在ZSHWL数据库上了:

[db2inst1@db2tsmdrill ~]$ db2 list applications for db ZSHWL
SQL1611W  No data was returned by Database System Monitor.

  这时,使用带有USE TSM选项的BACKUP DB命令就可以备份这个数据库了:

[db2inst1@db2tsmdrill ~]$ db2 backup db ZSHWL use tsm
Backup successful. The timestamp for this backup image is : 20150616104649

  数据库在线备份不需要断开应用连接,所以一般情况下是都是采用在线备份的方法。

  显然,在数据库仍旧被连接使用的时候进行备份会引起一致性问题,因为,当数据库被备份的同时,数据也在被更新。DB2采用在恢复数据库的时候应用事务日志前滚操作来解决因为在线备份而导致的数据一致性问题,显然,要实现这个方法,就需要收集备份开始到备份结束之间的事务日志。在线备份结束的时候,当前的事务日志会被归档并且包含在备份映像内。在线备份会自动收集恢复数据库时需要用到的事务日志。

  下面仍旧以恢复演练DB2服务器上db2inst1实例内的ZSHWL数据库为例,来进行在线备份。登录数据库实例用户,使用带有ONLINE和USE TSM选项的BACKUP DB命令:

[db2inst1@db2tsmdrill ~]$ db2 backup db ZSHWL online use tsm
SQL2413N  Online backup is not allowed because the database is not recoverable
or a backup pending condition is in effect.

  此时,我们得到一个SQL2413N错误,原因就是DB2的事务日志在默认情况下是循环日志模式,这种模式下无法进行日志归档,因此就不能收集到备份期间的事务日志以用于恢复,所以就不能进行在线备份。可以通过GET DB CFG来查看到数据库的日志归档模式:

[db2inst1@db2tsmdrill ~]$ db2 get db cfg for ZSHWL | grep LOGARCHMETH1
 First log archive method                 (LOGARCHMETH1) = OFF

  LOGARCHMETH1 配置为OFF意味着当前数据库使用的是默认的循环日志模式,可以为LOGARCHMETH1指定DISK参数来将事务日志归档到本地路径,或者指定TSM参数来将事务日志归档到TSM中,不论归档到本地路径还是TSM,都可以进行在线备份。

  本例中将事务日志归档到TSM中:

[db2inst1@db2tsmdrill ~]$ db2 update db cfg for ZSHWL using LOGARCHMETH1 tsm
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.

  注意:修改数据库的LOGARCHMETH1参数之后需要重启数据库才能生效。

  修改LOGARCHMETH1并且重启之后,数据库会处于BACKUP PEND-ING状态而不能连接,需要进行一次离线备份才能解除这个状态:

[db2inst1@db2tsmdrill ~]$ db2 connect to zshwl
SQL1116N  A connection to or activation of database "ZSHWL" cannot be made
because of BACKUP PENDING.  SQLSTATE=57019

  执行一次离线备份后,即可正常连接使用此数据库了:

[db2inst1@db2tsmdrill ~]$ db2 backup db ZSHWL use TSM
Backup successful. The timestamp for this backup image is : 20150616131903
[db2inst1@db2tsmdrill ~]$ db2 connect to zshwl
   Database Connection Information
 Database server        = DB2/LINUXX8664 9.7.9
 SQL authorization ID   = DB2INST1
 Local database alias   = ZSHWL

  现在我们再来尝试使用带有ONLINE和USE TSM选项的BACKUP DB命令来进行在线备份:

[db2inst1@db2tsmdrill ~]$ db2 backup db ZSHWL online use tsm
Backup successful. The timestamp for this backup image is : 20150616132313

  可以看到在线备份成功了。

  在做在线备份时,可以使用incremental选项来实施增量备份,为了能够实现增量备份,需要将数据库的TRACKMOD配置为yes,不然会得到以下错误:

[db2inst1@db2tsmdrill ~]$ db2 backup db ZSHWL online incremental use tsm
SQL2426N  The database has not been configured to allow the incremental backup
operation. Reason code = "1".

  检查TRACKMOD的配置:

[db2inst1@db2tsmdrill ~]$ db2 get db cfg for ZSHWL | grep TRACKMOD
 Track modified pages                         (TRACKMOD) = NO

  我们看到TRACKMOD的配置是NO,需要修改TRACKMOD的配置:

[db2inst1@db2tsmdrill ~]$ db2 update db cfg for ZSHWL using TRACKMOD YES
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.

  注意:修改数据库的TRACKMOD配置后需要重启数据库才能生效。

  在重启数据库之后,首先要进行一次在线全量备份,然后即可正常对此数据库进行在线增量备份了:

[db2inst1@db2tsmdrill ~]$ db2 restart db ZSHWL
DB20000I  The RESTART DATABASE command completed successfully.
[db2inst1@db2tsmdrill ~]$ db2 backup db ZSHWL online use tsm
Backup successful. The timestamp for this backup image is : 20150616134107
[db2inst1@db2tsmdrill ~]$ db2 backup db ZSHWL online incremental use tsm
Backup successful. The timestamp for this backup image is : 20150616134147

3
相关文章