ODIシナリオとロード計画の外部から実行の方法

ODI 「Oracle Data Integrator」のジョブ「シナリオとロード計画」には運用上で外部のジョブ管理ツール「JP1」などから実行する要件があるため、本記事でコマンドラインとWebサービスを利用したODIジョブの実行方法を纏めました。
# 前提条件
- ODIのVirtualbox環境の構築：下記のドキュメントをご参考ください.
[Getting Started with Oracle® Data Integrator](https://docs.oracle.com/cd/F17736_01/12.2.1.3/odins/index.html#GUID-00680611-D0C9-4E7D-B61C-550A9FBFFE4D)
- Virtualbox環境でシナリオとロード計画の準備：
シナリオ①
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/aa17290a-ed03-dd73-efa0-a93a549b35a8.png)
シナリオ②
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/eeb80579-8869-82e4-b5e1-10362331304b.png)
ロード計画
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/e522489f-960b-1f99-f982-e45bd2b1785f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/38b9e619-5a5a-3b9b-303c-6251048b41c6.png)
- Virtualbox環境でStandaloneのAgentを構築：下記のドキュメントをご参考ください。
①[スタンドアロン・エージェントのドメインの構成](https://docs.oracle.com/cd/F23552_01/12.2.1.4/oding/configuring-domain-standalone-agent.html#GUID-36693629-7238-44AC-9BEB-B5F9305EBB3E)
②[Creating a Logical Agent](https://docs.oracle.com/en/middleware/data-integrator/12.2.1.3/tutorial-creating-standalone-agent/#CreatingaLogicalAgent)
# Agentの起動とテスト
下記のコマンドでAgentを起動します。パラメータの設定には下記のドキュメントをご参照ください。
[ノード・マネージャなしでのスタンドアロン・エージェントの起動](https://docs.oracle.com/cd/F23552_01/12.2.1.4/oding/configuring-domain-standalone-agent.html#GUID-E72FC69A-D185-49D9-8F06-D75D25AA6E43)
ディフォルトのAgent、シナリオとロード計画を起動するコマンドのパスが`/u01/Middleware/ODI12c/user_projects/domains/base_domain/bin/`です。
```
[oracle@ODIGettingStarted ~]$ /u01/Middleware/ODI12c/user_projects/domains/base_domain/bin/agent.sh -NAME=OracleDIAgent1
2024-03-19 15:22:36.136 NOTIFICATION New data source: [TEST_ODI_REPO/*******@jdbc:oracle:thin:@//localhost:1521/ORCL]
2024-03-19 15:22:43.591 NOTIFICATION ODI-1128 Agent OracleDIAgent1 is starting. Container: STANDALONE. Agent Version: 12.2.1. Port: 20910. JMX Port: 21910.
Allowing : 127.0.0.1,127.0.0.1,127.0.0.1
省略です。
2024-03-19 15:22:58.013 NOTIFICATION ODI-1111 Agent OracleDIAgent1 started. Agent version: 12.2.1. Port: 20910. JMX Port: 21910.
2024-03-19 15:22:58.025 NOTIFICATION ODI-1136 Starting Schedulers on Agent OracleDIAgent1.
2024-03-19 15:22:59.757 NOTIFICATION ODI-1137 Scheduler started for work repository WORKREP on Agent OracleDIAgent1.
```
ODI Studioで起動したAgentをテストします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/2f9c73c8-5ae6-841c-8b2b-fa06690e62f5.png)

# コマンドラインでのシナリオ実行
## 1. シナリオの実行
下記のコマンドでシナリオを実行します。パラメータの設定には下記のドキュメントをご参照ください。
`-INSTANCE=<ODIInstanceName>` `<scenario_name>` `<scenario_version>` `<context_code>`が必須です。`[-AGENT_URL=<remote_agent_url>]`ODIの外からODI AgentのURLを指定します。また
`-ASYNC=yes`で非同期実行した場合、シナリオのセッションIDが戻されます。
[コマンド行からのシナリオの実行](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-22691900-6411-43F3-A7F2-EB9CC986283E)
```
[oracle@ODIGettingStarted ~]$ /u01/Middleware/ODI12c/user_projects/domains/base_domain/bin/startscen.sh -INSTANCE=OracleDIAgent1 DEMO1 001 GLOBAL -SESSION_NAME=RUN1 -AGENT_URL=http://localhost:20910/oraclediagent -ASYNC=yes
2024-03-19 15:42:09.911 NOTIFICATION ODI-1633 OracleDI: Starting scenario DEMO1 001 in context GLOBAL ...
2024-03-19 15:42:14.980 NOTIFICATION ODI-1020 Started session 111, current status is: W(WAITING)
[oracle@ODIGettingStarted ~]$ 
```
ODI Studioでシナリオの実行を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/a3b35482-f6bd-6d0e-faea-aedae2dde7cf.png)

## 2. セッションの停止
実行中のシナリオを下記のコマンドで停止することが可能です。パラメータの設定にはシナリオ起動とほぼ同じですが、停止するセッションのIDを指定する必要となります。詳細には下記のドキュメントをご参照ください。
[コマンド行からのセッションの停止](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-445D71C7-89F6-44F9-82E1-C9805555D03B)
```
/u01/Middleware/ODI12c/user_projects/domains/base_domain/bin/stopsession.sh -INSTANCE=OracleDIAgent1 112 -AGENT_URL=http://localhost:20910/oraclediagent
2024-03-19 15:50:03.332 NOTIFICATION ODI-1632 Session "112" is being stopped (NORMAL)
[oracle@ODIGettingStarted ~]$ 
```
ODI Studioでセッション「112」の停止を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/e3f4bb2b-53b1-4417-4c66-1e9d3cff96da.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/050d1887-0ea1-0bb2-2857-de1f4b68349d.png)


