Oracle中ORA-12514问题解决方法
问题描述:
在使用Oracle数据库时,有时会遇到ORA-12514错误,该错误提示信息如下:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
该错误提示是由Oracle监听程序(Listener)发出的,通常是由于数据库服务名称无法正确定位或不存在所致。
解决方法:
确认服务名是否正确
首先需要确认连接字符串(Connect Descriptor)中的服务名(Service Name)是否正确。连接字符串一般格式为:
(DESCRIPTION= (ADDRESS_LIST=
(ADDRESS= (PROTOCOL=TCP) (HOST=hostname) (PORT=port))
) (CONNECT_DATA=(SERVICE_NAME=servicename)))
其中的 servicename 就是要连接的数据库的服务名称。
如果使用Oracle的 SID 作为服务名称,则需要将 SID 转换为服务名称,转换方法如下:
SELECT instance_name, status, db_name, db_unique_name
FROM v$instance;
其中 db_name 就是服务名称。
确认Listener中是否存在对应的服务
如果服务名称正确,仍然无法连接,则需要确认 Listener 中是否存在对应的服务。使用 lsnrctl 工具可以查看 Listener 中是否存在目标服务。
使用方法如下:
首先进入 lsnrctl 工具的解释界面:
lsnrctl
然后在 lsnrctl 工具的解释界面中,查看数据库服务的连接状况:
status
如果目标服务不存在,则需要在 Listener 中增加对应的服务。如果目标服务已存在但无法连接,则可能是 Listener 的配置有问题,需要检查 Listener 的配置文件 listener.ora 是否正确。
示例说明:
示例1:确认服务名是否正确
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=localhost)
(PORT=1521)
)
)
(CONNECT_DATA=
(SERVICE_NAME=ORCLCDB)
)
)
上述示例的服务名称为 ORCLCDB。
示例2:确认Listener中是否存在对应的服务
在命令提示符中输入以下命令:
lsnrctl status
如果该命令输出中不包含需要连接的数据库服务,则需要在 Listener 中增加对应的服务。在 listener.ora 配置文件中增加如下内容:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORA)
(SID_NAME = ORA)
(ORACLE_HOME = C:\oracle\product\12.2.0\dbhome_1)
)
)
其中 ORA 是需要连接的服务名称,ORACLE_HOME 是 Oracle 的安装根目录。增加完成之后,需要重启 Listener 才能使更改生效。
总结
通过以上步骤的操作,你可以解决ORA-12514的问题。在进行操作时,需要注意服务名是否正确以及 Listener 是否已经存在需要连接的服务。如果有需要的话,也可以尝试重启 Listener 服务。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:oracle中ORA-12514问题解决方法 - Python技术站