【问题标题】:How to manually corrupt the Oracle CLOB data如何手动破坏 Oracle CLOB 数据
【发布时间】:2020-12-03 03:51:08
【问题描述】:

我想知道是否有任何方法可以手动破坏 CLOB 数据以进行测试。

我可以找到steps for intensional block corruption,但找不到表中单个数据的任何内容。谁能帮我解决这个问题?

以下是我正在尝试做的事情,我需要第 1 步的帮助:

  1. 准备损坏的 CLOB 数据
  2. 运行 expdb 得到 ORA-01555 错误
  3. 测试我的故障排除过程是否正常



一些背景:

  • 数据库:Oracle 12.2.0.1 SE2

  • 操作系统:Windows Server 2016

  • 当某种类型的数据插入表中时,我们使用的应用程序(来自第 3 方)似乎偶尔会损坏 CLOB 数据。我们不知道是什么触发了它。损坏不会影响应用程序的功能,但不修复它会在运行 expdb 进行日常备份时出现以下错误:

    ORA-01555: snapshot too old: rollback segment number

  • CLOB 由字母数字字符和换行符组成。它由应用程序插入,无需手动插入

  • 修复/更换应用程序不是一种选择,因此我们有一个修复程序。

  • 我从另一位工程师(已经离开)那里接手了这个,但从那时起,该应用程序就可以正常运行,到目前为止还没有出现任何问题。我想在 DEV 环境中测试运行修复程序,但应用程序没有为我重现问题。

  • 所以我想我是否可以手动准备“损坏”的 CLOB 用于测试目的

【问题讨论】:

    标签: oracle oracle12c clob corruption


    【解决方案1】:

    所以这看起来是由一个已知​​的错误引起的:

    这里的要点是,损坏不是由数据中的任何固有内容引起的,而更有可能是由多个更新(应用程序或最终用户行为)并发访问 LOB 或仅由显然是随机的机会。因此,我怀疑您是否有任何方法可以轻松地强制执行此条件以验证您的测试。

    【讨论】:

    • pmdba,感谢您的意见和建议。是的,首先要检查的是您提到的 UNDO tblspace,但是在某些情况下,损坏的 CLOB 是 ORA-01555 (link) 的原因,我认为我面临同样的问题。在检测到 CLOB 损坏并删除损坏的记录后,Expdb 工作正常。所以我想准备一些损坏的 CLOB 数据,以自己测试检测和恢复步骤......任何建议表示赞赏。谢谢。
    • 几点补充:(1)应用程序(Tomcat服务)在运行expdb时停止,因此没有事务发生,(2)修改UNDO_RETENTION参数(类似于7200秒)并扩展UNDO 表空间没有解决问题
    • @alt130 我不认为“损坏”是正确的术语。 LOB 的一个困难是它们的撤消信息可以存储在 LOB 本身内,并且除了系统设置之外,还可能需要调整 LOB 设置。我不记得所有细节,但我认为您需要查找 SecureFiles 与 BasicFiles、PCTVERSION 以及其他设置。
    • 通读参考的 Oracle 支持文档,“损坏”实际上是正确的术语。看起来这是由自 Oracle 9 以来以一种或另一种形式存在的已知错误引起的。数据本身不是问题;看起来它更多地与并发更新或 LOB 表空间中的自动段管理有关。有一些迹象表明,切换到 SecureFiles 可能会提供一些保护,但不能保证。
    • Jon,pmdba,感谢您的 cmets,抱歉回复晚了。我想故意弄乱 CLOB 本身很难,可能不得不放弃我想做的事情。但是,SecureFiles vs BasicFiles 和其他设置是新的见解,如果我可以避免发生问题,我会查找它们并检查设置(实际上这将是最好的解决方案)。再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多