【发布时间】:2016-09-22 19:27:49
【问题描述】:
我有一个 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')
但是得到一个错误:
消息 7399,第 16 层,状态 1,第 1 行
OLE DB 提供程序“MSDASQL”用于 链接服务器“OracleLinkServer”报告错误。提供者做了 不提供有关错误的任何信息。
消息 7303,第 16 级,状态 1,第 1 行
无法初始化 OLE DB 提供程序的数据源对象 链接服务器“OracleLinkServer”的“MSDASQL”。
当我检查链接服务器的属性,然后单击“确定”时,我收到此错误:
标题:Microsoft SQL Server Management Studio Express
“链接服务器已更新,但连接测试失败。您要编辑链接服务器属性吗?”
附加信息:
执行 Transact-SQL 语句或批处理时发生异常。 (Microsoft.SqlServer.Express.ConnectionInfo)
链接服务器“OracleLinkServer”的 OLE DB 提供程序“MSDASQL”报告错误。提供商没有提供有关该错误的任何信息。 无法为链接服务器“OracleLinkServer”初始化 OLE DB 提供程序“MSDASQL”的数据源对象。 (Microsoft SQL Server,错误:7399)
按钮:
&是
&否
请帮忙!
谢谢
【问题讨论】:
-
欢迎使用 StackOverflow:如果您发布代码、XML 或数据示例,请在文本编辑器中突出显示这些行并单击“代码示例”按钮 (
{ }) 在编辑器工具栏上很好地格式化和语法突出显示它! -
驱动和 SQL Server 的位数是多少?如果您只安装了一个 32 位驱动程序并且您正在运行一个 64 位 SQL Server,那就可以解释它了。
-
您确认您在 SQL Server 上安装了 Oracle 客户端和 TNS 文件?然后,您需要使用
TNSPING和SQLPLUS等Oracle 工具测试Oracle 客户端。然后,您需要确认位数匹配。我建议不要将 Oracle 数据导出为平面文件,而是将其复制并以这种方式导入,因为 Oracle 驱动程序可能非常不友好 -
如果您只选择一个列而不是
*,会发生什么? (最好是像整数这样简单的东西)或者用WHERE子句挑选一个特定的行?有时,列中的错误数据会导致链接服务器代码阻塞——我特别看到了超出 SQL Server 有效日期范围的 Oracle 日期。
标签: sql-server oracle oledb openquery tnsnames