在 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
报告的所有队列大小都达到了0
,trg_send_stxn
中仍然有相同的 418 个条目
已编辑问题以包含建议查询的输出
主机 A 上的 oncheck -cS
返回 1 行,而主机 B 上的 oncheck -cS
返回大约 4000 行,即使 cdr list repl
报告的没有数据排队
有没有办法可以删除这些行或删除损坏的 blob 或其他任何内容?以上是关于在 Informix 10 中检索或删除带有 blob 的行的主要内容,如果未能解决你的问题,请参考以下文章
使用 BIDS 从带有参数的 Informix ODBC 源中提取数据
如何从 Informix 中的 syscolumns 检索“Is Null Allowed”属性?
Java 多线程:Informix 12.10 - 无法执行物理顺序读取以获取下一行