当使用与ODI的JDBC驱动程序的时候出现如下错误"Connection failed", "Cannot connect", "No suitable dri_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 6138 | 回复: 0   主题: 当使用与ODI的JDBC驱动程序的时候出现如下错误"Connection failed", "Cannot connect", "No suitable dri        下一篇 
masy
注册用户
等级:少校
经验:1234
发帖:182
精华:0
注册:2011-11-4
状态:离线
发送短消息息给masy 加好友    发送短消息息给masy 发消息
发表于: IP:您无权察看 2011-12-26 13:15:48 | [全部帖] [楼主帖] 楼主

当使用与ODIJDBC驱动程序的时候出现如下错误"Connection failed", "Cannot connect", "No suitable driver", "Error during Session Preparation", "ClassNotFoundException" Or "NoClassDefFoundError"

适用于:

Oracle Data Integrator - Version: 4.1.01.05 and later   [Release: 4.1.01 and later ]


此文档信息适用于任何平台。

***Checked for relevance on 26-APR-2010***


症状

在Oracle数据集成器(ODI)物理架构上创建一个数据服务器,使用”Microsoft JDBC Driver for SQL Server”(或其他)。

当测试连接到数据服务器,显示如下的信息:

Connection failed
com.sunopsis.sql.e: com.microsoft.jdbc.sqlserver.SQLServerDriver


原因

如下信息:

Connection failed
com.sunopsis.sql.d: <my JDBC driver Java class>
or
Cannot connect to ...
com.sunopsis.sql.SnpsUnknowDriverException: <my JDBC driver Java class>
or
com.sunopsis.sql.e: <my JDBC driver Java class>
at com.sunopsis.sql.SnpsConnection.c(SnpsConnection.java)
or
Error during Session Preparation: <my JDBC driver Java class>
at com.sunopsis.dwg.dbobj.SnpSession.remoteExecute(Unknown Source)
or
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(DriverManager.java:532)
or
java.lang.NoClassDefFoundError: com/ncr/teradata/jtdgss/TdgssManager
or
java.lang.ClassNotFoundException: com/ncr/teradata/TeraDriver
are signaled by Oracle Data Integrator (ODI) to indicate that either:


Oracle 数据集成器(ODI)的信息表明:

北京联动北方科技有限公司                                指定的JDBC驱动程序在Java Classpath找不到(或者设置信息没有完全),或

北京联动北方科技有限公司                                在ODI的Metadata Navigator/LightWeight Designer的.jar或者.war文件没有正确安装,或

北京联动北方科技有限公司                                在Java处理过程中没有使用适当的ClassLoader将classes传入JVM虚拟机。

解决方案

这个问题可能有一个如下相关的情况:

1.      Oracle数据集成器(ODI)代理没有使用”agentstop.bat(.sh)”脚本彻底停止,并且重新启动尝试使用新的JDBC驱动。

2.      测试或者使用连接时指定的JDBC驱动程序不可用或者是没有安装到机器上。

3.      指定的JDBC驱动程序没有在Oracle数据集成器(ODI)的Java路径:简单得copy全部构造驱动程序文件到ODI的”/drivers”文件夹,在机器上进行链接测试。

4.      指定的JDBC驱动程序是由几个文件组成的(Teradata, DB2 UDB...)并不是所有都被复制到ODI”/drivers”文件夹中。

5.      对于需要license的JDBC驱动程序,确保:

a)     你已经购买了它并且

b)     你已经把它复制到ODI”/drivers”文件夹了。

6.      指定的JDBC驱动程序或者包含输入的URL错误这不同于在Java path定义。

7.      在传输过程中指定的JDBC驱动程序已经损坏。如果它已经损坏你可以尝试 解压缩/打开它检查。

一些JDBC驱动程序在ODI的下拉列表中,但是不发往与ODI。

其他的JDBC驱动程序没有列出在ODI下拉列表中,但是如果他们已经安装在”/drivers”文件夹并且如果”JDBC Driver”和”JDBC URL”领域在连接窗口拥有正确的设置那么也可以使用ODI。

注意经常发生这种情况当有多个ODI安装在机器上并且JDBC驱动程序安装在一个装置中但是没有在装置中使用它。

可以单击右键设置使用快捷键并选择”属性”确认安装或者检查其他安装在ODI”/drivers”文件夹确保JDBC驱动程序安装避免任何混乱。

当使用代理启动Windows Service时,为了考虑账户JDBC驱动程序变化,服务可能需要卸载并且重新安装。请参阅Note.423712.1 <如何设置作为Windows Services的ODI代理?>

当使用Metadata Navigator或者LightWeight Designer时观察它的行为,然后请参阅ODI和应用服务器模块关于部署文件构成的驱动程序在”/WEB_INF/lib”目录的应用。

当使用技术文件的时候,卸载一个文件数据的步骤信息:

com.sunopsis.sql.c: com.sunopsis.jdbc.driver.file.FileDriver


这是由于实际上在”drivers”目录下不可能找不到JDBC驱动程序名为” com.sunopsis.jdbc.driver.file.FileDriver”的文件。

在ODI拓扑管理器>"Physical Architecture" tab > Technologies > File >使用上面步骤找到数据服务器文件,然后点击JDBC选项卡。

从”JDBC Driver”文件中,点击一下按钮,并在结果列表中,从技术文件上观察2个可用的JDBC驱动程序:

北京联动北方科技有限公司                                Sunopsis File JDBC Driver

北京联动北方科技有限公司                                Sunopsis File JDBC Driver (OLD)

从"Sunopsis File JDBC Driver"的com.sunopsis.jdbc.driver.file.FileDriver获得驱动程序的语法,这是目前ODI附带的驱动程序;JDBC驱动程序文件”snpsfile.jar”位于ODI的”drivers”目录上。

从"Sunopsis File JDBC Driver (OLD)"中获得com.sunopsis.jdbc.file.FileDriver的语法,并且使用向后兼容性针对当前客户升级ODI旧版本的Sunopsis,但是在它们的工作中仍然使用旧的JDBC驱动程序文件。

Intermittent:
java.lang.ClassNotFoundException: <my JDBC driver Java class>
at java.lang.Class.forNameImpl(Native Method)
at java.lang.Class.forName(Class.java:130)
at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)


在纯Java或者Jython代码行可能观察到的消息,当调用单个参数的”java.lang.Class.forName()”方法时,将类名加载到JVM中,例如:

import java.lang as lang
lang.Class.forName ('oracle.jdbc.driver.OracleDriver')


当明确设置ClassLoader在内部使用Java时同样的Java Class正确加载将进一步测试显示:

import java.lang as lang
lang.Class.forName ('oracle.jdbc.driver.OracleDriver', 1, lang.Thread.currentThread().getContextClassLoader())


在IBM AIX 64-bit操作系统已经发现这些问题,当32-bit Java5 SR7是用来运行多个,长期运行的线程。

The behavior is resolved using the 64-bit Java5 SR12 instead.


有关信息……

在内部,Java使用ClassLoader将classes加入到JVM中。

大多数时候,我们不需要知道任何有关于他们如何工作的(甚至是他们存在哪里)内容但是每一个Java类都是通过ClassLoader加载的。他的工作是通过java.lang.Class将它变成一个字节码。

大多数情况下,客户端应用程序(如作为ODI代理)不需要担心ClassLoader:它们将建立一个classpath并且它将是一个工程。

该贴被masy编辑于2011-12-26 13:16:38



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论