`

ORACLE OCI的no ocijdbc10 in java.library.path及ORA-00932:inconsistent datatype解决之道

阅读更多

出错了:Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0" java.lang.UnsatisfiedLinkError: no ocijdbc10 in java.library.path
 at java.lang.ClassLoader.loadLibrary(Unknown Source)
 at java.lang.Runtime.loadLibrary0(Unknown Source)
 at java.lang.System.loadLibrary(Unknown Source)
 at oracle.jdbc.driver.T2CConnection$1.run(T2CConnection.java:3147)
 at java.security.AccessController.doPrivileged(Native Method)
 at oracle.jdbc.driver.T2CConnection.loadNativeLibrary(T2CConnection.java:3143)
 at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:221)
 at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:441)
 at oracle.jdbc.driver.T2CConnection.<init>(T2CConnection.java:132)
 at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:78)
 at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
 at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
 at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
 at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
 at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
 at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
 at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
 at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
 at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

。。。。。。。

出错了:org.springframework.jdbc.BadSqlGrammarException: SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.co
mmon.jdbc.exception.NestedSQLException:  
--- The error occurred in com/eshore/idep/schedule/dao/po/ThreadControl.xml. 
--- The error occurred while applying a parameter map. 
--- Check the selectThreadControl-InlineParameterMap. 
--- Check the statement (query failed). 
--- Cause: java.sql.SQLException: ORA-00932: inconsistent datatypes: expected %s got %s

。。。。。。。

为什么?怎么解决?请继续...

 

声明:下面的问题以ORACLE10g为参考版本(同样适用于ORACLE11g),因为在ORACLE9i中基本上是不会出现这些信息的,只要我们遵照通用的原则(自行google吧),但我们若以此文为参考,完全适应!

 

插序:关于JDBC Driver for ORACLE详细信息可参考http://redsnow-fenglin.iteye.com/blog/520618,我们常用的驱动应该的应该是第3、4类和第2类的OCI,据传OCI的性能优于THIN,但并未看到有力的证明,而且经个人测试也未必如此,参见我的帖子:

写道
http://www.iteye.com/topic/242902?page=11#1163693
PS:之说以这么说是因为我最近做了一个纯后台的项目时遇到持久层的性能瓶颈争论问题,我给大家一个粗略的性能测试数据,即便我不说,相信大家横行对比也知道这里面的含义了(据说C的oracle oci可以到达3k条/秒的insert速度,而我测java的oci或thin最好测试记录也无非1.3k多条/秒,比较汗):
测试环境:主机 HP-UX rp3440 B.11.23 U 9000/800 (td) 数据库 ora9i
插入速度测试数据
模式 驱动模式 数据量 2w 2w 10w 10w
原始jdbc模式 thin 时间(速率) 17秒(1176条/秒) 18秒(1111条/秒) 1.26分(1162条/秒 1.26分(1162条/秒)
oci 18秒(1111条/秒) 18秒(1111条/秒) 1.25分(1176条/秒 1.28分(1136条/秒)
JdbcTemplate模式 thin 24秒(833条/秒) 24秒(833条/秒) 1.59分(840条/秒) 1.54分(877条/秒)
oci 29秒(689条/秒) 29秒(689条/秒) 2.33分(653条/秒) 2.21分(709条/秒)

 其实,开发中最常见的就是ORACLE的THIN模式,但为何我这里提出这个OCI模式呢?这是因为经过多方查资料显示在使用ORACLE的RAC模式时,推荐OCI模式~~

 

其实OCI模式使用起来配置也是蛮简单的,但可能种种原因,我们会遇到种种预期不到的问题,这里我给出一些注意事项:

 

解决之道:

写道
1、采用OCI的server必须有作为客户端访问ORACLE的能力;

2、OCI的jdbcURL有两种配置风格:简略模式和详尽模式,建议采用简略模式,尤其是在我们使用ORACLE的RAC功能时,两种模式的样例如下:

A. 简略模式 jdbc:oracle:oci:@x_tnsname,其中x_tnsname是您配置在$ORACLE_HOME/.../network/admin/tnsname.ora中的标示符

B. 详尽模式 jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=x_ip)(PORT=x_port)))(CONNECT_DATA=(SERVICE_NAME=x_sid)(SERVER=DEDICATED))),其中x_ip、x_port、x_sid是对应oracle的相应配置

3、ORACLE JDBC DRIVER驱动版本 在ORACLE 的 THIN模式我曾说过:
写道
http://redsnow-fenglin.iteye.com/blog/526192
原以为最好的方法是用oracle版本一致的驱动版本,但经过多次测试发现,采用高版本的JDBC DRIVER报错的时间会向后推迟久点(10.2.0.1大约1天多后,10.2.0.4大意两天左右),
 
但它并不单纯适应于OCI模式,因为OCI模式与本地动态库有关联,一般情况下,推荐使用和我们ORACLE数据库版本一致的驱动JAR及动态库,这些都可以在我们的ORACLE安装目录下找到,当然,我们也可以采用高版本的驱动JAR及相应的动态库,但是,我们绝对不可以采用版本不一致的驱动JAR及相应的动态库,否则,那就会有Cause: java.sql.SQLException: ORA-00932: inconsistent datatypes: expected %s got %s之类的异常

4、libocijdbc.so 这个家伙是关键,也许我们google说只要将ORACLE相应的这个家伙放入libpath就ok,比如LD_LIBRARY_PATH=/data/ora10g/10.2.0.1/product/lib32:/lib:/data/ora10g/code/ace-5.5/ace,但很不幸,即便如此,我们依旧可能收到java.lang.UnsatisfiedLinkError: no ocijdbc10 in java.library.path
,至少我们在IBM AIX5.3上(因我们的HP-UX是ORACLE9i的,没必要理会这个,一切OK),那么,它的解决之道就是用-Djava.library.path强制导入我们ORACLE相应的这个动态库(分lib32、lib(64的),根据需要自行选择);

 按照上面的4点,ORACLE OCI模式无忧矣。

 

导致两个异常的元凶:

A.解决之道4中没用-Djava.library.path强制导入我们ORACLE相应的这个动态库(在IBM AIX5.3) 引起异常

 java.lang.UnsatisfiedLinkError: no ocijdbc10 in java.library.path

B.解决之道4中没有保持版本一致的JDBC DRIVER及相应的OCI所需本地动态库引起异常

 java.sql.SQLException: ORA-00932: inconsistent datatypes

 

 

 问题已解决,希望对同僚们有所帮助~~

1
0
分享到:
评论

相关推荐

    oci.dll ocijdbc11...

    oci.dll和ocijdbc11是Oracle数据库连接中至关重要的动态链接库文件,它们在Windows环境中用于实现应用程序与Oracle数据库的交互。Oracle Call Interface (OCI) 和 Oracle JDBC Driver 是两个不同的但相关的接口,...

    ORA-12737: Instant Client Light oci sqlplus

    ORA-12737: Instant Client Light: unsupported server character set CHS16GBK/ZHS16GBK解决方案oci sqlplus instantclient_12_2

    Oracle dbca时报:ORA-12547: TNS:lost contact错误的解决

    最近在工作中遇到了一个问题,错误是Oracle dbca时报错:ORA-12547: TNS:lost contact,通过查找相关的资料终于找到了解决的方法,下面分享给大家,话不多说了,来一起看看详细的介绍吧。 环境: OS:RHEL6.5 x86-...

    ocijdbc10.dll x86/x64双版本

    oracle10g用jdbc:oracle:oci方式连接访问数据库时,报no ocijdbc10 in java.library.path。 解决方法: 将下载好的ocijdbc10.dll(注意区分版本)复制到jdk安装目录下的bin目录中(D:\work\Java\jdk1.7.0_45\bin)...

    oracle错误及解决方法

    3. 常见Oracle错误及解决策略 - **ORA-01403:未找到数据**:确保查询的条件正确,数据确实存在。 - **ORA-01555:快照过旧**:考虑增大_undo表空间或者优化查询以减少回滚段的使用。 - **ORA-27037:无法打开...

    oci.dll解决ORA-28547错误

    oci.dll是Oracle Call Interface(Oracle调用接口)的动态链接库文件,它是Oracle数据库与应用程序交互的核心组件。在描述中提到的问题,用户在使用Navicat Premium这款强大的数据库管理工具尝试连接Oracle数据库时...

    ORA-12737 ZHS16GBK 解决方案 oci sqlplus

    在Oracle数据库环境中,当用户尝试使用oci(Oracle Call Interface)或者sqlplus进行连接时,可能会遇到"ORA-12737"错误。这个错误通常表明客户端与服务器之间的字符集不兼容,具体在这个例子中是"Instant Client ...

    oracle_oci.dll文件.zip

    然而,用户在使用Navicat连接Oracle数据库时,可能会遇到“library is not loaded”的错误提示,这通常与oci.dll文件有关。oci.dll是Oracle Call Interface (OCI) 的动态链接库,它是Oracle数据库客户端连接到服务器...

    解决 navicat连接oracle报错:ORA-12737InstantClientLight

    在Navicat的“选项”&gt;“环境”&gt;“OCI”中,设置“OCI Library”为你的InstantClient目录下的oci.dll文件,例如:"C:\Oracle\InstantClient_19_3\oci.dll"。此外,可能还需要设置"环境变量",添加新的系统变量TNS_...

    oci.dll(版本:oracle 11.2.0.1)

    在开发过程中,开发者需要引用oci.dll,并且通常需要配置Oracle客户端环境,包括设置Oracle Home、TNSNAMES.ORA文件(定义数据库连接)以及注册oci.dll所在的目录到系统PATH变量。这样,应用程序在运行时才能找到并...

    ocljdbc10.dll x86/x64双版本

    oracle10g用jdbc:oracle:oci方式连接访问数据库时,报no ocijdbc10 in java.library.path。 解决方法: 将下载好的ocijdbc10.dll(注意区分版本)复制到jdk安装目录下的bin目录中(D:\work\Java\jdk1.7.0_45\bin)...

    Navicat_12.1.0.2.0_Oracle_OCI.dll

    总的来说,Navicat_12.1.0.2.0版本的Oracle_OCI.dll及相关库文件的更新,旨在增强Navicat与Oracle数据库的兼容性和稳定性,解决连接问题,确保用户能高效、顺畅地管理和操作Oracle数据库。在遇到连接问题时,除了...

    oci.dll,Navacat连接Oracle数据库的时候ORA-12737

    在使用Navacat工具连接Oracle数据库时,可能会遇到“ORA-12737: Instant Client Light: unsupported server character set ZHS16GBK”的错误。这个错误信息表明Navacat在尝试建立连接时,发现Oracle服务器使用的字符...

    OGG之ORA-01403案例

    OGG 之 ORA-01403 案例中,出现了复制进程 abended 状态,报告显示错误信息为 OCI Error ORA-01403: no data found。该错误的原因可能是由于表字段不一致、索引不一致或数据不一致等原因引起的。 二、解决方法 ...

    适配oracle11.2.0.1版本的oci.zip

    适配oracle11.2.0.1版本的oci

    oracle instantclient-basic-linux.x64-11.2.0.4.0.zip

    Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,它允许应用程序无需完整安装Oracle Database的情况下,也能与Oracle数据库进行交互。这个压缩包"oracle instantclient-basic-linux.x64-11.2....

    Oracle OCI.dll

    各windows版本下的oci.dll oci_10.2.0.5.dll oci_11.1.0.7.0.dll oci_11.2.0.4.0.dll oci_12.2.0.1.0.dll oci_21.3.0.0.0.dll

    oracle最新OCI文件最新的19.3版本oracle的OCI文件,兼容其下所有版本.zip

    oracle最新OCI文件,兼容一切版本! 本地安装的是64位的Oracle,但由于Navicat仅支持32位的,因此我们还需下载一个32位的客户端。 解决方案 下载32位客户端,配置进navicat中。 第1步:下载 最新OCI文件最新...

    Oracle驱动包 ojdbc6-11.2.0.4.0-atlassian-hosted.jar

    Oracle驱动包`ojdbc6-11.2.0.4.0-atlassian-hosted.jar`是Oracle公司为Java应用程序提供的一种数据库连接驱动,主要用于与Oracle数据库进行交互。这个驱动包是Oracle JDBC Thin驱动的特定版本,适用于Java 6环境。在...

    navicat 连oracle oci环境 12.1.0.2.0 版本

    Oracle数据库是世界上最流行的数据库管理系统之一,Navicat是一款强大的数据库管理工具,支持多种数据库系统,包括Oracle。在本文中,我们将深入探讨如何使用Navicat连接到Oracle OCI(Oracle Call Interface)环境...

Global site tag (gtag.js) - Google Analytics