Not a widely known command, I use to repeat a certain command for example when monitoring a process, a (set of) file/s, a directory etc.
In the example below, I use to monitor the status of an Oracle ZDM migration process with GG running on Oracle Database at Azure Infrastructure:
Example of zdmcli refreshed at 120s:
[zdmuser@xxxx-orazdm01 ~]$ watch -n 120 zdmcli query job -jobid 66
Every 120.0s: zdmcli query job -jobid 66 xxxx-orazdm01.itss.global: Tue Feb 18 08:25:03 2025
xxxx-orazdm01.itss.global: Audit ID: 1122
Job ID: 66
User: zdmuser
Client: xxxx-orazdm01
Job Type: "MIGRATE"
Scheduled job command: "zdmcli migrate database -rsp /u01/zdm/app/zdmbase/response_files/non-prod/XXXX/logical_online.rsp -sourcenode hostora01 -sourcesid DB001.XXXX-eaiora01.itc.GLOBAL -
srcauth zdmauth -srcarg1 user:oracle -srcarg2 identity_file:/home/zdmuser/.ssh/id_rsa -srcarg3 sudo_location:/usr/bin/sudo -targetnode oranpdbserver1-ly1481 -tgtauth zdmauth -tgtarg1 user:opc -tgt
arg2 identity_file:/home/zdmuser/.ssh/id_rsa -tgtarg3 sudo_location:/usr/bin/sudo -pauseafter ZDM_MONITOR_GG_LAG -skipadvisor"
Scheduled job execution start time: 2025-02-14T15:00:06Z. Equivalent local time: 2025-02-14 15:00:06
Current status: PAUSED
Current Phase: "ZDM_MONITOR_GG_LAG"
Result file path: "/u01/zdm/app/zdmbase/chkbase/scheduled/job-66-2025-02-14-15:00:24.log"
Metrics file path: "/u01/zdm/app/zdmbase/chkbase/scheduled/job-66-2025-02-14-15:00:24.json"
Excluded objects file path: "/u01/zdm/app/zdmbase/chkbase/scheduled/job-66-filtered-objects-2025-02-14T15:00:53.207.json"
Job execution start time: 2025-02-14 15:00:25
Job execution end time: 2025-02-14 15:52:42
Job execution elapsed time: 52 minutes 16 seconds
Dump prefix: ZDM_66_DP_EXPORT_9854_BATCH1_dmp
Oracle GoldenGate replication metrics:
Extract "EXT07YXH" status: RUNNING
Extract "EXT07YXH" trail files generated: 2
Replicat "RE2EZ" status: RUNNING
Replicat "RE2EZ" trail files applied: 2
End-to-end heartbeat lag 5.57 seconds
Replication throughput: 0.0 GBph
ZDM_VALIDATE_TGT ...................... COMPLETED
ZDM_VALIDATE_SRC ...................... COMPLETED
ZDM_SETUP_SRC ......................... COMPLETED
ZDM_VALIDATE_GG_HUB ................... COMPLETED
ZDM_VALIDATE_DATAPUMP_SETTINGS_SRC .... COMPLETED
ZDM_VALIDATE_DATAPUMP_SETTINGS_TGT .... COMPLETED
ZDM_PREPARE_DATAPUMP_SRC .............. COMPLETED
ZDM_DATAPUMP_ESTIMATE_SRC ............. COMPLETED
ZDM_PREPARE_GG_HUB .................... COMPLETED
ZDM_ADD_HEARTBEAT_SRC ................. COMPLETED
ZDM_ADD_SCHEMA_TRANDATA_SRC ........... COMPLETED
ZDM_CREATE_GG_EXTRACT_SRC ............. COMPLETED
ZDM_PREPARE_DATAPUMP_TGT .............. COMPLETED
ZDM_PARALLEL_EXPORT_IMPORT ............ COMPLETED
ZDM_POST_DATAPUMP_SRC ................. COMPLETED
ZDM_POST_DATAPUMP_TGT ................. COMPLETED
ZDM_ADD_HEARTBEAT_TGT ................. COMPLETED
ZDM_ADD_CHECKPOINT_TGT ................ COMPLETED
ZDM_CREATE_GG_REPLICAT_TGT ............ COMPLETED
ZDM_START_GG_REPLICAT_TGT ............. COMPLETED
ZDM_MONITOR_GG_LAG .................... COMPLETED
ZDM_PREPARE_SWITCHOVER_APP ............ PENDING
ZDM_ADVANCE_SEQUENCES ................. PENDING
ZDM_REFRESH_MVIEW_TGT ................. PENDING
ZDM_SWITCHOVER_APP .................... PENDING
ZDM_POST_SWITCHOVER_TGT ............... PENDING
...
If I want to refresh the output every 60 sec., it will be as simple as:
watch -n 60 zdmcli query job -jobid 66

