如果您访问该表的尝试遇到错误号2652, Operation not allowed: %DBID.%TVMID is being Loaded
,这表示该表正在加载,或者之前加载该表的尝试失败并且尚未解决。
通过仔细规划,您可能能够利用获取和应用程序错误表的存在来确定是否存在 MultiLoad 锁或之前的 MultiLoad 是否以非零返回码完成了作业。采集错误表在BEGIN MLOAD
命令 ( et_tname1
) 中指定为第三个表,用于捕获采集阶段发生的错误。应用程序表在BEGIN MLOAD
命令 ( uv_tname1
) 中指定为第四个表,用于捕获应用程序阶段遇到的错误。
如果UV
表存在但不包含任何记录,则多加载可能在获取阶段失败。您可以通过检查“ET”表中是否存在行来确认这一点。在这种状态下,可以释放 MultiLoad 锁并删除错误表。这将允许访问表和/或重新启动加载步骤。
如果“UV”表存在且包含行,则 MultiLoad 可能在应用阶段失败。在这种状态下,不应释放 MultiLoad 锁,也不应删除错误表。您应该确定失败的原因并从失败点重新启动失败的作业。如果您释放 MultiLoad 锁和/或删除错误表,您最终可能会得到一个处于不一致状态的表。在这种状态下,可能必须从源文件或备份中删除、重新创建和重新加载表。
通常,除非表一开始是空的,否则最好解决失败的加载作业。
您是否考虑过在 Informatica 工作流程中使用 ANSI MERGE 语句来避免这个问题?您获得了 MultiLoad 实用程序的一些效率,但您的可恢复性不会像该实用程序那样使表处于锁定状态。它可能需要重新设计您在 ETL 中的方法,但需要考虑一些事情。