错误信息

  SQL> startup nomount pfile='/tmp/initorcl.ora';
ORA-48141: error creating directory during ADR initialization [/u01/app/oracle/diag/rdbms//u01/app/oracle/fast_recovery]
ORA-48189: OS command to create directory failed
Linux-x86_64 Error: 2: No such file or directory
Additional information: 2

错误原因

搭建DG时候,把主库的参数文件拷贝到备库并修改后,然后将备库启动到nomount阶段时出现了这个错误,刚开始以为就哪个参数配置错误了,但是找了半天还是没找到,而且提示信息也很奇怪,怎么会有这种路径。也搜了半天还是没找到。

–以下是错误的参数文件内容

[oracle@cndba tmp]$ cat initorcl.ora 
orcl.__db_cache_size=394264576
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=406847488
orcl.__sga_target=608174080
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=188743680
orcl.__streams_pool_size=4194304
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_unique_name='orcl
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4322230272
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.local_listener='LISTENER_ORCL'
*.memory_target=1012924416
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'/

和主库对比后也没发现什么不对的地方,而且也被错误信息给误导了。ORA-48141: error creating directory during ADR initialization,就没注意其他参数。后来一行一行看,才发现db_unique_name='orcl 少了一个单引号。但是oracle并没有报db_unique_name配置不正确,可以看出oracle不会对参数的值进行检查,启动的时候根据单引号和一些规则来解析参数的值,如果少了某个单引号,会导致参数值完全不对了。下面举一个例子,数据库启动也正常。

例子1
–修改参数:

*.db_name='orcl   --少一个单引号
*.db_unique_name='orcldg'

–启动数据库

SQL> startup nomount pfile='/tmp/initorcl.ora';
ORACLE instance started.
Total System Global Area 1010479104 bytes
Fixed Size 2234640 bytes
Variable Size 608175856 bytes
Database Buffers 394264576 bytes
Redo Buffers 5804032 bytes
SQL> show parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
db_name string orcldg'
db_unique_name string orcldg'
global_names boolean FALSE
instance_name string orcl
lock_name_space string
log_file_name_convert string
processor_group_name string
service_names string orcldg'

可以看到db_unique_name多了一个单引号。没遇到过,不容易一次就找到错误点。刚遇到的,随手记一下。