diff --git a/lib/ovn-util.h b/lib/ovn-util.h
index 7cf861dbc..47e53ca74 100644
--- a/lib/ovn-util.h
+++ b/lib/ovn-util.h
@@ -154,6 +154,8 @@ void set_idl_probe_interval(struct ovsdb_idl *idl, const char *remote,
 #define OVN_MAX_DP_VXLAN_KEY ((1u << 12) - 1)
 #define OVN_MAX_DP_VXLAN_KEY_LOCAL (OVN_MAX_DP_KEY - OVN_MAX_DP_GLOBAL_NUM)
 
+#define DEFAULT_UTILS_PROBE_INTERVAL_MSEC 120000
+
 struct hmap;
 void ovn_destroy_tnlids(struct hmap *tnlids);
 bool ovn_add_tnlid(struct hmap *set, uint32_t tnlid);
diff --git a/ovn-nb.xml b/ovn-nb.xml
index fd32070f2..a82f31a92 100644
--- a/ovn-nb.xml
+++ b/ovn-nb.xml
@@ -215,6 +215,26 @@
         </p>
       </column>
 
+      <column name="options" key="dbctl_probe_interval">
+        <p>
+          The inactivity probe interval of the connection to the OVN Northbound
+          and Southbound databases from <code>ovn-nbctl</code> and
+          <code>ovn-sbctl</code> utilities respectively, in milliseconds.
+          If the value is zero, it disables the connection keepalive feature.
+        </p>
+
+        <p>
+          If the value is nonzero, then it will be forced to a value of
+          at least 1000 ms.
+        </p>
+
+        <p>
+          If the value less then zero, then the default inactivity probe
+          interval for <code>ovn-nbctl</code> and <code>ovn-sbctl</code> would
+          be left intact (120000 ms).
+        </p>
+      </column>
+
       <column name="options" key="northd_trim_timeout">
         <p>
           When used, this configuration value specifies the time, in
diff --git a/utilities/ovn-dbctl.c b/utilities/ovn-dbctl.c
index 369a6a663..c6aebcbbb 100644
--- a/utilities/ovn-dbctl.c
+++ b/utilities/ovn-dbctl.c
@@ -205,6 +205,9 @@ ovn_dbctl_main(int argc, char *argv[],
     ovsdb_idl_set_remote(idl, db, daemon_mode);
     ovsdb_idl_set_leader_only(idl, leader_only);
 
+    /* Set reasonable high probe interval. */
+    set_idl_probe_interval(idl, db, DEFAULT_UTILS_PROBE_INTERVAL_MSEC);
+
     if (daemon_mode) {
         server_loop(dbctl_options, idl, argc, argv_);
     } else {
@@ -1094,6 +1097,17 @@ out:
     free(argv);
 }
 
+static void
+update_inactivity_probe(struct server_cmd_run_ctx *ctx)
+{
+    int inactivity_probe = ctx->dbctl_options->get_inactivity_probe(ctx->idl);
+    if (inactivity_probe < 0) {
+        inactivity_probe = DEFAULT_UTILS_PROBE_INTERVAL_MSEC;
+    }
+
+    set_idl_probe_interval(ctx->idl, db, inactivity_probe);
+}
+
 static void
 server_loop(const struct ovn_dbctl_options *dbctl_options,
             struct ovsdb_idl *idl, int argc, char *argv[])
@@ -1125,6 +1139,10 @@ server_loop(const struct ovn_dbctl_options *dbctl_options,
 
     for (;;) {
         update_ssl_config();
+
+        /* Configure inactivity probe from connected DB. */
+        update_inactivity_probe(&server_cmd_run_ctx);
+
         memory_run();
         if (memory_should_report()) {
             struct simap usage = SIMAP_INITIALIZER(&usage);
diff --git a/utilities/ovn-dbctl.h b/utilities/ovn-dbctl.h
index a1fbede6b..54c232dd6 100644
--- a/utilities/ovn-dbctl.h
+++ b/utilities/ovn-dbctl.h
@@ -52,6 +52,7 @@ struct ovn_dbctl_options {
                           const struct timer *wait_timeout,
                           long long int start_time, bool print_wait_time);
 
+    int (*get_inactivity_probe)(struct ovsdb_idl *);
     struct ctl_context *(*ctx_create)(void);
     void (*ctx_destroy)(struct ctl_context *);
 };
diff --git a/utilities/ovn-ic-nbctl.c b/utilities/ovn-ic-nbctl.c
index f3d8039a8..19d8b054f 100644
--- a/utilities/ovn-ic-nbctl.c
+++ b/utilities/ovn-ic-nbctl.c
@@ -116,6 +116,10 @@ main(int argc, char *argv[])
     ovsdb_idl_set_remote(idl, db, false);
     ovsdb_idl_set_db_change_aware(idl, false);
     ovsdb_idl_set_leader_only(idl, leader_only);
+
+    /* Set reasonable high probe interval. */
+    set_idl_probe_interval(idl, db, DEFAULT_UTILS_PROBE_INTERVAL_MSEC);
+
     run_prerequisites(commands, n_commands, idl);
 
     /* Execute the commands.
diff --git a/utilities/ovn-ic-sbctl.c b/utilities/ovn-ic-sbctl.c
index 3060b48b9..215d09d30 100644
--- a/utilities/ovn-ic-sbctl.c
+++ b/utilities/ovn-ic-sbctl.c
@@ -115,6 +115,10 @@ main(int argc, char *argv[])
     ovsdb_idl_set_remote(idl, db, false);
     ovsdb_idl_set_db_change_aware(idl, false);
     ovsdb_idl_set_leader_only(idl, leader_only);
+
+    /* Set reasonable high probe interval. */
+    set_idl_probe_interval(idl, db, DEFAULT_UTILS_PROBE_INTERVAL_MSEC);
+
     run_prerequisites(commands, n_commands, idl);
 
     /* Execute the commands.
diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c
index 45572fd30..49c5b294a 100644
--- a/utilities/ovn-nbctl.c
+++ b/utilities/ovn-nbctl.c
@@ -153,6 +153,20 @@ nbctl_post_execute(struct ovsdb_idl *idl, struct ovsdb_idl_txn *txn,
     }
 }
 
+static int
+get_inactivity_probe(struct ovsdb_idl *idl)
+{
+    const struct nbrec_nb_global *nb = nbrec_nb_global_first(idl);
+    int interval = -1;
+
+    if (nb) {
+        interval = smap_get_int(&nb->options, "dbctl_probe_interval",
+                                interval);
+    }
+
+    return interval;
+}
+
 static char * OVS_WARN_UNUSED_RESULT dhcp_options_get(
     struct ctl_context *ctx, const char *id, bool must_exist,
     const struct nbrec_dhcp_options **);
@@ -7935,6 +7949,7 @@ main(int argc, char *argv[])
         .add_base_prerequisites = nbctl_add_base_prerequisites,
         .pre_execute = nbctl_pre_execute,
         .post_execute = nbctl_post_execute,
+        .get_inactivity_probe = get_inactivity_probe,
 
         .ctx_create = nbctl_ctx_create,
         .ctx_destroy = nbctl_ctx_destroy,
diff --git a/utilities/ovn-sbctl.c b/utilities/ovn-sbctl.c
index 542ab9ffa..76465fe7e 100644
--- a/utilities/ovn-sbctl.c
+++ b/utilities/ovn-sbctl.c
@@ -150,6 +150,20 @@ Other options:\n\
  * gracefully.  */
 #define ctl_fatal dont_use_ctl_fatal_use_ctl_error_and_return
 
+static int
+get_inactivity_probe(struct ovsdb_idl *idl)
+{
+    const struct sbrec_sb_global *sb = sbrec_sb_global_first(idl);
+    int interval = -1;
+
+    if (sb) {
+        interval = smap_get_int(&sb->options, "dbctl_probe_interval",
+                                interval);
+    }
+
+    return interval;
+}
+
 /* ovs-sbctl specific context.  Inherits the 'struct ctl_context' as base. */
 struct sbctl_context {
     struct ctl_context base;
@@ -1590,6 +1604,7 @@ main(int argc, char *argv[])
         .add_base_prerequisites = sbctl_add_base_prerequisites,
         .pre_execute = sbctl_pre_execute,
         .post_execute = NULL,
+        .get_inactivity_probe = get_inactivity_probe,
 
         .ctx_create = sbctl_ctx_create,
         .ctx_destroy = sbctl_ctx_destroy,
