失败解决Oracle双实例启动失败问题(oracle两个实例启动)

在使用Oracle数据库时,有时候会遇到双实例启动失败的问题。这个问题一般是由于数据库实例之间的冲突造成的,而且常常是在实例名称相同、监听器端口重复等情况下出现。本文将从以下几个方面介绍如何解决双实例启动失败问题:

一、查看错误日志

当双实例启动失败时,应该首先检查错误日志,查看具体的错误信息。可以使用以下命令查看所有ASM和实例的日志:

$ tl -100f $ORACLE_BASE/diag/rdbms/*/*/trace/*.log

二、修改实例名称

如果双实例启动失败是由于实例名称相同造成的,那么需要修改一个实例的名称。Oracle的实例名称保存于SPFILE中,可以使用以下命令修改名称:

SQL> ALTER SYSTEM SET INSTANCE_NAME=’new_instance_name’ SCOPE=SPFILE;

然后重启数据库,双实例就可以成功启动了。

三、修改监听器端口

如果双实例启动失败是由于监听器端口重复造成的,需要修改其中一个实例的监听器端口。可以使用以下命令来修改监听器端口:

$ lsnrctl stop

$ vi $ORACLE_HOME/network/admin/listener.ora

$ lsnrctl start

在listener.ora文件中找到其中一个实例的监听器,并将其端口号修改为未被占用的端口。

四、修改ASM实例名称

如果问题不在于实例名称和监听器端口上,那么就需要检查ASM实例的名称是否和其中一个实例名称相同了。可以使用以下命令修改ASM实例的名称:

$ srvctl modify asm -asminstance “old_instancename” -newinstancename “new_instancename”

修改完成后,重新启动ASM实例和双实例即可。

五、增加实例隔离性

如果以上方法都无法解决问题,可以尝试增加实例隔离性。在Oracle RAC中,实例之间的通信是通过IPC(Inter-process Communication)来实现的。如果其中一个实例没有正常退出,会导致其他实例无法启动。可以使用以下命令来增加实例的隔离性:

SQL> ALTER SYSTEM SET CLUSTER_INTERCONNECTS='(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=MY_SHARED_MEMORY)))’ SCOPE=SPFILE;

SQL> ALTER SYSTEM SET CLUSTER_DATABASE_INSTANCES='(db1, db2)’ SCOPE=SPFILE;

设置完成后,重新启动实例即可。

六、绑定IP地址

如果以上方法都无法解决问题,可以尝试将每个实例绑定到其相应的IP地址上。可以使用以下命令来完成绑定:

$ $ORACLE_HOME/bin/srvctl modify database -d “db_name” -vip “vip_name”

修改完成后,重新启动数据库实例即可。

综上所述,当双实例启动失败时,需要仔细检查错误日志,并根据具体情况采取相应的措施解决问题。如果以上方法都无效,建议联系Oracle技术支持。

以下代码为修改监听器端口的示例:

假设当前两个实例的监听器端口都为1521,需要将其中一个实例的监听器端口修改为1522。

1. 停止监听器

$ lsnrctl stop

2. 编辑listener.ora文件

$ vi $ORACLE_HOME/network/admin/listener.ora

找到其中一个实例的监听器,将port修改为1522.

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=PLUG1)

(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

(PROGRAM=extproc)

)

(SID_DESC=

(SID_NAME=ORCL)

(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

(PROGRAM=oracle)

(ENVS=”LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/dbhome_1/lib:/lib:/usr/lib”)

)

(SID_DESC=

(SID_NAME=ORCL2)

(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

(PROGRAM=oracle)

(ENVS=”LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/dbhome_1/lib:/lib:/usr/lib”)

(PORT=1522)

)

)

保存关闭listener.ora文件。

3. 启动监听器

$ lsnrctl start

4. 查看监听器状态

$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.3.0 – Production on 01-NOV-2019 15:36:16

Copyright (c) 1991, 2011, Oracle. All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

————————

Alias LISTENER

Version TNSLSNR for Linux: Version 11.2.0.3.0 – Production

Start Date 01-NOV-2019 15:33:35

Uptime 0 days 0 hr. 2 min. 40 sec

Trace Level support

Security ON: Local OS Authentication

SNMP OFF

Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

Listener Log File /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml

Listening Endpoints Summary…

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=8080))(Presentation=HTTP)(Session=RAW))

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=localhost)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/admin/ORCL/xdb_wallet))(Presentation=HTTP)(Session=RAW))

Services Summary…

Service “CLRExtProc” has 1 instance(s).

Instance “CLRExtProc”, status UNKNOWN, has 2 handler(s) for this service…

Service “ORCL” has 1 instance(s).

Instance “ORCL”, status READY, has 1 handler(s) for this service…

Service “ORCLXDB” has 1 instance(s).

Instance “ORCL”, status READY, has 1 handler(s) for this service…

Service “PLUG1” has 1 instance(s).

Instance “PLUG1”, status UNKNOWN, has 1 handler(s) for this service…

The command completed successfully

可以看到,其中一个实例的监听器端口已经被修改为1522。


数据运维技术 » 失败解决Oracle双实例启动失败问题(oracle两个实例启动)