从SQL Server查询Oracle数据库

时间:2012-07-03 11:15:12

标签: sql-server oracle oledb openquery tnsnames

我有一个Oracle 11g XE数据库,我想将其转移到SQL Server Express 2005中。

起初我以为我只是在Oracle中生成表作为SQL,操作数据格式,并在SQL Server中运行查询。这适用于小型表,但我有几个表有几十万行,有些表有几百万行,所以这个解决方案不起作用。

然后我创建了一个包含以下内容的TNS文件:

OracleTnsName = 
(
  DESCRIPTION=
  (
    ADDRESS = (PROTOCOL=TCP)(HOST=localhost)(PORT=1521)
  )
  (
    CONNECT_DATA = (SERVICE_NAME=XE)
  )
)

我按照我在别处找到的关于如何生成ODBC连接的说明,并且'测试连接'成功了。

然后我运行这些命令在MS SQL中创建链接服务器:

EXEC sp_addlinkedserver 
     @server            = 'OracleLinkServer'
    ,@srvproduct        = 'OracleTnsName'
    ,@provider          = 'MSDASQL'
    ,@datasrc           = 'OracleTnsName'

EXEC sp_addlinkedsrvlogin 
     @rmtsrvname        = 'OracleLinkServer'
    ,@useself           = 'False'
    ,@locallogin        = NULL
    ,@rmtuser           = 'user'
    ,@rmtpassword       = 'password'

现在我正在尝试使用openquery从SQL Server查询Oracle数据库中的表:

select * from openquery(OracleLinkServer, 'select * from oracleTable')

但是得到一个错误:

  

Msg 7399,Level 16,State 1,Line 1
  OLE DB提供程序“MSDASQL”   链接服务器“OracleLinkServer”报告错误。提供者做了   不提供有关错误的任何信息   消息7303,级别16,状态1,行1   无法初始化OLE DB提供程序的数据源对象   链接服务器“OracleLinkServer”的“MSDASQL”。

当我检查链接服务器的属性时,只需单击确定,我就会收到此错误:

TITLE:Microsoft SQL Server Management Studio Express

“链接服务器已更新但连接测试失败。是否要编辑链接服务器属性?”


其他信息:

执行Transact-SQL语句或批处理时发生异常。 (Microsoft.SqlServer.Express.ConnectionInfo)


链接服务器“OracleLinkServer”的OLE DB提供程序“MSDASQL”报告错误。提供商未提供有关错误的任何信息。 无法为链接服务器“OracleLinkServer”初始化OLE DB提供程序“MSDASQL”的数据源对象。 (Microsoft SQL Server,错误:7399)

如需帮助,请点击:http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.5000&EvtSrc=MSSQLServer&EvtID=7399&LinkId=20476


按钮:

&安培;是

&安培;否

请帮忙!

由于

3 个答案:

答案 0 :(得分:1)

如果您已成功添加链接服务器,则不再需要OPENQUERY。您可以只包含链接服务器名称作为限定名称的第一部分,如下所示:

SELECT * FROM OracleLinkServer.database.schema.table

不确定您需要哪些部件,但点是关键。先试试这个:

SELECT * FROM OracleLinkServer...oracleTable

答案 1 :(得分:0)

select * 
from [server]..[xxx].[yyyyy] 

它对我有用。

答案 2 :(得分:0)

更改

,@provider = 'MSDASQL'

,@provider = 'MSDAORA'