【问题标题】:DB2- restore from another serverDB2 - 从另一台服务器恢复
【发布时间】:2015-10-02 00:04:09
【问题描述】:

我的问题和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.

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

【问题讨论】:

  • 试试rollforward database mydb user myuser using mypass to end of logs overflow log path (C:\DB2\NODE0000\LOGS)(希望这不是活动日志目录)。
  • 感谢您的建议,不幸的是我再次收到此错误SQL1268N Roll-forward recovery stopped due to error "1" while retrieving log file "S0002797.LOG" for database "MYDB" on node "0". 我提供的日志路径只是一个空目录,它需要是特定位置吗?
  • 然后添加noretrieve选项。为什么是“C:\DB2\NODE0000\LOGS”?
  • 成功了,非常感谢。我运行了这个命令db2 rollforward database mydb user myuser using mypass to end of logs and stop overflow log path (C:\DB2\NODE0000\LOGS) noretrieve。如果您想在这篇文章中添加答案,我可以接受。再次感谢您的帮助。

标签: db2 database-restore db2-luw


【解决方案1】:

问题源于这样一个事实,因为您是在现有数据库上恢复备份,当尝试前滚数据库时,DB2 会混淆两个不同的日志流。

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

您使用前滚命令的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2020-06-18
    • 2011-02-06
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多