我有以下根任务和子任务。一切正常,但我怎么能让TSK_ROOT在挂起后自动恢复?我是否必须执行另一个任务来检查TSK_ROOT是否挂起?这不是违背了根任务的目的吗?
CREATE OR REPLACE TASK TSK_ROOT
WAREHOUSE = MYWH
SCHEDULE = '5 MINUTE'
WHEN
SYSTEM$STREAM_HAS_DATA('<stream_name>')
AS
ALTER TASK TSK_ROOT SUSPEND;
CREATE OR REPLACE TASK TKS_ONE
WAREHOUSE = MYWH
AFTER TSK_ROOT
AS
....发布于 2021-02-24 05:12:04
我从评论中理解的是:
TKS_ONE在运行TSK_ROOT.TKS_ONE仅在TSK_ROOT挂起后运行,因此TSK_ROOT并入挂起itself.TSK_ROOT可以运行任何东西,例如select 1 x,而TKS_ONE可以运行。因此,为了避免挂起TSK_ROOT,请不要在TSK_ROOT中挂起它。
检查此示例:
发布于 2021-02-24 06:24:39
挂起/恢复应用于打开(恢复)或关闭(挂起)维护代码,而不是作为操作功能。
也许可以试试这样的东西
SCHEDULE =‘使用CRON */5 9*** PST8PDT’
因为在when子句中有SYSTEM$STREAM_HAS_DATA(''),所以如果流是空的,它将不会恢复您的仓库/消耗信用。
如果这是一个理论问题,而不是一个可操作的问题:
对于任何具有计划的任务链和以下顺序的任务,如下所示
根目录(调度)--任务1(在根目录之后)--任务2(在task1之后)--任务3(在task2之后)
“‘suspend”必须从左侧应用,“resume”必须从右侧应用。序列可能如下所示
resumed -- suspended -- resumed -- suspended但在实践中,它应该总是看起来像这样
resumed -- resumed -- resumed -- resumed
suspended -- resumed -- resumed -- resumed
suspended -- suspended -- resumed -- resumed
suspended -- suspended -- suspended -- resumed
suspended -- suspended -- suspended -- suspended 因此,在这种情况下,如果您的操作目标是运行一次task1。
让根用户执行一个不做任何事情的语句,比如select current_date;
对task1执行必须执行的操作,然后让task2 'alter task root suspend;‘
https://stackoverflow.com/questions/66338099
复制相似问题