【问题标题】:Incremental extraction from DB2从 DB2 增量提取
【发布时间】:2014-04-09 08:26:26
【问题描述】:

从 DB2 表中仅选择自上次选择(或某个指定时间)以来插入/更新的行的最有效方法是什么?表中没有任何字段可以让我们轻松地做到这一点。 我们从表中提取数据以进行报告,现在我们每次都必须提取整个表,这会导致很大的性能问题。 我找到了有关如何仅选择最后一天更改的行的示例:

SELECT * FROM ORDERS 
  WHERE ROW CHANGE TIMESTAMP FOR ORDERS > 
    CURRENT TIMESTAMP - 24 HOURS;

但是,我不确定这样做的效率如何,因为这张桌子很大。 是否有其他方法可以仅选择已更改的行,这可能更有效?

我还找到了名为 ParStream 的解决方案。这似乎可以加快对数据的苛刻查询,但我找不到任何有用的文档。

【问题讨论】:

  • 要使用该方法,您需要在表中包含一个包含 ROW CHANGE TIMESTAMP 的列。请注意,应该能够轻松添加这样的列,因为默认情况下隐藏了 ROW CHANGE TIMESTAMP 列。 select * from tbl 不会返回它。请参阅信息中心中的 CREATE TABLE 语法。

标签: sql db2


【解决方案1】:

我建议以下选项:

  • 您可以使用更改数据捕获,这将自动重播对另一个数据源的修改。
  • 通常,select 语句不能保证行的顺序。这意味着您不能使用没有时间参考的选择来检索最新的。因此,您必须有一个时间列才能检索最新的。您可以跟踪全局变量中的最新行,并在下次检索时间大于该变量的行。如果要提高性能,可以将表置于追加模式,这样新行将物理上在一起。在此时间列上保留索引可能维护成本很高,但当您需要提取行时它会加快速度(无表扫描)。

【讨论】:

  • 谢谢!我不知道变更数据捕获功能。
【解决方案2】:

如果您的服务器是DB2 for i,请使用数据库日志。您可以从日记接收器中按时间段或日记条目编号提取插入记录的图像。然后可以将数据条目复制到您的目标文件中。

【讨论】:

    猜你喜欢
    • 2020-04-05
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-26
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多