在ODI11.1.1.5.0中创建了Microsoft Sql Server的服务器,
JDBC驱动程序名称选择了Microsoft SQL Server 2005 Driver for JDBC (com.microsoft.sqlserver.jdbc.SQLServerDriver)
所有参数配置妥当,进行测试时,系统报错:
oracle.odi.core.exception.OdiRuntimeException: java.lang.IllegalArgumentException: Could not load JDBC driver class [com.microsoft.jdbc.sqlserver.SQLServerDriver]
at oracle.odi.core.datasource.provider.AbstractDataSourceProvider.configure(Unknown Source)
at oracle.odi.core.datasource.support.DefaultDataSourceManager.createAndConfigureDataSourceProvider(Unknown Source)
at oracle.odi.core.datasource.support.DefaultDataSourceManager$1.create(Unknown Source)
查看资料,发现在ODI11g中有两处地方是可以放置驱动文件的:<WINDOWS_USER_HOME>\AppData\Roaming\odi\oracledi\userlib和<ODI_HOME>/agent/oracledi/drivers 。
两个文件夹的放置意图是不同的,对于ODI的服务器端,可将驱动放在<ODI_HOME>\agent\drivers下,当进行数据库连接时,自动会调用服务器端的驱动,而用于连服务器的客户端,由于它们是没有<ODI_HOME>\oracledi\agent\目录的,因此在连接时即需要将驱动放在:<WINDOWS_USER_HOME>\AppData\Roaming\odi\oracledi\userlib,用本地代理进行连接。例如,在对Ms SqlServer的模型进行反向时,如果使用本地代理,也会报找不到驱动的错,将该驱动添加到userlib目录下,即可解决问题。比较好奇的是,为何Oracle的数据库反向却没有这样的报错,并且该目录下也没有对应的驱动。