## 3. セッションの再開
一度停止したセッションを下記のコマンドで再開し、最後まで実行します。詳細には下記のドキュメントをご参照ください。
[コマンド行からのセッションの再開](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-54101FAA-516E-42DB-8A19-247C46496F15)
```
[oracle@ODIGettingStarted ~]$ /u01/Middleware/ODI12c/user_projects/domains/base_domain/bin/restartsession.sh -INSTANCE=OracleDIAgent1 112 -AGENT_URL=http://localhost:20910/oraclediagent
2024-03-19 16:00:07.176 NOTIFICATION ODI-1020 Started session 112, current status is: D(DONE)
[oracle@ODIGettingStarted ~]$ 
```
ODI Studioでセッション「112」の再開を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/4fdcfcb9-b7c0-e601-69e5-9f3d85c7c1fc.png)
# コマンドラインでのロード計画実行
## 1. ロード計画の実行
複数のシナリオ一括で実行する場合に、ロード計画を利用します。下記のコマンドでロード計画を実行します。パラメータの設定には下記のドキュメントをご参照ください。
[コマンド行からのロード計画の実行](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-3689A16B-4B27-48BC-9B56-4E0142B08871)
`-INSTANCE=<ODIInstanceName>` `<load_plan_name>` `<context_code>`が必須です。`[-AGENT_URL=<remote_agent_url>]`ODIの外からODI AgentのURLを指定します。また
ディフォルト`-SYNC=no`で非同期実行するため、特に指定しなくてもロード計画の実行IDが戻されます。
```
[oracle@ODIGettingStarted ~]$ /u01/Middleware/ODI12c/user_projects/domains/base_domain/bin/startloadplan.sh -INSTANCE=OracleDIAgent1 DEMOLoadPlan GLOBAL -AGENT_URL=http://localhost:20910/oraclediagent
2024-03-19 16:15:34.984 NOTIFICATION ODI-1659 Load plan "DEMOLoadPlan", instance "11", run 1 has started
[oracle@ODIGettingStarted ~]$ 
```
ODI Studioでロード計画の実行を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/6b82c845-9dcf-33f5-172e-9b55dce8b606.png)

## 2. ロード計画実行の停止
実行中のロード計画を停止することが可能です。詳細には下記のドキュメントをご参照ください。
[ロード計画実行の停止](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-E2E002EE-F2B9-469B-9B81-AC87E21DA235)
```
[oracle@ODIGettingStarted ~]$ /u01/Middleware/ODI12c/user_projects/domains/base_domain/bin/stoploadplan.sh -INSTANCE=OracleDIAgent1 12 1 -AGENT_URL=http://localhost:20910/oraclediagent
2024-03-19 16:21:13.053 NOTIFICATION ODI-1662 Load plan instance "12", run 1 has stopped (NORMAL)
[oracle@ODIGettingStarted ~]$ 
```
ODI Studioでロード計画実行の停止を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/58507b1f-eb3d-8ada-4231-98e985cfaa5f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/43830fcf-49ce-42cb-89d7-385635989cb1.png)

