怎样从SSIS (64位)连接上远方的oracle 10g数据?

0
系统是windows Server 2008R2 SP1,
数据库是SQL Server 2012
安装了oracle11g, oracle 10g 64位客户端和 oracle 32位客户端。tnsname也都配置好。但是,在SSIS中新建连接到远方的oracle 10 g 数据库,不通。

现象1:
如果用Native OLE DB\Oracle Provider for OLE DB, 测试连接出错为 ORA-12154

现象2:
如果用Native OLE DB\Microsoft OLE DB Provider for Oracle,测试连接报错为 ORA-06413

求高手指点
已邀请:
1

yabei - 大数据时代,谁也离不开BI 2013-11-30 回答

感谢楼上各位的热情回答。经过各种折腾,终于解决了这个问题。参考了各论坛的方案,解决办法如下:

1.格式化电脑,重装操作系统和SQL Server 2012。因为看到有一种说法是64位的SQL Server安装的路径中有program file (X86),这个括号影响oracle客户端工作。在未重做系统前,卸载重装不能改变这个安装路径,可能是卸不干净的问题。重装的时候指定了文件路径和共享路径为c:\sqlserver,但是在运行时,发现visual studio2010的实际路径仍在program file (X86)下。

  1. 安装oracle 10g 32位客户端,再安装oracle10g 64位客户端,有顺序要求。在安装前要修改一下文件,否则系统报错,装不上。
~ 编辑安装包内文件 database/stage/prereq/db/refhost.xml
增加下面节点
<OPERATING_SYSTEM>
<VERSION VALUE="6.1"/>
</OPERATING_SYSTEM>
~ 编辑安装包内文件 database/install/oraparam.ini
找到小节 在下面的第二行中增加windows版本6.1,如下面所示
Windows=4.0,5.0,5.1,5.2,6.1

至此,在net manager中建立和oracle的连接,测试是连通的,但是在SSIS中连不上。

3.安装oralce 11g 32位,然后安装oracle 11g64位。安装完成后,修改注册表。
(1) For both 32-bit and 64-bit installations, open up REGEDIT and make the following registry changes:

HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC\MTxOCI

OracleOciLib contains the value oci.dll

OracleSqlLib contains the value orasql11.dll (old value is SQLLib80.dll)

OracleXaLib contains the value oraclient11.dll (old value is xa80.dll)

(2) For 64-bit installations only:

HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\MSDTC\MTxOCI

OracleOciLib contains the value oci.dll

OracleSqlLib contains the value orasql11.dll (old value is SQLLib80.dll)

OracleXaLib contains the value oraclient11.dll (old value is xa80.dll)

(3) You must reboot your server for the changes to apply. Reboot your server.

参考文章 http://social.msdn.microsoft.c ... -2012

然后把在oracle 10g下的TNSNAME文件拷贝到各个版本的客户端下。
在SSIS project name上右键选属性,在debuging下,把运行64位改成false。

最后,抱着如果不成功,就把电脑砸了的心情,在SSIS中测试连接到oracle数据库,成功了!
0

梁勇 - 天道酬勤、上善若水。爱好商业智能 2013-11-22 回答

就用第二个 Native OLE DB\Microsoft OLE DB Provider for Oracle 这个驱动,你首先用PL/SQL 或者SQLPLUS登陆下看是否可以登录上,确认下连接是否正常,然后在到 SSIS里面操作。
0

yabei - 大数据时代,谁也离不开BI 2013-11-22 回答

感谢梁勇大师答复。用sql plus是可以连上的。
但是在SSIS中就报错。我把tnsname.ora文件拷贝到client\network\admin下了,也不行
0

biee新手 - 新手求带 2013-11-22 回答

@yabei 你在SQLPLUS里面的登录截个图,看下。或者 你登录进去,新创建一个用户,并分配权限试试。创建用户: SQL> create user ts identified by ts;
分配权限: SQL>grant dba to ts;

然后在用 ts登录进去看看。还有根据 ORA-06413 这个错误编码,你是不是安装 Oracle在 (x86)这个目录下安装的,可能 SSIS解析不了这种特殊的字符。
0

liangf 2013-11-22 回答

把tnsname.ora内容贴出来看看
0

yabei - 大数据时代,谁也离不开BI 2013-11-22 回答

我查了一下,visaul studio装在program files(X86)下了,这个路径不让修改,怎么办?
0

yabei - 大数据时代,谁也离不开BI 2013-11-22 回答

# tnsnames.ora Network Configuration File: e:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

KJJC =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.67.27.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora815)
)
)

YQSJS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.67.27.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora815)
)
)

KJDZ =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.67.27.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora815)
)
)
0

yabei - 大数据时代,谁也离不开BI 2013-11-22 回答

这个TNSname应该没问题, 在其它系统下工作正常
0

梁勇 - 天道酬勤、上善若水。爱好商业智能 2013-11-22 回答

@yabei 看下 Oracle的安装目录,并且在本机看下这个是否可以登录,连接的方式是 Normal
1.jpg
0

liangf 2013-11-22 回答

你把给SID起的名字和SERVICE_NAME保持一致看看,我遇到过在有些环境这两个必须一致才行,
即:

ora815 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.67.27.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora815)
)
)
0

zhoutiea - 小小白沙 2013-11-29 回答

在ssis 服务器上和data tools开发工具上可以调成32位运行包
0

雁儿 - 成都IT 2014-04-23 回答

最后解决了没?怎么没有下文了,我也遇到了同样的问题,关注中。
0

梁勇 - 天道酬勤、上善若水。爱好商业智能 2014-04-23 回答

@雁儿 给赞的,一个就是解决方案,详细看下回复内容。。
0

梁勇 - 天道酬勤、上善若水。爱好商业智能 2014-05-28 回答

最近也遇到这个问题了。是微软的Bug,如果在一个64 位的SQL Server上想同时使用linked server和SSIS的BIDS去连oracle,必须要同时安装64 位和32位的oracle客户端。具体可以参考如下 Linked server和SSIS连接Oracle时的常见问题 http://blogs.msdn.com/b/apgcds ... .aspx 写的很详细

要回复问题请先登录注册