【发布时间】:2012-11-14 23:19:41
【问题描述】:
我正在使用从远程数据库(remotedb、Oracle)提取的数据填充本地数据库(localdb、SQL Server)中的表。
远程数据库跨越互联网,当然,本地数据库在我的数据库服务器本地。
我需要从 remotedb 中提取数据,而为了从 remotedb 中提取数据,我只需要从特定键值(例如 remotedb 上的表上的 user_id 字段)中提取数据。
键集很大,大约。 10,000。
哦,顺便说一句,remotedb 是只读访问权限,我无权访问 imp/exp 或批处理之类的东西,也无权访问服务器(它与外部供应商合作)。
目前,我正在使用这样的查询:
SELECT
<my data>
FROM
<remotedb>.<remote_table> join <remotedb>.<remote_table> ...
WHERE
<remotedb>.<remote_table>.<remote_field> in
( <select that returns my 20,000 IDs> )
这对我来说似乎是一个蛮力解决方案,但我想不出任何其他方法。
有人解决了这个问题吗?
【问题讨论】:
-
这似乎是一种合理的方法。有什么明显的问题吗?例如,优化器是否选择了错误的驱动站点,强制从远程数据库获取太多数据以在本地进行连接,而不是简单地将 20,000 个 ID 发送到远程数据库并让远程数据库进行连接?此外,您已经为 SQL Server 和 Oracle 标记了这个——您使用的是哪个数据库?
-
是否可以将您的密钥发送到 remotedb 上的程序?
-
@Justin - 我已经更新了问题,远程是 oracle,本地是 sql server。
-
@bummi 我想以某种方式将 20k ID 值传送到存储的过程中,但另一方面我没有任何过程,也没有创建过程的能力。另外,我不确定这会有什么不同?
-
@Justing 所有的连接都是带有 remotedb 表的 remotedb 表,所以我希望连接发生在 oracle 端。你认为我应该在 sql server 端把它拆下来看看优化器在做什么吗?我想我只是希望它在尝试做任何事情之前将查询“隧道”到 oracle。你怎么看?
标签: sql-server database oracle