DB2-从另一台服务器恢复

时间:2015-10-02 00:04:09

标签: db2 database-restore db2-luw

我的问题与this post非常相似。

我尝试过多种组合无济于事。在ServerA上,我使用以下命令创建了备份:

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

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

db2 => restore database mydb user myuser using mypass from C:\
TAKEN AT 20151001060002 logtarget C:\DB2\NODE0000\LOGS 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.

我现在卡住了。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题在于,由于您正在通过现有数据库恢复备份,因此在尝试前滚数据库时,DB2会在两个不同的日志流之间混淆。

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

您使用rollforward命令的overflow log path选项指示应查找日志文件的备用位置;它将是您在还原期间提取日志的目录:

rollforward database mydb user myuser using mypass to end of logs 
  overflow log path (C:\DB2\NODE0000\LOGS)

但是,并非全部。现在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:\DB2\NODE0000\LOGS) 
  noretrieve