DB2-从另一台服务器恢复
DB2- restore from another server
我的问题与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.
我现在卡住了。任何帮助将不胜感激。
问题是由于您是在现有数据库上恢复备份,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:\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
我的问题与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.
我现在卡住了。任何帮助将不胜感激。
问题是由于您是在现有数据库上恢复备份,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:\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