如何从命令行调用 ODI 场景并等待其执行

Posted

技术标签:

【中文标题】如何从命令行调用 ODI 场景并等待其执行【英文标题】:How to call ODI Scenario from command line and wait for its execution 【发布时间】:2020-02-08 15:36:07 【问题描述】:

我想从命令行调用 ODI 场景并等待它完成。我正在使用 ODI 12c 并安装了独立代理。我已经发现您可以使用 startscen.cmd 命令并且它对我有用。唯一的问题是 cmd 没有等待场景完成。有什么建议可以实现这样的目标吗?

我的 .bat 文件如下所示:

cd C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin
call startScen.cmd "-INSTANCE=CITestAgent" MAPPING 1_0_0 GLOBAL "-SESSION_NAME=TEST_RUN" "-AGENT-URL=http://localhost:20910/oraclediagent"
cd C:\Users\Redekera\documents\testFiles
"C:\Users\REDEKERA\Documents\instantclient_19_3\sqlplus.exe" db_user/pw@db/scheme @run_tests_lieferschein.sql

在该命令之后,我想通过 sql*plus 运行 sql,这需要等到场景完成。

感谢大家的帮助:)

【问题讨论】:

这是什么意思?为什么不将它添加到批处理中 在该命令之后还有另一个,需要等到场景完成。 作为开始,你可以告诉 cmd 等待特定时间 timeout /t 30 然后在时间完成后开始执行 sql plus。 @Moudiz 已经考虑过了,但我认为这不是一个合适的解决方案。不知道场景需要执行多长时间,取决于我要调用的场景和数据量... 嗨@AaronR。您需要运行命令行的机器上的操作系统是什么? 嗨@F.Lazarescu Windows 【参考方案1】:

默认情况下,startscen.cmd 将等待执行结束返回。 这可以通过参数-ASYNC=yes 更改以异步启动执行。在这种情况下,它将返回对检查执行状态有用的 SESSION 编号。

【讨论】:

你是对的,startScen.cmd 等待执行结束..【参考方案2】:

如果您希望仅在第一个命令成功退出时执行第二个命令:

execute scenario command && sql*plus command

摘自here

主要思想是“&&”符号!

【讨论】:

结合第一个答案也是个好主意,但是当您必须在 2 个命令之间更改目录时,批处理的外观如何? cd 更改目录 && 执行 senario 命令 && 更改目录 && sql*plus 命令

以上是关于如何从命令行调用 ODI 场景并等待其执行的主要内容,如果未能解决你的问题,请参考以下文章

如何等待一个shell命令执行完成

在命令行下面打开我自己的程序后CMD不退出,一直等待!!

C或C++如何通过程序执行shell命令并获取命令执行结果?

如何从命令行获取 NSUserDefaults

c++内调用命令行 不支持中文路径

如何使用python 执行命令行传入的代码