适用于:
Oracle Data Integrator - Version: 3.2.03.01 and later [Release: 3.2.03 and later ]
此文档的信息内容适用于任何平台。
Goal
建立JDBC连接到Microsoft SQL Server数据库并且不会出现任何已知的兼容性问题什么做法是最佳的在?
在个别情况,当试图使用如下的Microsoft JDBC Driver的URL连接Microsoft SQL Server(2000/2005)时:
jdbc:microsoft:sqlserver://myHost:1433
可能会显示如下的错误信息:
connection failed
java.lang.Exception: com.sunopsis.sql.e: com.microsoft.jdbc.sqlserver.SQLServerDriver
at com.sunopsis.graphical.b.gr.a(gr.java)
java.sql.SQLException [MS SQL Server 2000 JDBC Driver] Can't start cloned connection while in manual transaction mode.
[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 1 (""): Data type 0x38 is unknown.
请参考注意事项:424428.1是经常显示的错误信息。
解决方案
参考如下的Microsoft SQL Server JDBC驱动程序版本对应的.jar文件
SQL Server JDBC driver version
| JDBC driver files
|
Microsoft SQL Server 2000 JDBC Driver
| msutil.jar
mssqlserver.jar
msbase.jar
|
Microsoft SQL Server 2005 JDBC Driver 1.0
Microsoft SQL Server 2005 JDBC Driver 1.1
Microsoft SQL Server 2005 JDBC Driver 1.2
Microsoft SQL Server JDBC Driver 2.0
Microsoft SQL Server JDBC Driver 3.0
and more recent
| sqljdbc.jar (or sqljdbc4.jar, if the version of Java is 1.6 or higher)
|
必须将对应版本的JDBC驱动程序.jar文件复制到Oracle数据集成器(ODI)��”drivers”目录下。
Microsoft JDBC驱动程序版本和JVM之间的兼容性参考如下:
注意807235.1对于Java虚拟机和与ODI使用的JDBC驱动程序的兼容性在Microsoft SQL Server JDBC驱动程序的Java类。
SQL Server JDBC driver version
| Java class
|
Microsoft SQL Server 2000 JDBC Driver
| com.microsoft.jdbc.sqlserver.SQLServerDriver
|
Microsoft SQL Server 2005 JDBC Driver 1.0
Microsoft SQL Server 2005 JDBC Driver 1.1
Microsoft SQL Server 2005 JDBC Driver 1.2
Microsoft SQL Server JDBC Driver 2.0
Microsoft SQL Server JDBC Driver 3.0
and more recent
| com.microsoft.sqlserver.jdbc.SQLServerDriver
|
在Microsoft SQL Server JDBC驱动程序连接的URL
SQL Server JDBC driver version
| Connection URL
|
Microsoft SQL Server 2000 JDBC Driver
| jdbc:microsoft:sqlserver://serverName\instance:port;property=value[;property=value]
Examples:
jdbc:microsoft:sqlserver://myHost:1433;selectMethod=cursor
jdbc:microsoft:sqlserver://myHost:1433;selectMethod=cursor;databaseName=myDB
|
Microsoft SQL Server 2005 JDBC Driver 1.0
Microsoft SQL Server 2005 JDBC Driver 1.1
Microsoft SQL Server 2005 JDBC Driver 1.2
Microsoft SQL Server JDBC Driver 2.0
Microsoft SQL Server JDBC Driver 3.0
and more recent
| jdbc:sqlserver://serverName\instance:port;property=value[;property=value]
Examples:
jdbc:sqlserver://myHost:1433;selectMethod=cursor
jdbc:sqlserver://myHost:1433;selectMethod=cursor;databaseName=myDB
jdbc:sqlserver://myHost:1433;selectMethod=cursor;databaseName=myDB;responseBuffering=adaptive
|
Setting Up
1. 检查并确保你的Microsoft SQL Server服务器的身份验证模式的设置”SQL Server and Windows”或者是”Mixed”.否则Oracle数据集成器(ODI)是无法连接到数据库的。
2. 创建Oracle数据集成器(ODI)数据服务器到拓扑管理器>物理架构之前,请停止所有的ODI进程,并且将JDBC驱动程序文件放入到ODI的”/drivers”文件夹下。
3. 确保该数据库是由ODI分配给用户账户的默认数据库连接,并且密码也是正确的。
4. 使用如下的例子,验证(在你的Microsoft SQL Server网络配置中)1433端口在TCP/IP下是有效的
在下面的表中说明Microsoft JDBC 驱动程序版本和Microsoft SQL Server数据库版本之间的兼容性:
Yes
SQL Server JDBC driver version
| SQL Server 2000
| SQL Server 2005
| SQL Server 2008
| SQL Server 2008R2
|
Microsoft SQL Server 2000 JDBC Driver
| Yes
| No
| No
| No
|
Microsoft SQL Server 2005 JDBC Driver 1.0
Microsoft SQL Server 2005 JDBC Driver 1.1
Microsoft SQL Server 2005 JDBC Driver 1.2
| Yes
| Yes
| No
| No
|
Microsoft SQL Server JDBC Driver 2.0
| Yes
| Yes
| Yes
| No
|
Microsoft SQL Server JDBC Driver 3.0 (and more recent)
| Yes
| Yes
| Yes
| Yes
|
可以使用如下的链接下载更高版本的Microsoft SQL Server JDBC驱动程序:
http://msdn.microsoft.com/en-us/data/aa937724.aspx
Concerning the:
Microsoft SQL Server 2005 JDBC Driver, and
Microsoft SQL Server JDBC Driver:
5. 在Microsoft SQL Server 2005 JDBC驱动程序在Java1.3.1不兼容在java1.4.1也不兼容。
以下的错误信息是由于缺少”java.util.logging.Logger”类造成的(在java1.4.2之后开始实现此类)
java.lang.NoClassDefFoundError
当使用一个Oracle数据集成器(ODI)代理,执行之后将会出现如下的错误信息:
com.sunopsis.sql.SnpsConnectionTimeoutException: Sunopsis TimeOut
6. 在使用”selectMethod=cursor”属性只能在JDBC驱动程序1.1版本之后开始。
对于早期版本,可能会出现如下的错误信息:
sp_cursoropen/sp_cursorprepare:这个语句参数只能是一个批处理语句或者单一地选择一个查询存储过程,没有浏览,COMPUTE BY,或者变量赋值。
根据如下:
http://blogs.msdn.com/angelsb/archive/2006/08/22/713417.aspx
这是由于Microsoft SQL Server 2005 JDBC驱动程序的#436718 bug造成,出现在1.1的驱动版本。
7. 在JDBC驱动程序1.2版本开始,除了”selectMethod=cursor”之外使用“responseBuffering=adaptive”可能有助于减少如下情况:
o对内存数的占用
o需要花费时间来执行一个简单的SELECT语句。
See:
http://blogs.msdn.com/jdbcteam/rss.xml(此链接说明了什么是适应性反应缓冲和我为什么要使用它?)
8.如果ODI套件是在Microsoft SQL Server 2005 或者2008内部:
a)在ODI拓扑管理做等效的Microsoft SQL Server数据服务器连接测试成功,但是
b)当在拓扑或者设计器的”login”窗口点击OK,连接没有响应,然后核查Microsoft SQL Server的管理配置的命名管道��否禁用。
启用命名管道后,连接将开始正常工作。
该贴被masy编辑于2011-12-26 12:13:26