Oracle数据库ORA-12537错误:Python连接Oracle失败求助
解决ORA-12537: TNS:connection closed连接错误
我来帮你排查这个让人头疼的ORA-12537错误,这个问题通常和网络连通性、Oracle服务配置或者客户端环境不兼容有关,咱们一步步来定位:
先确认网络是否通畅
先排除最基础的网络问题:- 用
ping <你的Oracle服务器IP>测试能不能通,如果丢包或者不通,先找运维解决网络/防火墙问题; - 用
telnet <你的Oracle服务器IP> <端口号>(默认是1521)测试端口是否开放,如果连不上,要么是服务器防火墙没开1521端口,要么是Oracle监听服务没启动。
- 用
检查Oracle监听状态
登录到Oracle服务器上,执行lsnrctl status命令,看看监听是否正常运行:- 如果显示"Listener is not running",就用
lsnrctl start启动监听; - 确认监听输出里有没有你要连接的端口和服务名,比如有没有
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=1521)))和对应的Service "xe" has 1 instance(s)这样的条目。
- 如果显示"Listener is not running",就用
确认服务名绝对正确
别猜服务名,直接在服务器上查:- 登录SQL*Plus,执行
SELECT name FROM v$database;获取CDB名称; - 如果是PDB,执行
SELECT name FROM v$pdbs;获取正确的PDB名称;
另外可以看监听日志(路径一般是$ORACLE_BASE/diag/tnslsnr/你的服务器名/listener/trace/listener.log),里面会记录你的连接尝试,能看到服务名是否匹配。
- 登录SQL*Plus,执行
检查cx_Oracle和Oracle客户端兼容性
确保你的cx_Oracle版本和安装的Oracle Instant Client版本匹配,而且客户端版本和服务器版本不要相差太大(比如服务器是19c,客户端用18c或19c最稳妥)。如果客户端版本太老,很可能出现奇怪的连接关闭问题。换一种连接方式试试
可以先配置tnsnames.ora文件(如果是Instant Client,放在network/admin目录下),写清楚连接串:MY_ORACLE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <你的服务器IP>)(PORT = <端口>)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <正确的服务名>) ) )然后用
con = cx_Oracle.connect("username/password@MY_ORACLE")连接,这样能排除连接字符串格式的问题。检查服务器连接限制
有时候服务器连接数满了也会直接关闭新连接,登录SQL*Plus执行SELECT value FROM v$parameter WHERE name='processes';看看最大连接数,再用SELECT COUNT(*) FROM v$session;看当前连接数,如果接近上限,需要调整processes参数。
内容的提问来源于stack exchange,提问作者hi_me
相关产品推荐
相关产品推荐

