AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 72687
Accepted
n8.
n8.
Asked: 2014-07-30 10:06:34 +0800 CST2014-07-30 10:06:34 +0800 CST 2014-07-30 10:06:34 +0800 CST

通过 VPN 从 Oracle 到 SQL Server 数据库执行增量/差异

  • 772

我继承了一个非常像 Rube Goldberg 设备的报告结构。我有一组 MS Access 2003 数据库,我已经开始迁移到 SQL Server。我目前的挂断是我们有一个 VPN/ODBC 连接到属于外部实体的 Oracle 数据库,而这个托管服务的服务器在 2000 多英里之外。虽然 Access“解决方案”确实“有效”,但速度极慢,而且任何类型的开发都是困难且耗时的。

我们决定在我们的本地站点为所有报告和分析服务创建一个镜像数据库,并且我们能够使用 Microsoft 的 Oracle 迁移工具将大部分数据传输到我们本地的“镜像”数据库。不幸的是,这个工具似乎没有提供执行增量的功能。

我已经能够使用 MS Access 和 Flyspeed SQL Query 等应用程序查询远程数据库,但它们有其局限性。例如,Access 2003 在将数据推送到本地 SQL 数据库时遇到很多问题。它可以处理非常小的数据集,但超过几千行就会卡住。Flyspeed 可以看到所有的数据集,但我出于某种原因无法执行“INSERT INTO”查询,而且很容易超时。它还缺乏根据我可以收集的内容安排查询的能力,而且我看不到它可以编写脚本。

有没有一种方法可以通过 VPN / ODBC 约束以及 SQL Server / Oracle 差异来执行增量?

谢谢,

内特

sql-server oracle
  • 1 1 个回答
  • 602 Views

1 个回答

  • Voted
  1. Best Answer
    David Spillett
    2014-07-31T01:06:40+08:002014-07-31T01:06:40+08:00

    在将数据导入 SQL Server 数据库方面,您可以通过“链接服务器”功能直接使用该 ODBC 连接(请参阅http://msdn.microsoft.com/en-us/library/ms188279.aspx)-这将允许您将数据直接从删除的 Oracle 实例向下传输到本地 SQL Server,其中的语句就像INSERT <localtable> SELECT <stuff> FROM <server>.<database>.<schema>.<table> WHERE <condition>. 我用它从本地和远程数据库(通过 VPN 或其他隧道)提取数据,发现只要站点之间的连接可靠,它就是可靠的。值得确保您的 VPN 或 ODBC 设置正在执行流压缩:这会稍微增加延迟,但会大大缩短传输时间,因为您的数据很可能是完全可压缩的。

    仅拉下更改将在很大程度上取决于数据库设计。

    最好的情况是,如果所有内容都经过审核,那么您可以轻松地知道自上次选择更改以来发生了哪些更新:检查当前的“上次审核的操作”,下拉在该操作和上次记录的操作之间添加/更改的行时间,将这些行合并到您的本地表中,然后记录下一次审计的最后一次操作的 ID/时间戳。在开始时只检查一次审计 ID/标记而不是对每个表检查一次的原因是为了帮助保持一致性:您最后传输的表中的最新数据不会比您首先检查的表中的数据更多。当然可以使用任何其他审计/历史记录格式(包含“最后修改日期”等的记录)。

    如果数据没有像这样明显的审计结构,那么事情会变得更加复杂——比较两个站点之间大表中的数据不会非常有效。您可以通过从每个表中提取主键列和所有其他列的散列来减少传输的数据量,将散列与本地生成的散列进行比较,然后请求不在本地查看的行。你仍然会为每个人转移一些东西行在这里(对于一个 UUID PK 和一个 36 字节/行的 SHA1 散列加上任何填充,如果以二进制形式传输,它不太可能被轻易压缩,所以 VPN 可以通过这种方式加速它)并且如果表包含平均比散列的长度更细的行你应该转移很多,因为你最终会加倍(或更糟)初始散列的转移。

    您可能会发现,如果您的某些数据经过审计而某些数据未经过审计,您可能会发现必须混合使用多种技术(来自审计的更新、无审计的宽表的校验和、无审计的薄表的简单完整传输)。

    您可能可以考虑的另一种选择(尽管它需要另一端的合作才能实施,并且可能会产生成本影响,因为您需要本地 Oracle 许可证)是使用 Oracle 的等效 SQL Server 日志传送方法来保留副本在本地 Oracle 实例上保持最新(如果这是一个明确的要求,而不仅仅是为了方便,则将数据从那里移动到 SQL Server 或 Access,因为这是您已经在本地安装的)。这不太可能对你来说是额外的,因为它可能会干扰数据库的主要备份策略,但如果日志传送等效(或差异备份)已经用于数据库的备份计划,那么也许你可以“小猪”背部” 通过将日志或差异备份以及备份基础架构发送给您来进行安排。通过这种方式,DBMS 只处理向您推送更改(如果在给定日志段所涵盖的时间内多次更新相同的行,则可能会比其他方法推送更多,因为您将获得每个更改的日志以重播而不是只是最后的结果)。

    您对上述任何一项所做的实质上是模拟复制,因此如果您对基础设施有任何发言权或复制已经在使用中,那么使用它也可能是一种选择。

    • 1

相关问题

  • ORDER BY 使用文本列的自定义优先级

  • 舒服的sqlplus界面?[关闭]

  • 如何在数据库中找到最新的 SQL 语句?

  • 如何使用正则表达式查询名称?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve