当配置Linux系统下Oracle数据库的DataGuard时,有时会遇到ORA-12528错误,这是因为监听器没有被正确设置引起的。本文将详细介绍如何解决这个问题。
问题描述
在配置Oracle DataGuard时,部署完主库,建立归档传输服务,配置好主库的tnsnames和listener.ora文件后,尝试在备库的tnsnames中添加主库的模式为log_archive_dest的连接信息,使用tnsping命令进行连接测试,出现以下错误信息:
TNS-12541: TNS没能成功建立到目标计算机的连接,因为该计算机拒绝了连接请求
此时,在备库的alert日志文件中会出现以下错误信息:
ORA-12528: TNS:listener: all appropriate instances are blocking new connections
解决方案
针对上述问题,可以按照以下步骤进行解决:
第一步:确认监听器的状态
确定主库上的监听器是否正常运行,可以使用以下命令查看监听器的状态:
lsnrctl status LISTENER
如果监听器状态正常,会看到如下信息:
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Listener Parameter File ".../network/admin/listener.ora"
Listener Log File ".../diag/tnslsnr/your_host/listener/alert/log.xml"
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "ORCL" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully
如果监听器状态为UNKNOWN或者READY,说明监听器已经启动,可以进行下一步操作。
第二步:检查tnsnames.ora文件
确保备库tnsnames.ora文件中主库连接信息配置正确,特别是log_archive_dest参数的正确配置。
#格式如下(在tnsnames.ora中添加格式):
[oracle@bac-01 ~]$ cat tnsnames.ora
....
....
orcl =
(DESCRIPTION = +
(ADDRESS_LIST = +
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521)) +
) +
(CONNECT_DATA = +
(SERVICE_NAME = orcl) +
) +
(LOG_ARCHIVE_DEST = (SERVICE= ora11g) +
(SERVICE_NAME = orcl) +
(LGWR = true) +
(NET_TIMEOUT = 30) +
(USE_SHMEM = true) +
(ASYNC = false) +
(VALID_FOR = (ONLINE_LOGFILES,PRIMARY_ROLE))
)
)
第三步:重启监听器
如果以上两步没有解决问题,可能需要重启监听器。可以使用以下命令来重新启动监听器:
lsnrctl stop LISTENER
lsnrctl start LISTENER
第四步:检查主库参数
如果以上三步还不能解决问题,可以检查主库的参数设置是否正确。如果主库未正确配置DataGuard参数,可能导致监听器无法接受新的连接请求。可以使用以下命令来检查主库参数设置:
SQL> show parameter standby
确保以下参数设置正确:
LOG_ARCHIVE_DEST_STATE_2 = ENABLE
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;
示例说明
示例一
其中一个用户在配置DataGuard时遇到了进程未启动完成,这时无法完成切换。根据以上解决方法,在检查监听器状态,检查tnsnames文件时,需要保证当前的网络状况没有出现问题。可以在备库通过tnsping命令测试能否连通主库,在主库检查监听器状态是否为READY。如果还无法解决问题,可以考虑在备库和主库上重新启动监听器。最终可以确认主库参数设置是否正确,并进行修改。通过以上的解决方法,该用户成功地解决了进程未启动完成的问题。
示例二
另一个用户在配置DataGuard时遇到了ORA-12528错误。根据以上解决方法,在经过以上三步操作后,仍然没有解决问题。于是该用户检查了主库参数设置,发现主库没有正确配置DataGuard参数,针对该问题进行了修改。最终该用户成功地解决了ORA-12528错误。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux系统 配置DataGuard时报ORA-12528错误的解决办法 - Python技术站