在 Informix 10 中检索或删除带有 blob 的行

Posted

技术标签:

【中文标题】在 Informix 10 中检索或删除带有 blob 的行【英文标题】:Retrieving or deleting a row with a blob in Informix 10 【发布时间】:2022-01-09 11:36:42 【问题描述】:

我正在使用 Informix 10。按照the documentation 的建议使用此命令(嗯 - 我能找到的最接近的文档):

select lotofile(ctbufdata, "foo!", "client") from trg_send_stxn where ctstamp1=60004300

(到数据库syscdr),它给出了错误:

7420: Argument (1: lo_id) is invalid.

如果我尝试unload to filename select * from...会出现同样的错误...

如果我尝试删除带有 delete from trg_send_stxn where... 的行,错误是:

(U00001) - blob_destroy: error during processing or invalid LO argument

如何查看此 blob? (我想查看它的内容以找出它的来源)。

或者;我怎样才能删除它或以其他方式从这种明显的损坏中恢复。


正如答案中所建议的——命令

select ("0x" || substr(ctbufdata::lvarchar,17,8))::INT sbspace
from trg_send_stxn
where ctstamp1=60004300

产生结果0。删除 where 子句会产生 418 行,全部为 0

【问题讨论】:

【参考方案1】:

由于 trg_send_stxn 是一个 ER 队列表,我们可以假设这与您的其他 ER 相关问题 (Informix 10 replication queues not moving) 有关吗?如果是这样,这是在服务器 A 还是 B 上 - 我怀疑 B,因为此表与发送队列相关,并且您正在从 B 向 A 报告问题?

无论如何,这听起来像是某种数据损坏,无论是在 trg_send_stxn 表的行中(我的猜测),还是在该行(ctbufdata 列)指向的实际 sblob 元数据中,即在 sbspace 中。

尝试使用here 描述的技术选择该行并显示 LO 指针(在此处共享输出)。

【讨论】:

是的,它是相关的。我刚刚尝试删除所有复制者并重新创建,同样的问题;有趣的是,即使cdr list repl 报告的所有队列大小都达到了0trg_send_stxn 中仍然有相同的 418 个条目 已编辑问题以包含建议查询的输出 主机 A 上的 oncheck -cS 返回 1 行,而主机 B 上的 oncheck -cS 返回大约 4000 行,即使 cdr list repl 报告的没有数据排队 有没有办法可以删除这些行或删除损坏的 blob 或其他任何内容?

以上是关于在 Informix 10 中检索或删除带有 blob 的行的主要内容,如果未能解决你的问题,请参考以下文章

使用 BIDS 从带有参数的 Informix ODBC 源中提取数据

在 laravel 5.4 中检索软删除的用户帖子

如何从 Informix 中的 syscolumns 检索“Is Null Allowed”属性?

Java 多线程:Informix 12.10 - 无法执行物理顺序读取以获取下一行

informix 14.10 如何“选择”返回一个特定的短语,如无或空白,而不是没有结果

在 informix 中捕获错误