【问题标题】:How do I write my ETL to behave based on Oracle UNDO setting?如何编写我的 ETL 以根据 Oracle UNDO 设置运行?
【发布时间】:2012-11-29 22:34:01
【问题描述】:

我正在增强基于 Java 的 ETL 软件。这个工具在 Oralce 安装中的一个问题是,当 ETL 期间发生大量删除时,即使我使用较小的批处理大小进行中间提交,批处理也会耗尽 UNDO 空间。在我当前的生产场景中,存在 4GB 的硬限制。

所以,现在,比如说,我的程序尝试从父表中删除 10000 条记录,在每 1000 条记录和每次删除记录后提交,级联从 5 个子表中删除 100 万条记录,我每批次发生 1000x5x1000,000 次删除/犯罪。我希望我的软件比这更智能——我希望它能够计算出 Oracle UNDO 空间,估计将触发多少删除并相应地限制批量大小。我该怎么做呢?如何使用查询计算 UNDO 相关信息?

【问题讨论】:

  • 如果你正在做的事情使用了你所有的撤销,那么你真的应该增加它。我知道没有帮助,但 4GB 的硬限制似乎很小。我刚刚浏览了几个数据库,大小分别为 50GB、28GB、38GB、126GB 和 44GB。
  • 你得到什么错误? ORA-1555?
  • 也许截断是要走的路。

标签: java oracle etl undo database-administration


【解决方案1】:

4GB 不算什么。正确的做法是增加UNDO空间。

请注意,我们也不鼓励大量删除,而且值得研究消除这种情况的方法。

【讨论】:

  • 好吧..我不能完全控制有多少删除..这将取决于数据依赖性。 (比如说,你从 types 表中删除订单类型 A,你可能会消灭一百万个订单和订单商品,但删除类型 B,可能会消灭一千万个订单和订单商品)。
  • 如果这是您必须处理的那种情况,那么按订单类型进行分区并执行分区删除或截断可能是有效的。然而,删除订单似乎是一个奇怪的操作。
  • 不完全删除订单 - 这只是一个类比。但是,这更像是 DBA 的事情,不是吗?不在应用范围内?
  • 指定足够的撤消空间是双方的责任。你说你需要多少,DBA 检查请求是否合理并提供了那么多。不过 4gb 显然是不够的,如果您的 DBA 建议您提交大量提交以减少资源使用,那么他们就错了。
  • 如何计算我的 UNDO 空间需求?它是一个 ETL 工具,它只对父表进行删除。可能发生的删除次数取决于子表中符合条件的记录数。
猜你喜欢
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 2022-01-01
  • 1970-01-01
  • 2019-05-13
  • 2023-03-19
  • 2018-08-21
相关资源
最近更新 更多