ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 利用RMAN迁移表空间碰到的问题(四)

利用RMAN迁移表空间碰到的问题(四)

原创 Linux操作系统 作者:yangtingkun 时间:2009-03-15 23:20:21 0 删除 编辑

尝试10.2的新特性RMANTRANSPORT TABLESPACE进行表空间的迁移过程,其中碰到了不少问题,简单总结一下。

这一篇介绍TRANSPORT TABLESPACE命令碰到的RMAN-06513错误,对应的Oracle命令行错误为ORA-39070错误。

利用RMAN迁移表空间碰到的问题(一):http://yangtingkun.itpub.net/post/468/480070

利用RMAN迁移表空间碰到的问题(二):http://yangtingkun.itpub.net/post/468/480171

利用RMAN迁移表空间碰到的问题(三):http://yangtingkun.itpub.net/post/468/480222

 

 

这个错误其实比较有意思:

RMAN> transport tablespace yangtk auxiliary destination '/data1/backup'
2> datapump directory d_output dump file 'yangtk_meta.dp'
3> export log 'yangtk_meta.log' import script. 'yangtk_imp.src'
4> tablespace destination '/data1/backup';

RMAN-05026: 警告: 假定以下表空间集适用于指定的时间点

表空间列表要求具有 UNDO
表空间 SYSTEM
表空间 UNDOTBS1

使用 SID='mBeh' 创建自动实例

供自动实例使用的初始化参数:
db_name=TEST
compatible=10.2.0.3.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_TEST_mBeh
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_mBeh.f


启动自动实例 TEST

Oracle 实例已启动

系统全局区域总计     205520896 字节

Fixed Size                     2028912 字节
Variable Size                146803344
字节
Database Buffers              50331648
字节
Redo Buffers                   6356992
字节
自动实例已创建

