尝试使用MS SQL 2005上的链接服务器从Oracle导入大数据

时间:2014-11-17 15:20:02

标签: sql sql-server oracle sql-server-2005 linked-server

我正在尝试使用MS SQL 2005上的链接服务器从Oracle数据库导入大量数据。 这是OPENQUERY命令。

SELECT * from OPENQUERY(HRDEV9, 
        'SELECT EMPLOYEE_ID
          ,EMPLOYEE_NAME
          ,TO_CHAR(BIRTHDATE,''yyyy-mm-dd'') AS BIRTHDATE
        FROM SYSADM.PS_EMPLOYEES')

为了保持我的示例简单,我没有包含所有列,我有大约180列和75000行要导入。

这是我执行查询时遇到的错误:

  

返回链接服务器“HRDEV9”的OLE DB提供程序“OraOLEDB.Oracle”   消息“没有足够的存储空间来完成此操作。”。

     

Msg 7399,Level 16,State 1,Line 1 OLE DB提供程序   链接服务器“HRDEV9”的“OraOLEDB.Oracle”报告错误。该   提供商内存不足。

     

Msg 7372,Level 16,State 4,Line 1不能   从OLE DB提供程序“OraOLEDB.Oracle”获取属性以进行链接   服务器“HRDEV9”。

我启用了自动增长功能,并为数据和日志文件设置了无限制的文件增长。

我尝试使用Oracle ROWNUM仅导入10行但仍然遇到相同的错误。

感谢您的时间。

2 个答案:

答案 0 :(得分:0)

尝试将数据从Oracle导入CSV,然后将其加载到MS SQL中。 很抱歉将您指向我的博客,但here is how to get data fast from Oracle.

答案 1 :(得分:0)

我发布此信息是为了帮助其他人解决同样的问题。

显然这是Microsoft确认的错误。如果链接表包含NUMERIC类型的列,则会出现错误消息。 解决方法是重新创建链接服务器以使用Microsoft OLE DB Provider for ODBC(MSDASQL)。

以下两种方法可以解决此问题:

使用Microsoft提供的ORACLE ODBC驱动程序:

EXEC sp_addlinkedserver @server = 'ORACLEODBC', @srvproduct = 'MSDASQL', @provider = 'MSDASQL',
 @provstr = 'DRIVER={Microsoft ODBC for Oracle};SERVER=MyOracleServer;UID=USERNAME;PWD=Password;'
go

sp_addlinkedsrvlogin 'ORACLEODBC', false, NULL, 'USERNAME', 'Password'

<强> -OR -

使用ORACLE提供的ORACLE ODBC驱动程序:

EXEC sp_addlinkedserver @server = 'ORACLEODBC', @srvproduct = 'MSDASQL', @provider = 'MSDASQL',
 @provstr = 'DRIVER={ORACLE ODBC DRIVER};SERVER=MyOracleServer;UID=USERNAME;PWD=Password;DBQ=ORACLE805;' 
go

sp_addlinkedsrvlogin 'ORACLEODBC', false, NULL, 'USERNAME', 'Password'

希望这有帮助。