diff --git a/dap_chain_global_db.c b/dap_chain_global_db.c
index 20400651685ba65fac46b0d67fbcf5211c6757ec..0d173f22c3ad69bf9cf0ab100017678f3c60612a 100755
--- a/dap_chain_global_db.c
+++ b/dap_chain_global_db.c
@@ -208,6 +208,17 @@ void dap_chain_global_db_deinit(void)
 
 }
 
+/**
+ * @brief dap_chain_global_db_flush
+ * @return
+ */
+int dap_chain_global_db_flush(void){
+    lock();
+    int res = dap_db_driver_flush();
+    unlock();
+    return res;
+}
+
 /**
  * Get entry from base
  *
diff --git a/dap_chain_global_db.h b/dap_chain_global_db.h
index bfac6c4bc32259340255e0ff4af1ba21ce59c713..078d6af28ab6ca01b5fa941f0ec7796970df1fd1 100755
--- a/dap_chain_global_db.h
+++ b/dap_chain_global_db.h
@@ -26,6 +26,10 @@ typedef void (*dap_global_db_obj_callback_notify_t) (void * a_arg, const char a_
                                                      const char * a_key, const void * a_value,
                                                      const size_t a_value_len);
 
+/**
+ * Flush DB
+ */
+int dap_chain_global_db_flush(void);
 
 /**
  * Clean struct dap_global_db_obj_t
diff --git a/dap_chain_global_db_driver.c b/dap_chain_global_db_driver.c
index 0909f3874de1e101d5e725b1b7d01f1d57a4582d..07d580d037c091db86a14e6941115c5f70127b8a 100755
--- a/dap_chain_global_db_driver.c
+++ b/dap_chain_global_db_driver.c
@@ -145,6 +145,11 @@ void dap_db_driver_deinit(void)
     }
 }
 
+int dap_db_driver_flush(void)
+{
+    return s_drv_callback.flush();
+}
+
 dap_store_obj_t* dap_store_obj_copy(dap_store_obj_t *a_store_obj, size_t a_store_count)
 {
     if(!a_store_obj || !a_store_count)
diff --git a/dap_chain_global_db_driver.h b/dap_chain_global_db_driver.h
index 30785a401b3c1e25f16cbc21b5dbef061a564e8d..458607acd7a245ea8841afdd81c3f523bea49cb7 100755
--- a/dap_chain_global_db_driver.h
+++ b/dap_chain_global_db_driver.h
@@ -61,6 +61,7 @@ typedef struct dap_db_driver_callbacks {
     dap_db_driver_callback_t transaction_start;
     dap_db_driver_callback_t transaction_end;
     dap_db_driver_callback_t deinit;
+    dap_db_driver_callback_t flush;
 } dap_db_driver_callbacks_t;
 
 
@@ -69,6 +70,7 @@ void dap_db_driver_deinit(void);
 
 dap_store_obj_t* dap_store_obj_copy(dap_store_obj_t *a_store_obj, size_t a_store_count);
 void dap_store_obj_free(dap_store_obj_t *a_store_obj, size_t a_store_count);
+int dap_db_driver_flush(void)
 
 char* dap_chain_global_db_driver_hash(const uint8_t *data, size_t data_size);
 
diff --git a/dap_chain_global_db_driver_cdb.c b/dap_chain_global_db_driver_cdb.c
index 40fb4a0245ca97685ab9f7cddd40f03c71517ce9..f1250d7036543187ff56ca939608dfe5e21eb407 100644
--- a/dap_chain_global_db_driver_cdb.c
+++ b/dap_chain_global_db_driver_cdb.c
@@ -230,6 +230,7 @@ int dap_db_driver_cdb_init(const char *a_cdb_path, dap_db_driver_callbacks_t *a_
     a_drv_callback->read_store_obj      = dap_db_driver_cdb_read_store_obj;
     a_drv_callback->read_cond_store_obj = dap_db_driver_cdb_read_cond_store_obj;
     a_drv_callback->deinit              = dap_db_driver_cdb_deinit;
+    a_drv_callback->flush               = dap_db_driver_cdb_flush;
 
     closedir(dir);
     return CDB_SUCCESS;
@@ -274,6 +275,42 @@ int dap_db_driver_cdb_deinit() {
     return CDB_SUCCESS;
 }
 
+int dap_db_driver_cdb_flush(void){
+    log_it(L_DEBUG, "Start flush cuttdb.");
+    //CLOSE
+    cdb_instance *cur_cdb, *tmp;
+    HASH_ITER(hh, s_cdb, cur_cdb, tmp) {
+        DAP_DELETE(cur_cdb->local_group);
+        cdb_destroy(cur_cdb->cdb);
+        HASH_DEL(s_cdb, cur_cdb);
+        DAP_DELETE(cur_cdb);
+    }
+    //SYNC
+#ifndef _WIN32
+    sync();
+#endif
+    //OPEN
+    struct dirent *d;
+    DIR *dir = opendir(s_cdb_path);
+    if (!dir) {
+        log_it(L_ERROR, "Couldn't open db directory");
+        return -1;
+    }
+    for (d = readdir(dir); d; d = readdir(dir)) {
+        if (!dap_strcmp(d->d_name, ".") || !dap_strcmp(d->d_name, "..")) {
+            continue;
+        }
+        pcdb_instance l_cdb_i = dap_cdb_init_group(d->d_name, CDB_CREAT | CDB_PAGEWARMUP);
+        if (!l_cdb_i) {
+            dap_db_driver_cdb_deinit();
+            closedir(dir);
+            return -2;
+        }
+    }
+    closedir(dir);
+    return 0;
+}
+
 dap_store_obj_t *dap_db_driver_cdb_read_last_store_obj(const char* a_group) {
     if (!a_group) {
         return NULL;
diff --git a/dap_chain_global_db_driver_cdb.h b/dap_chain_global_db_driver_cdb.h
index 0ac61e23d7c404c9351ef5727fbe36344e264377..e4309d64482fdd34c77724b818934570147f3842 100644
--- a/dap_chain_global_db_driver_cdb.h
+++ b/dap_chain_global_db_driver_cdb.h
@@ -39,6 +39,7 @@ typedef struct _cdb_record {
 
 int dap_db_driver_cdb_init(const char*, dap_db_driver_callbacks_t*);
 int dap_db_driver_cdb_deinit();
+int dap_db_driver_cdb_flush(void);
 
 int dap_db_driver_cdb_apply_store_obj(pdap_store_obj_t);
 
diff --git a/dap_chain_global_db_driver_sqlite.c b/dap_chain_global_db_driver_sqlite.c
index 3083dc21c6ad4aabcc585de9839f7554b001d47c..2495c4d9816c181c48ca8a0c5ee8c145bafe9d59 100755
--- a/dap_chain_global_db_driver_sqlite.c
+++ b/dap_chain_global_db_driver_sqlite.c
@@ -32,6 +32,7 @@
 #define LOG_TAG "db_sqlite"
 
 static sqlite3 *s_db = NULL;
+static char *s_filename_db = NULL;
 
 // Value of one field in the table
 typedef struct _SQLITE_VALUE_
@@ -104,6 +105,8 @@ int dap_db_driver_sqlite_init(const char *a_filename_db, dap_db_driver_callbacks
         a_drv_callback->transaction_start = dap_db_driver_sqlite_start_transaction;
         a_drv_callback->transaction_end = dap_db_driver_sqlite_end_transaction;
         a_drv_callback->deinit = dap_db_driver_sqlite_deinit;
+        a_drv_callback->flush = dap_db_driver_sqlite_flush;
+        s_filename_db = strdup(a_filename_db);
     }
     return l_ret;
 }
@@ -205,6 +208,30 @@ bool dap_db_driver_sqlite_set_pragma(sqlite3 *a_db, char *a_param, char *a_mode)
     return false;
 }
 
+int dap_db_driver_sqlite_flush()
+{
+    log_it(L_DEBUG, "Start flush sqlite data base.");
+    dap_db_driver_sqlite_close(s_db);
+    char *l_error_message;
+    s_db = dap_db_driver_sqlite_open(s_filename_db, SQLITE_OPEN_READWRITE, &l_error_message);
+    if(!s_db) {
+        log_it(L_ERROR, "Can't init sqlite err=%d", l_error_message);
+        dap_db_driver_sqlite_free(l_error_message);
+        return -3;
+    }
+#ifndef _WIN32
+    sync();
+#endif
+    if(!dap_db_driver_sqlite_set_pragma(s_db, "synchronous", "NORMAL")) // 0 | OFF | 1 | NORMAL | 2 | FULL
+        log_it(L_WARNING, "Can't set new synchronous mode\n");
+    if(!dap_db_driver_sqlite_set_pragma(s_db, "journal_mode", "OFF")) // DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF
+        log_it(L_WARNING, "Can't set new journal mode\n");
+
+    if(!dap_db_driver_sqlite_set_pragma(s_db, "page_size", "1024")) // DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF
+        log_it(L_WARNING, "Can't set page_size\n");
+    return 0;
+}
+
 /**
  * Execute SQL query to database that does not return data
  *
diff --git a/dap_chain_global_db_driver_sqlite.h b/dap_chain_global_db_driver_sqlite.h
index 202bf7fc0e2ca50c45bea2bb8ddbf9d9d8b118b9..09342024f526d62398fb1ac361cc71673fa3b781 100755
--- a/dap_chain_global_db_driver_sqlite.h
+++ b/dap_chain_global_db_driver_sqlite.h
@@ -32,6 +32,7 @@ sqlite3* dap_db_driver_sqlite_open(const char *a_filename_utf8, int a_flags, cha
 void dap_db_driver_sqlite_close(sqlite3 *l_db);
 void dap_db_driver_sqlite_free(char *memory);
 bool dap_db_driver_sqlite_set_pragma(sqlite3 *a_db, char *a_param, char *a_mode);
+int dap_db_driver_sqlite_flush(void);
 
 
 // ** SQLite callbacks **