ODI 启动agentscheduler报错 Unable to create TaskScheduleDefinitionList

发布时间 2024-01-11 19:58:32作者: 追寻风的季节

背景:oid代理运行一段时间后突然不在执行计划任务了,但是代理测试是通过的。

启动agentscheduler报错 Unable to create TaskScheduleDefinitionList

226fa2742a477e01387952f15c7bfab

正常启动应该是883c699d7dc9eac907fea911b7613ef

根据oracle support所说

image-20240111184018740

因小公司没有买oracle产品,于是花50块买了一天的账号使用权下载了补丁

https://updates.oracle.com/download/26997719.html

打补丁的时候才发现我当前使用的12c不需要打这个补丁,此路已断~

oracle support描述的信息

image-20231208164308688

上述的意思是要与SNP_PLAN_AGENT表中损坏的记录有关

更具体的说,SNP_PLAN_AGENT表的以下两列具有不一致的值(一列为NULL,但一列为正值)

  • S_BEGIN_HOUR

  • S_END_HOUR

解决方案是

1.在ODI Studio中识别并删除有问题的计划

2.在ODI Studio中重新创建计划

3.在ODI Studio拓扑中,对代理执行更新计划以验证更改。

好的,上面的方案也不符合我的情况!

那么我们再看另一个解决方案

image-20231208164637798

上述意思是由保存调度信息的 SNP_PLAN_AGENT 工作存储库表中的无效/不正确数据引起的。

更具体地,在上面的调度表中引用了一个或多个方案和/或加载计划,但是在方案(SNP_SCEN)和加载计划(SNP_LOAD_PLAN)工作存储库表中缺少该方案和/或加载计划。

当以下情况之一时,可能会遇到这种情况:

方案/负载计划已重命名...或
方案/负载计划已被删除...或
已创建一个场景的版本对象,该场景在 ODI 中具有活动计划

也给出了解决方案

  • 建议不要在生成 ODI 方案/负载计划后对其进行重命名,因为已知这会导致多个问题。

  • 如果需要进行此更改,建议改为生成具有新名称的新方案/负载计划。

可以执行以下步骤来解决该问题:

将 SNP_PLAN_AGENT 与 SCEN_NAME 和 SCEN_VERSION 上的 SNP_SCEN 结合起来,以找出额外的场景。

将 SNP_PLAN_AGENT 与 SCEN_NAME 上的 SNP_LOAD_PLAN 结合以找出额外的加载计划。
然后从 SNP_PLAN_AGENT 中删除上述场景和/或加载计划的行。
如果需要,请联系 ODI 支持以接收适当的 SQL 命令。(无助,穷困.....)

下面是实际执行的,确实查出来结果,但是还是不能解决问题

注:其实到这里不愿意折腾的人直接可以忽略,我们可以直接ODI Studio中将计划任务都删了,然后重新创建即可。

下面的语句执行后删了一些数据,再去重新代理,还是报错。得全删干净再试试,嗯嗯嗯~~还是不行!!!!!!!!!!!!!!!

SELECT *  FROM SNP_PLAN_AGENT pa  JOIN SNP_SCEN s ON pa.SCEN_NAME = s.SCEN_NAME AND pa.SCEN_VERSION = s.SCEN_VERSION WHERE [add conditions to identify extra rows]
SELECT * FROM SNP_PLAN_AGENT pa JOIN SNP_LOAD_PLAN lp ON pa.SCEN_NAME = lp.SCEN_NAME WHERE [add conditions to identify extra rows]
DELETE pa  FROM SNP_PLAN_AGENT pa JOIN SNP_SCEN s ON pa.SCEN_NAME = s.SCEN_NAME AND pa.SCEN_VERSION = s.SCEN_VERSION WHERE [same condition used above]

注意:上述删除操作现网不要执行,走投无路的我不得已在本地环境还原了现网的情况,将odi迁移到了本地

迁移过程中尽量保持创建的用户密码和现网一致。

迁移重点:

迁移完成后在本地环境连接工作存储库始终是现网的IP,这导致我无论如何都连不上本地的oracle数据库,在翻阅大量资料后终于找到了如下解决方案

先看这篇https://forums.oracle.com/ords/apexds/post/change-ip-connection-to-work-repository-of-odi-8602

image-20240111192730276

在看看这篇https://glamorousoracle.blogspot.com/2013/10/oracle-tip-changing-odi-11g-database-ip.html

image-20240111192829579

ODI Studio中要创建一个新工作资料库才能修改上述url,不然按钮是灰色的无法修改(这是我本地发现的情况)

好了将本地环境搭建完成,现网odi资料库导入本地后,完美复现了现网的报错,这下可以为所欲为了。

由于接触odi时间也不多也就两周,对其表数据的情况也不了解,只能简单粗暴的对比两个库的数据来排错

思路

​ 本地安装两个odi环境一个环境是初始化安装的能正常启动代理,另一个就是将现网odi资料库导入到本地的环境不能正常启动代理,对比这两个库的数据,将不正常的库数据参照初始库一个个表清数据进行启动测试

结论:运气较好,看一个名为SNP_SCHEDULE_EXEC的表不是很爽,清掉数据后,代理能正常启动了!

support是这么说的

https://support.oracle.com/knowledge/Middleware/2594470_1.html

image-20240111194611917

综上由于这个表被污染才导致代理启动始终报错,清空这个表的数据即可。

Unable to create TaskScheduleDefinitionList