尝试10.2的新特性RMAN的TRANSPORT TABLESPACE进行表空间的迁移过程,其中碰到了不少问题,简单总结一下。
这一篇介绍TRANSPORT TABLESPACE命令碰到的RMAN-5001错误。
在执行TRANSPORT TABLESPACE命令时,出现了这个错误:
RMAN> RUN
2> {
3> ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT '/data1/backup/%U';
4> TRANSPORT TABLESPACE "TEST" DATAPUMP DIRECTORY D_OUTPUT
5> DUMP FILE 'test_meta.dp' EXPORT LOG 'test_meta.log' IMPORT SCRIPT. 'test_import.src'
6> TABLESPACE DESTINATION '/data1/backup';
7> }
分配的通道: C1
通道 C1: sid=289 实例=testrac2 devtype=DISK
RMAN-05026: 警告: 假定以下表空间集适用于指定的时间点
表空间列表要求具有 UNDO 段
表空间 SYSTEM
表空间 UNDOTBS1
表空间 UNDOTBS2
使用 SID='mxak' 创建自动实例
供自动实例使用的初始化参数:
db_name=TESTRAC
compatible=10.2.0.1.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_TESTRAC_mxak
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
#No auxiliary destination in use
#Use default controlfile
启动自动实例 TESTRAC
Oracle 实例已启动
系统全局区域总计 205520896 字节
Fixed Size 2028912 字节
Variable Size 146803344 字节
Database Buffers 50331648 字节
Redo Buffers 6356992 字节
自动实例已创建
删除自动实例
关闭自动实例
Oracle 实例已关闭
自动实例已删除
释放的通道: C1
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: tranport tablespace 命令 (在 01/09/2009 01:01:27 上) 失败
RMAN-20202: 在恢复目录中未找到表空间
RMAN-06019: 无法转换表空间名称"TEST"
RMAN-05517: 临时文件 +DISK/testrac/tempfile/temp.265.618591239 与目标数据库所使用的文件冲突
RMAN-05001: 辅助文件名 +DISK/testrac/datafile/sysaux.264.618591225 与正由目标数据库使用的文件发生冲突
RMAN-05001: 辅助文件名 +DISK/testrac/datafile/undotbs2.266.618591249 与正由目标数据库使用的文件发生冲突
RMAN-05001: 辅助文件名 +DISK/testrac/datafile/undotbs1.263.618591197 与正由目标数据库使用的文件发生冲突
RMAN-05001: 辅助文件名 +DISK/testrac/datafile/system.262.618591167 与正由目标数据库使用的文件发生冲突
RMAN> exit
恢复管理器完成。
其实造成这个错误的原因很简单,就是没有设置AUXILIARY DESTINATION。
由于Oracle会创建一个辅助实例,并在这个实例上进行数据库的及时点恢复过程,因此恢复过程会还原数据库所有数据文件,然后利用归档将数据库恢复到某个时间点。
如果没有设置AUXILIARY DESTINATION参数,且不通过其他手段设置辅助实例数据文件的保存位置的话,那么辅助实例选择的数据文件位置和源数据库一致,这也就造成了上面的错误。
最简单的解决方法,就是设置AUXILIARY DESTINATION,设置了这个参数后,除了迁移表空间对应的数据文件外(这些文件的保存位置由TABLESPACE DESTINATION参数确定),其他的数据文件、控制文件,以及参数文件都保存在AUXILIARY DESTINATION设置的目录中。
除了设置AUXILIARY DESTINATION这个方法外,还可以利用SET NEWNAME来设置每个数据文件的位置,不过这种方法相对要麻烦一些,需要具体设置每一个需要处理的数据文件。还有一种类似的方法,通过CONFIGURE AUXNAME FOR依次设置每个数据文件的新位置。这两种方法都比较麻烦,需要设置每个文件,比较容易出问题,不过好处是可以定制每个文件的位置,对于不希望将所有文件保存在一个目录下的情况,可以使用这两种方法。
除此之外,还有一种方法,就是通过设置辅助实例启动所需的初始化参数:SET AUXILIARY INSTANCE PARAMETER FILE。可以手工编辑一个初始化参数,并设置合适的LOG_FILE_NAME_CONVERT和DB_FILE_NAME_CONVERT参数。这种方法其实也不简单,不过需要对辅助实例进行定制的情况,可以考虑这种方法。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-567103/ ,如需转载,请注明出处,否则将追究法律责任。