利用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=11.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参数。这种方法其实也不简单,不过需要对辅助实例进行定制的情况,可以考虑这种方法。

二、介绍TRANSPORT TABLESPACE命令碰到的RMAN-20202错误。
这个错误可能是比如容易碰到的一个错误:
bash-2.03$ rman target /
恢复管理器:
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: TESTRAC (DBID=4291216984)
RMAN> RUN
2> {
3> ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT ‘/data1/backup/%U’;
4> TRANSPORT TABLESPACE “TEST” DATAPUMP DIRECTORY D_OUTPUT
5> AUXILIARY DESTINATION ‘/data1/backup’
6> DUMP FILE ‘test_meta.dp’ EXPORT LOG ‘test_meta.log’ IMPORT SCRIPT. ‘test_imp.src’
7> TABLESPACE DESTINATION ‘/data1/oradata/test/test’;
8> }
使用目标数据库控制文件替代恢复目录
分配的通道: C1
通道C1: sid=285实例=testrac2 devtype=DISK
RMAN-05026:警告:假定以下表空间集适用于指定的时间点
表空间列表要求具有UNDO段
表空间SYSTEM
表空间UNDOTBS1
表空间UNDOTBS2
使用SID=’cmja’创建自动实例
供自动实例使用的初始化参数:
db_name=TESTRAC
compatible=11.2.0.1.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_TESTRAC_cmja
large_pool_size=1M
shared_pool_size=110M

No auxiliary parameter file used

db_create_file_dest=/data1/backup
control_files=/data1/backup/cntrl_tspitr_TESTRAC_cmja.f

启动自动实例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 02:00:13上)失败
RMAN-20202:在恢复目录中未找到表空间
RMAN-06019:无法转换表空间名称”TEST”
其实这个错误也很简单,就是RMAN在尝试执行表空间及时点恢复的时候,发现还原操作所需要的表空间在当前数据库备份中无法找到。
Oracle执行的这个表空间及时点恢复是一个数据库级的恢复,并非只需要目标表空间的备份。
除了目标表空间的备份以外,RMAN还需要SYSTEM、SYSAUX以及UNDO表空间的备份,如果任意一个表空间的备份不存在,则就会导致上面的错误。
所以在执行TRANSPORT TABLESPACE命令之前,应该首先检查上面的表空间备份是否存在,如果不存在的话,应该首先执行备份操作。
其实RMAN完全可以设置的更加只能一些,因为备份对于RMAN是在简单不过的事情,如果发现个别表空间的备份不存在,RMAN完全可以先对所需的表空间进行备份,等到所有的备份完成后,在设置恢复的SCN到当时的系统SCN,然后执行表空间及时点的恢复。
如果对于产品环境而言,数据库的备份肯定不成问题,对于测试环境没有备份的情况,可以考虑先备份整个数据库,然后在执行TRANSPORT TABLESPACE命令。

三、介绍TRANSPORT TABLESPACE命令碰到的RMAN-6034错误。
这个错误其实是由于对TRANSPORT TABLESPACE命令不了解造成的:
RMAN> run
2> {
3> allocate channel c1 device type disk format ‘/data1/backup/%U’;
4> transport tablespace yangtk auxiliary destination ‘/data1/backup’
5> datapump directory d_output dump file ‘yangtk_meta.dp’
6> export log ‘yangtk_meta.log’ import script. ‘yangtk_imp.src’
7> tablespace destination ‘/data1/backup’;
8> }
分配的通道: c1
通道c1: sid=146 devtype=DISK
RMAN-05026:警告:假定以下表空间集适用于指定的时间点
表空间列表要求具有UNDO段
表空间SYSTEM
表空间UNDOTBS1
使用SID=’hmAy’创建自动实例
供自动实例使用的初始化参数:
db_name=TEST
compatible=11.2.0.1.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_TEST_hmAy
large_pool_size=1M
shared_pool_size=110M

No auxiliary parameter file used

db_create_file_dest=/data1/backup
control_files=/data1/backup/cntrl_tspitr_TEST_hmAy.f

启动自动实例TEST
Oracle实例已启动
系统全局区域总计 205520896字节
Fixed Size 2028912字节
Variable Size 146803344字节
Database Buffers 50331648字节
Redo Buffers 6356992字节
自动实例已创建
内存脚本的内容:
{

set the until clause

set until scn 3558059;

restore the controlfile

restore clone controlfile;

mount the controlfile

sql clone ‘alter database mount clone database’;

archive current online log for tspitr to a resent until time

sql ‘alter system archive log current’;

avoid unnecessary autobackups for structural changes during TSPITR

sql ‘begin dbms_backup_restore.AutoBackupFlag(FALSE); end;’;
}
正在执行内存脚本
正在执行命令: SET until clause
启动restore

删除自动实例
关闭自动实例
Oracle实例已关闭
自动实例已删除
释放的通道: c1
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: tranport tablespace命令失败
RMAN-03015:在存储的脚本Memory Script中出现错误
RMAN-06034:执行此命令时必须至少分配一个通道
这个错误其实很简单,由于TRANSPORT TABLESPACE命令需要创建AUXILIARY实例,所以需要创建AUXILIARY CHANNEL。而上面采用了RUN的方式运行TRANSPORT TABLESPACE命令,虽然ALLOCATE了一个CHANNEL,但是并没有分配AUXILIARY CHANNEL,所以导致RMAN在运行过程中碰到了这个问题。
解决方法很简单,如果要使用RUN的方式,就手工分配一个AUXILIARY CHANNEL,或者直接使用命令的方式,RMAN会自动创建AUXILIARY CHANNEL。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值