DB2—从另一个服务器恢复



我的问题和这篇文章非常相似。

我尝试了许多组合,但都无济于事。在ServerA上,我使用以下命令创建了一个备份:

db2 backup db mydb user myuser using mypass online to
c:db-backuplocal include logs without prompting

然后将该文件复制到ServerB,并运行:

db2 => restore database mydb user myuser using mypass from C:
TAKEN AT 20151001060002 logtarget C:DB2NODE0000LOGS replace
existing without prompting

我不确定如何正确处理logtarget,该命令的结果是这个警告:

SQL2540W  Restore is successful, however a warning "2523" was
encountere during Database Restore while processing in No Interrupt
mode.

我仔细阅读了警告,它似乎适合我正在做的事情:

SQL2523W  Warning! Restoring to an existing database that is different
from the database on the backup image, but have matching names. (more)

然后我运行这个:

db2 => rollforward database mydb user myuser using mypass to end of
logs and stop

收到这个:

SQL1268N  Roll-forward recovery stopped due to error "1" while
retrieving log file "S0002796.LOG" for database "MYDB" on node "0".

我试过很多这样的组合:

db2 => restore database mydb user myuser using mypass from C: TAKEN
AT 20151001060002 WITHOUT ROLLING FORWARD

得到这个:

SQL2537N  Roll-forward is required following the Restore.

我现在卡住了。

这个问题是由于在现有数据库上恢复备份,DB2在尝试前滚数据库时混淆了两种不同的日志流。

restore命令中的logtarget子句指定从ServerA提取备份映像中包含的日志的位置。但是,这些日志不会自动用于前滚;该命令将尝试在活动日志目录中查找日志。但是,在ServerB上,活动日志目录包含一个属于您要替换的数据库的不同日志流,因此来自ServerA, S0002796.LOG的第一个日志序列不在那里。

对前滚命令使用overflow log path选项来指示应该在其中查找日志文件的替代位置;它将是您在恢复期间提取日志的目录:

rollforward database mydb user myuser using mypass to end of logs 
  overflow log path (C:DB2NODE0000LOGS)

然而,这还不是全部。现在rollforward找到了S0002796.LOG,并且由于您已经指定了to end of logs,它将尝试在来自ServerA的流中查找后续日志。显然,只有S0002796.LOG包含在备份映像中,因此S0002797.LOG必须在其他地方,即在活动或存档日志路径中——只是它不在那里,因为在ServerB上维护了不同的日志流。

要防止rollforward查找overflow log path中不存在的日志文件,请添加选项noretrieve。最后一个命令是:

rollforward database mydb user myuser using mypass to end of logs 
  overflow log path (C:DB2NODE0000LOGS) 
  noretrieve

最新更新