ORA-16032 Can not Start Instance via srvctl but via sqlplus is fine [ID 1062071.1]

ORA-16032 Can not Start Instance via srvctl but via sqlplus is fine [ID 1062071.1]

Modified 07-OCT-2010Type PROBLEMStatus PUBLISHED

In this Document
Symptoms
Changes
Cause
Solution

Applies to:

Oracle Server - Enterprise Edition - Version: 10.1.0.2 to 11.2.0.1 - Release: 10.1 to 11.2
Information in this document applies to any platform.

Symptoms

Using 11.2. Grid Infrastructure, the database instances cannot be started via 'srvctl', but can be started via 'sqlplus'. The same spfile "+DATA/db302d/spfiledb302d.ora" is used for both srvctl and sqlplus:

[oracle@node1] /opt/oracle/admin/+ASM $ srvctl start database -d db302d
PRCR-1079 : Failed to start resource ora.db302d.db
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0

ORA-16032: parameter %s destination string cannot be translated
CRS-2674: Start of 'ora.db302d.db' on 'node1' failed
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0


The associated oraagent_oracle.log (located in GRID_home/log/nodename/agent/crsd/oraagent_oracle/) shows similar messages:

2010-02-09 07:08:22.587: [ AGFW][1169193280] ora.db302d.db 1 1 state changed from: OFFLINE to: STARTING
2010-02-09 07:08:22.587: [ AGFW][1148213568] Executing command: start for resource: ora.db302d.db 1 1

2010-02-09 07:08:37.488: [ AGFW][1148213568] sending status msg [ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0
] for start for resource: ora.db302d.db 1 1

2010-02-09 07:08:37.571: [ora.db302d.db][1148213568] [start] Exception type=2 string=ORA-16032: parameter %s destination string cannot be translated

2010-02-09 07:08:37.571: [ AGFW][1148213568] sending status msg [ORA-16032: parameter %s destination string cannot be translated
] for start for resource: ora.db302d.db 1 1
2010-02-09 07:08:37.571: [ora.db302d.db][1148213568] [start] clsn_agent::start }
2010-02-09 07:08:37.571: [ AGFW][1148213568] Command: start for resource: ora.db302d.db 1 1 completed with status: FAIL

Changes

New installation

Cause

The error is caused by following instance parameter setting:

log_archive_dest_1 = "LOCATION=$ORACLE_BASE/db302d/admin/arch/"


When using sqlplus to start the instance, the oracle user has the variable $ORACLE_BASE set in its environment (e.g. via the shell profile) , so this parameter can be translated.
However, when starting the instance via 'srvctl', the CRS daemon process will not execute the user's shell profile, instead it will only use any environment variables explicitly set in OCR.

As the ORACLE_BASE environment variable is not set in OCR, the startup via srvctl fails with ORA-16032.

Solution

Change log_archive_dest_1 to use the real path, eg:

alter system set log_archive_dest_1= "LOCATION=/opt/oracle/db302d/admin/arch/";


Or set the environment variable ORACLE_BASE in OCR using srvctl:

srvctl setenv database -d <name> -t ORACLE_BASE=/opt/oracle


After this, srvctl can start/stop the instance without issue.

------------------------------------------------------------------------------

Blog http://blog.youkuaiyun.com/tianlesoftware

网上资源: http://tianlesoftware.download.youkuaiyun.com

相关视频:http://blog.youkuaiyun.com/tianlesoftware/archive/2009/11/27/4886500.aspx

DBA1 群:62697716(); DBA2 群:62697977()

DBA3 群:62697850 DBA 超级群:63306533;

聊天 群:40132017

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

### 解决方案 ORA-01034 错误通常表明 Oracle 数据库实例不可用。这可能是由于数据库未启动、监听器配置错误或环境变量设置不当等原因引起的。以下是解决此问题的详细分析和方法: #### 1. 检查数据库实例是否已启动 确保数据库实例已经正确启动。可以通过以下命令检查实例状态: ```sql SQL> SELECT host_name, instance_name, status FROM v$instance; ``` 如果返回 `ORA-01034`,说明实例尚未启动。尝试启动数据库实例: ```bash $ sqlplus / as sysdba SQL> startup ``` 如果启动过程中出现其他错误,请记录并进一步排查[^1]。 #### 2. 验证环境变量设置 检查环境变量是否正确配置,特别是 `ORACLE_HOME` 和 `ORACLE_SID`。可以使用以下命令验证: ```bash $ echo $ORACLE_HOME $ echo $ORACLE_SID ``` 如果环境变量未正确设置,可能导致实例无法找到对应的数据库。请根据实际情况设置这些变量,例如: ```bash export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:$PATH ``` #### 3. 检查监听器状态 确保监听器已启动且配置正确。通过以下命令检查监听器状态: ```bash $ lsnrctl status ``` 如果监听器未启动,可以使用以下命令启动它: ```bash $ lsnrctl start ``` 此外,确认监听器配置文件 `listener.ora` 中的设置是否与数据库实例匹配[^1]。 #### 4. 检查告警日志 查看 Oracle 告警日志以获取更多错误信息。告警日志通常位于 `$ORACLE_BASE/diag/rdbms/<dbname>/<instance_name>/trace/alert_<instance_name>.log`。通过以下命令定位日志文件: ```bash $ cd $ORACLE_BASE/diag/rdbms/<dbname>/<instance_name>/trace/ $ cat alert_<instance_name>.log ``` 如果发现类似 `ORA-00603: ORACLE server session terminated by fatal error` 的错误信息,则可能需要进一步检查系统资源限制或内存锁定设置[^2]。 #### 5. 检查 glogin.sql 文件 如果 `glogin.sql` 文件中包含可能导致实例不可用的语句,也可能引发此错误。检查 `$ORACLE_HOME/sqlplus/admin/glogin.sql` 文件内容,确保没有不适当的 SQL 语句。例如,删除可能引起问题的上下文设置语句[^3]。 #### 6. 系统资源限制检查 某些情况下,操作系统级别的资源限制(如内存锁定限制)可能导致实例无法正常启动。检查 `/etc/security/limits.conf` 或类似的配置文件,确保为 Oracle 用户分配了足够的资源。例如: ```bash oracle soft memlock 1048576 oracle hard memlock 1048576 ``` 然后重启数据库实例以应用更改[^2]。 ### 总结 通过以上步骤,可以有效排查和解决 ORA-01034 错误。具体操作需结合实际环境和日志信息进行调整。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值