## 3. ロード計画実行の再開
停止したロード計画を再開します。下記のドキュメントをご参照ください。
[ロード計画実行の再開](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-266D5050-E04F-4DB0-9168-9366072CDB2B)
```
[oracle@ODIGettingStarted ~]$ /u01/Middleware/ODI12c/user_projects/domains/base_domain/bin/restartloadplan.sh -INSTANCE=OracleDIAgent1 12 -AGENT_URL=http://localhost:20910/oraclediagent
2024-03-19 16:41:26.198 NOTIFICATION ODI-1656 Load plan instance "12", run 2 has restarted
[oracle@ODIGettingStarted ~]$ 
```
ODI Studioでロード計画実行の再開を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/6ab38ccf-38bc-97cb-8849-8d6ed911ba58.png)

# Webサービスでのシナリオ実行
コマンドラインだけではなく、ODIのWebサービスにもシナリオ実行などの外からのコールをサポートします。今回にはODI内蔵のWebサービスコール機能「OdiInvokeWebService」を利用して資料を作成するが、他のSOAP UIなどのツールでの利用方法も類似です。下記のドキュメントをご参考ください。
[Webサービスを使用したシナリオの実行](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-0B18330B-9724-49F3-A7B3-A580DF8DB411)

まず、ODIのパッケージを作成し、「OdiInvokeWebService」を選択して、「HTTP Analyzer」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/f53f2884-c007-ff51-aa9e-36604daa5c44.png)

ブラウザでODI WebサービスのWSDLが利用できることを確認します。
WSDL：`http://localhost:20910/oraclediagent/OdiInvoke?wsdl`
「port: 20910、Web application context: oraclediagent」にはAgentの設定内容を参照します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/7d50f19b-0db9-64fa-e7ae-b13e1cf25beb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/523a3b4f-51ed-1e7e-a933-eaf96a7e36c2.png)

「HTTP Analyzer」の画面で、「Select WSDL」ボタンをクリックし、上記のWSDLを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/5db8c708-4a85-9c29-0eae-dfc1243fe7b4.png)

利用可能なWebサービスが表示されて、今回にはシナリオ実行の`invokeStartScen()`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/65df7229-f8ce-fee6-5e45-d5bcd2bcd0d6.png)

コマンドラインのパラメータと同じく、実行するシナリオとODIユーザの情報を入力します。他の情報には自動的に入力されます。最後に「Send Request」をクリックし、シナリオを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/61cfdbc6-aff8-39a5-0973-2016cb22897a.png)

シナリオの実行結果を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/c8d03590-d28b-8414-a618-35d3a5ee5919.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387966/3adf047c-4d53-a073-87ed-d4b74e9bd210.png)

# その他のWebサービス
ODIジョブ実行に関する他のWebサービスもあり、利用方法が上記のシナリオ実行と同じであるため、この記事から省略します。下記のドキュメントをご参考ください。

- [Webサービスを使用したセッション・ステータスのモニタリング](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-9449BE00-5420-4E1B-9F47-96714C99BF14)
- [Webサービスを使用したセッションの再開](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-D4A5C51C-4127-4822-AE9A-615F36AE295F)
- [Webサービスを使用したロード計画の実行](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-91D61FA8-807C-401B-8C10-0AEC5ABA0A3B)
- [Webサービスを使用したロード計画実行の停止](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-94905CD2-4DA5-487E-8C6F-F5649C1DCC67)
- [Webサービスを使用したロード計画インスタンスの再開](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-94905CD2-4DA5-487E-8C6F-F5649C1DCC67)
- [Webサービスを使用したロード計画実行ステータスのモニタリング](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odiad/running-integration-processes.html#GUID-100CD361-653D-4789-AC10-07917AAD4E9A)

# まとめ
ODIの外部からODIジョブを実行する方法の2つを紹介して、ODIと他のシステムを統合する時にご活用ください。