将数据库复制到新主机时出现 ORA-01041 错误

将数据库复制到新主机时出现 ORA-01041 错误

我正在使用带有 Oracle 11g 的 RHEL 5,并且正在测试数据保护。

我正在尝试通过以下链接设置数据保护:

http://www.databasejournal.com/features/oracle/article.php/3816751/Oracle-11g-Data-Guard-Building-a-Physical-Standby-Database.htm

我使用以下命令:

[oracle@linux-test ~]$ rman target sys/oracle auxiliary sys/oracle@stdby

Recovery Manager: Release 11.1.0.6.0 - Production on Tue Oct 6 11:54:47 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

connected to target database: ORCL (DBID=1227314034)

connected to auxiliary database: STDBY (not mounted)

RMAN> RUN {
   ALLOCATE CHANNEL d1 TYPE DISK;
   ALLOCATE CHANNEL d2 TYPE DISK;
   ALLOCATE AUXILIARY CHANNEL cnv1 TYPE DISK;
   ALLOCATE AUXILIARY CHANNEL cnv2 TYPE DISK;
   DUPLICATE TARGET DATABASE
       FOR STANDBY
       FROM ACTIVE DATABASE
       DORECOVER
       SPFILE
          SET db_unique_name='stdby' 
          SET control_files='/home/u01/app/oracle/oradata/orcl/control01.ctl'
          SET log_file_name_convert='/home/u01/app/oracle/oradata/orcl/','/home/u01/app/oracle/oradata/stdby/'
          SET log_archive_dest_1='location=/home/u01/app/oracle/flash_recovery_area/STDBY/ valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=stdby'
          SET log_archive_dest_2='service=orcl ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=orcl'
          SET fal_client='stdby'
          SET fal_server='orcl'
          SET standby_file_management='AUTO'
          SET log_archive_config='dg_config=(orcl,stdby)'
      NOFILENAMECHECK;
  }

当开始数据文件复制时,出现以下错误:

channel d1: starting datafile copy
input datafile file number=00001 name=/home/u01/app/oracle/oradata/orcl/system01.dbf
channel d2: starting datafile copy
input datafile file number=00002 name=/home/u01/app/oracle/oradata/orcl/sysaux01.dbf
RMAN-03009: failure of backup command on d1 channel at 10/06/2009 11:56:41
ORA-19558: error de-allocating device
ORA-19557: device error, device type: DISK, device name: 
ORA-17627: ORA-01041: internal error. hostdef extension doesn't exist
ORA-17627: ORA-01041: internal error. hostdef extension doesn't exist
ORA-03113: end-of-file on communication channel
channel d1 disabled, job failed on it will be run on another channel
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 10/06/2009 11:56:54
RMAN-03015: error occurred in stored script Memory Script
RMAN-03009: failure of backup command on d2 channel at 10/06/2009 11:56:54
ORA-19558: error de-allocating device
ORA-19557: device error, device type: DISK, device name: 
ORA-17627: ORA-01041: internal error. hostdef extension doesn't exist
ORA-17627: ORA-01041: internal error. hostdef extension doesn't exist
ORA-03113: end-of-file on communication channel

我已经在 Google 上搜索过了,但仍然没有解决方案。

请问有什么想法吗?

沙里思

答案1

Oracles 文档指出:

ORA-01041: internal error. hostdef extension doesn't exist
    Cause: Pointer to hstdef extension in hstdef is null.
    Action: Report as a bug

因此,如果您有他们的支持,我建议您联系他们。有时,深入研究 Oracle 中的错误确实会让您发疯。

但据我了解,错误与数据库(或数据库和客户端)之间的连接有关,因此您可以检查一些事情。

首先,情况可能很简单,因为文件根本不存在。

因此请验证这些文件是否存在(并且可以被数据库读取):

/home/u01/app/oracle/oradata/orcl/system01.dbf
/home/u01/app/oracle/oradata/orcl/sysaux01.dbf

还要验证 ORACLE_HOME 是否设置正确,以及 tnsnames.ora 是否包含两个数据库的定义(因为您已连接到它们两个,所以应该如此,但最好验证一下),还要检查您是否使用了与数据库不同的 tnsnames。

监听器也可能是一个问题,也许 stdby 从未在那里注册,您可以尝试在监听器文件中手动添加它,而不是让它自己注册。

如果使用的主机名在 /etc/hosts 文件中不存在,即使使用 dns,我也遇到问题,所以您也可以尝试一下。

如果仍然没有帮助,请查看警报日志和跟踪文件,也许它们提供了有关该问题的更多信息。

这就是我所有的想法,希望至少能对你有一点帮助。

更新: 嗯,经过进一步检查,我发现一个问题可能是你实际上没有指定数据库文件的位置。

尝试添加:

set db_file_name_convert='/home/u01/app/oracle/oradata/orcl/', 
    '/home/u01/app/oracle/oradata/stdby/'

spfile 语句之后

您可能还想添加parameter_value_convert 'orcl','stdby'不确定是否有必要,但它看起来可能是个好主意。

相关内容