一、故障现象
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 12/27/2021 20:57:30
RMAN-05501: aborting duplication of target database
RMAN-06136: ORACLE error from auxiliary database: ORA-01503: CREATE CONTROLFILE failed
ORA-00349: failure obtaining block size for '+dat
二、详情
[oracle@server dbs]$ rman target sys/oracle@RAC_MYDB auxiliary /
Recovery Manager: Release 11.2.0.4.0 - Production on Mon Dec 27 20:23:59 2021
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: MYDB (DBID=2999538401)
connected to auxiliary database: ORA11G (not mounted)
RMAN> duplicate target database to ora11g;
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 567869440 bytes
Fixed Size 2255272 bytes
Variable Size 222299736 bytes
Database Buffers 335544320 bytes
Redo Buffers 7770112 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "ORA11G" RESETLOGS ARCHIVELOG
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 32
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( '+data', '/opt/Ora11gData/ora11g/group_1.257.1084542569' ) SIZE 50 M REUSE,
GROUP 2 ( '+data', '/opt/Ora11gData/ora11g/group_2.258.1084542579' ) SIZE 50 M REUSE
DATAFILE
'/opt/Ora11gData/ora11g/system.259.1084542583'
CHARACTER SET AL32UTF8
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 12/27/2021 20:57:30
RMAN-05501: aborting duplication of target database
RMAN-06136: ORACLE error from auxiliary database: ORA-01503: CREATE CONTROLFILE failed
ORA-00349: failure obtaining block size for '+dat
三、解决办法
SQL> set linesize 200 pagesize 200
SQL> col member format a60
SQL> select v1.thread#, v1.group#, member, sequence#, first_change#, archived, v1.status from v$log v1, v$logfile v2 where v1.group#=v2.group#;
THREAD# GROUP# MEMBER SEQUENCE# FIRST_CHANGE# ARC STATUS
---------- ---------- ------------------------------------------------------------ ---------- ------------- --- ----------------
1 1 +DATA/mydb/onlinelog/group_1.257.1084542567 93 1464214 NO CURRENT
1 1 +FRA/mydb/onlinelog/group_1.257.1084542569 93 1464214 NO CURRENT
1 2 +DATA/mydb/onlinelog/group_2.258.1084542573 92 1464120 YES INACTIVE
1 2 +FRA/mydb/onlinelog/group_2.258.1084542579 92 1464120 YES INACTIVE
2 3 +DATA/mydb/onlinelog/group_3.265.1084548477 25 1464125 YES INACTIVE
2 3 +FRA/mydb/onlinelog/group_3.259.1084548481 25 1464125 YES INACTIVE
2 4 +DATA/mydb/onlinelog/group_4.266.1084548487 26 1464476 NO CURRENT
2 4 +FRA/mydb/onlinelog/group_4.260.1084548489 26 1464476 NO CURRENT
#*.log_file_name_convert=('+DATA/mydb/onlinelog','/opt/Ora11gData/ora11g')
#*.db_file_name_convert=('+DATA/mydb/datafile','/opt/Ora11gData/ora11g')
#*.db_file_name_convert=('+DATA/mydb/tempfile','/opt/Ora11gData/ora11g')
#*.log_file_name_convert=('+FRA/mydb/onlinelog','/opt/Ora11gData/ora11g')
参数文件中log_file_name_convert或db_file_name_convert参数如果有多条记录不能分开写,因此上面这种写法是错误的,需要写在同一行上,如下所示:
*.log_file_name_convert=('+DATA/mydb/onlinelog','/opt/Ora11gData/ora11g','+FRA/mydb/onlinelog','/opt/Ora11gData/ora11g')
*.db_file_name_convert=('+DATA/mydb/datafile','/opt/Ora11gData/ora11g','+DATA/mydb/tempfile','/opt/Ora11gData/ora11g')
详见Oracle官方文档: Doc ID 2206423.1