Python连oracle遇到的坑

今天是一直报错~解决错误~报错的一天~~~~~~~~

一、报TCC协议内部错误

写的代码根据老库都调通了之后,部署到了生产线的新库,但是报了ORA-03130:TCC协议内部错误。

刚开始查到是说cx_Oracle是不通版本可能会不兼容,突然想起来原来oracle是不同版本的(我脑袋永远是不能发散思维的。。),于是查了下

老库:

新库:

真的是不通版本的!

为什么不同版本就会报错呢?就要从cx_Oracle这个包的工作原理讲起。

1、原因

可以把cx_Oracle这个包想象成PLSQL,如果你本地不装oracle客户端,只安装了PLSQL是不能用的,所以因为我本地装了11g的oracle客户端,再去连新库的时候,就会报莫名其妙的错误了(我师傅给我是这么解释的)。

2、解决方法

本地装一个12c的oracle客户端就好啦!!(如果有不同的好的解决方法,非常非常希望能共享

二、报TNS:无法解析指定的连接标识符的错误

1、原因

将代码在本地跑通后,放到服务器上又报了这个错误——ORA-12154

检查防火墙关了,ping和telnet也都是通的,TNS也配置好了(echo $ORACLE_HOME可查)后,突然发现,密码里面有特殊字符!

所以会报错,直接用

sqlplus username/password@TNS

启用sqlplus也会报错。

2、解决方法

在有特殊符号时

服务器启动sqlplus用

sqlplus 'username/"password"’@TNS

cx_Oracle连接时,用

conn = cx_Oracle.connect(‘username /"password"@ TNS’)

就可以啦

三、换行符问题

这个不算python连oracle的注意点,但是也是今天遇到的一个问题,将代码部署到服务器后一直报错,后来找到了原因:是不同系统的换行符不同导致的。

UNIX系统是,OS系统是,win系统是。

所以一个文件从一种系统移到另一种系统,就有换行符的麻烦。

这时候,只需要vi该文件切换到命令模式,然后

set ff=unix

就好啦。

你可能感兴趣的:(Python连oracle遇到的坑)