内存脚本的内容:
{
# set the until clause
set until  scn 3564357;
# 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 09-1 -09
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=34 devtype=DISK

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在复原控制文件
通道 ORA_AUX_DISK_1: 正在读取备份段 /data1/backup/test/c-1920405094-20090109-00
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = /data1/backup/test/c-1920405094-20090109-00 标记 = TAG20090109T021104
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:02
输出文件名=/data1/backup/cntrl_tspitr_TEST_mBeh.f
完成 restore 09-1 -09

sql 语句: alter database mount clone database

sql 语句: alter system archive log current

sql 语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;
释放的通道: ORA_AUX_DISK_1

内存脚本的内容:
{
# generated tablespace point-in-time recovery script
# set the until clause
set until  scn 3564357;
# set an omf destination filename for restore
set newname for clone datafile  1 to new;
# set an omf destination filename for restore
set newname for clone datafile  2 to new;
# set an omf destination filename for restore
set newname for clone datafile  3 to new;
# set an omf destination tempfile
set newname for clone tempfile  1 to new;
# set a destination filename for restore
set newname for datafile  5 to
 "/data1/backup/yangtk01.dbf";
# rename all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set plus the auxilliary tablespaces
restore clone datafile  1, 2, 3, 5;
switch clone datafile all;
#online the datafiles restored or flipped
sql clone "alter database datafile  1 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  2 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  3 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  5 online";
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace  "YANGTK", "SYSTEM", "UNDOTBS1", "SYSAUX" delete archivelog;
alter clone database open resetlogs;
# PLUG HERE the creation of a temporary tablespace if export fails due to lack
# of temporary space.
# For example in Unix these two lines would do that:
#sql clone "create tablespace aux_tspitr_tmp
#           datafile ''/tmp/aux_tspitr_tmp.dbf'' size 500K";
}
正在执行内存脚本

正在执行命令: SET until clause

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

临时文件 1 在控制文件中已重命名为 /data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_temp_%u_.tmp

启动 restore 09-1 -09
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=36 devtype=DISK

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_system_%u_.dbf
正将数据文件00002恢复到/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_undotbs1_%u_.dbf
正将数据文件00003恢复到/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_sysaux_%u_.dbf
正将数据文件00005恢复到/data1/backup/yangtk01.dbf
通道 ORA_AUX_DISK_1: 正在读取备份段 /data1/backup/1rk4bc4v_1_1
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = /data1/backup/1rk4bc4v_1_1 标记 = TAG20090109T021038
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:46
完成 restore 09-1 -09

数据文件 1 已转换成数据文件副本
输入数据文件副本 recid=5 stamp=675656832 文件名=/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_system_4pdkbmls_.dbf
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=6 stamp=675656832 文件名=/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_undotbs1_4pdkbmno_.dbf
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=7 stamp=675656832 文件名=/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_sysaux_4pdkbmn5_.dbf
数据文件 5 已转换成数据文件副本
输入数据文件副本 recid=8 stamp=675656832 文件名=/data1/backup/yangtk01.dbf

sql 语句: alter database datafile  1 online

sql 语句: alter database datafile  2 online

sql 语句: alter database datafile  3 online

sql 语句: alter database datafile  5 online

启动 recover 09-1 -09
使用通道 ORA_AUX_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 112 已作为文件 /data1/oradata/test/archivelog/1_112_622258662.dbf 存在于磁盘上
存档日志文件名 =/data1/oradata/test/archivelog/1_112_622258662.dbf 线程 =1 序列 =112
介质恢复完成, 用时: 00:00:01
完成 recover 09-1 -09

数据库已打开

内存脚本的内容:
{
#mark read only the tablespace that will be exported
sql clone "alter tablespace YANGTK read only";
# export the tablespaces in the recovery set
host 'expdp userid=\"/@\(DESCRIPTION=\(ADDRESS=\(PROTOCOL=beq\)\(PROGRAM=/data/oracle/product/10.2/database/bin/oracle\)\(ARGV0=oraclemBeh\)\(ARGS=^'\(DESCRIPTION=\(LOCAL=YES\)\(ADDRESS=\(PROTOCOL=beq\)\)\)^'\)\(ENVS=^'ORACLE_SID=mBeh^'\)\)\(CONNECT_DATA=\(SID=mBeh\)\)\) as sysdba\" transport_tablespaces=
 YANGTK dumpfile=
yangtk_meta.dp directory=
d_output logfile=
yangtk_meta.log';
}
正在执行内存脚本

sql 语句: alter tablespace YANGTK read only


Export: Release 10.2.0.3.0 - 64bit Production on
星期五, 09 1, 2009 2:27:28

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
ORA-39002:
操作无效
ORA-39070:
无法打开日志文件。
ORA-39087:
目录名 D_OUTPUT 无效


主机命令完成

删除自动实例
关闭自动实例
Oracle
实例已关闭
自动实例已删除
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: tranport tablespace
命令 ( 01/09/2009 02:27:43 ) 失败
RMAN-03015:
在存储的脚本Memory Script中出现错误
RMAN-06135:
执行主命令时出错: Additional information: 256
Additional information: 4

错误很简单,由于指定了一个不存在的DIRECTORY名称:D_OUTPUT,导致RMAN在通过命令行方式调用EXPDP命令时出错。错误信息很明确,解决方法也很简单,只需要在数据库中添加D_OUTPUT目录就可以了。

既然问题这么简单,为什么说这个问题有意思呢。有意思的在源数据库中添加新的目录D_OUTPUT后,问题依旧:

SQL> create directory d_output as '/data/dmp';

目录已创建。

SQL> host
bash-2.03$ expdp test/test directory=d_output dumpfile=test.dp

Export: Release 10.2.0.3.0 - 64bit Production on 星期五, 09 1, 2009 2:31:06

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
启动 "TEST"."SYS_EXPORT_SCHEMA_01":  test/******** directory=d_output dumpfile=test.dp
正在使用 BLOCKS 方法进行估计...
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 640 KB
处理对象类型 SCHEMA_EXPORT/USER
处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT
处理对象类型 SCHEMA_EXPORT/ROLE_GRANT
处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE
处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE
处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/INDEX
处理对象类型 SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
处理对象类型 SCHEMA_EXPORT/TABLE/COMMENT
处理对象类型 SCHEMA_EXPORT/FUNCTION/FUNCTION
处理对象类型 SCHEMA_EXPORT/PROCEDURE/PROCEDURE
处理对象类型 SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION
处理对象类型 SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
. .
导出了 "TEST"."T"                                  392.1 KB   45229
已成功加载/卸载了主表 "TEST"."SYS_EXPORT_SCHEMA_01"
******************************************************************************
TEST.SYS_EXPORT_SCHEMA_01
的转储文件集为:
  /data/dmp/test.dp
作业 "TEST"."SYS_EXPORT_SCHEMA_01" 已于 02:32:04 成功完成

可以看到,新增的D_OUTPUT目录可以正常工作,但是再次执行上面的TRANSPORT TABLESPACE命令,错误却没有发生任何的变化。

其实导致这个问题的原因并不复杂,由于执行的是表空间及时点恢复,且在执行TRANSPORT TABLESPACE命令时没有指定UNTIL SCN参数,因此RMAN自动选择了一个时间点,而这个时间点恰好是在CREATE DIRECTORY命令之前,导致了TRANSPORT TABLESPACE命令生成的AUXILIARY实例在执行完及时点恢复后,不包含新创建的DIRECTORY

解决这个问题最简单的方法是指定一个系统中已经存在的目录,如果一定要使用新建的目录,那么需要在TRANSPORT TABLESPACE的时候指定UNTIL SCN参数,且保证这个SCN在创建新DIRECTORY之后。

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-567410/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10454743