diff --git a/enterprise/backend/test/metabase_enterprise/sandbox/api/permissions_test.clj b/enterprise/backend/test/metabase_enterprise/sandbox/api/permissions_test.clj
index 6b8a1ee557226572e68e4c4e50d43c02517ac023..07ab58c6381b5ccd5a73fa9624223338a3648294 100644
--- a/enterprise/backend/test/metabase_enterprise/sandbox/api/permissions_test.clj
+++ b/enterprise/backend/test/metabase_enterprise/sandbox/api/permissions_test.clj
@@ -135,7 +135,7 @@
               (is (db/exists? GroupTableAccessPolicy :group_id (u/the-id (perms-group/all-users)), :table_id (mt/id :venues))))))))))
 
 (defn- fake-persist-card! [card]
-  (let [persisted-info (persisted-info/turn-on! (mt/user->id :rasta) card)]
+  (let [persisted-info (persisted-info/turn-on-model! (mt/user->id :rasta) card)]
     (db/update-where! PersistedInfo {:card_id (u/the-id card)}
                       :definition (json/encode
                                     (persisted-info/metadata->definition
diff --git a/src/metabase/api/card.clj b/src/metabase/api/card.clj
index 608ec898ccdb4fbf0d877e51f8a04c5068323a13..ad382124a54721d7888f4ce8bbfd71561568ccfb 100644
--- a/src/metabase/api/card.clj
+++ b/src/metabase/api/card.clj
@@ -785,7 +785,7 @@
                          :database    (:name database)})))
       (when-not dataset
         (throw (ex-info (tru "Card is not a model") {:status-code 400})))
-      (when-let [persisted-info (persisted-info/turn-on! api/*current-user-id* card)]
+      (when-let [persisted-info (persisted-info/turn-on-model! api/*current-user-id* card)]
         (task.persist-refresh/schedule-refresh-for-individual! persisted-info))
       api/generic-204-no-content)))
 
diff --git a/src/metabase/events/persisted_info.clj b/src/metabase/events/persisted_info.clj
index 4f7c3ca7f5bef81711cff767bb58107dc3a28ba8..6d519db7bd252a1047a49bd17eba5b578787d225 100644
--- a/src/metabase/events/persisted_info.clj
+++ b/src/metabase/events/persisted_info.clj
@@ -33,7 +33,7 @@
                (public-settings/persisted-models-enabled)
                (get-in (Database (:database_id card)) [:options :persist-models-enabled])
                (nil? (db/select-one-field :id PersistedInfo :card_id (:id card))))
-      (persisted-info/turn-on! (:actor_id card) card))
+      (persisted-info/turn-on-model! (:actor_id card) card))
     (catch Throwable e
       (log/warn (format "Failed to process persisted-info event. %s" (:topic event)) e))))
 
diff --git a/src/metabase/models/persisted_info.clj b/src/metabase/models/persisted_info.clj
index e982385f32996bb80bd233fa72e271546257893c..9fd2c72ccfb7394fd867feead0def9d82e80bcb7 100644
--- a/src/metabase/models/persisted_info.clj
+++ b/src/metabase/models/persisted_info.clj
@@ -110,7 +110,7 @@
      :creator_id      user-id}))
 
 (defn ready-unpersisted-models!
-  "Looks for all models in database and creates a persisted-info ready to be synced."
+  "Looks for all new models in database and creates a persisted-info ready to be synced."
   [database-id]
   (let [cards (db/select Card {:where [:and
                                        [:= :database_id database-id]
@@ -123,7 +123,7 @@
 (comment
   (ready-unpersisted-models! 183))
 
-(defn turn-on!
+(defn turn-on-model!
   "Marks PersistedInfo as `creating`, these will at some point be persisted by the PersistRefresh task."
   [user-id card]
   (let [card-id (u/the-id card)
@@ -138,3 +138,16 @@
                                        :active false, :state "creating", :state_change_at :%now)
                            (db/select-one PersistedInfo :card_id card-id)))]
     persisted-info))
+
+(defn ready-database!
+  "Sets PersistedInfo state to `creating` for models without a PeristedInfo or those in a `deletable` state.
+   Will ignore explicitly set `off` models."
+  [database-id]
+  (db/update! PersistedInfo
+              {:where [:and
+                       [:= :database_id database-id]
+                       [:= :state "deletable"]]
+               :set {:active false,
+                     :state "creating",
+                     :state_change_at :%now}})
+  (ready-unpersisted-models! database-id))
diff --git a/src/metabase/task/persist_refresh.clj b/src/metabase/task/persist_refresh.clj
index 99d8d74b58014956e2dfb465f793a8df5c50ce68..0fd614a863f5c45c3e875389dde809d79d36ff84 100644
--- a/src/metabase/task/persist_refresh.clj
+++ b/src/metabase/task/persist_refresh.clj
@@ -297,7 +297,7 @@
      (u/format-color 'green
                      "Scheduling persistence refreshes for database %d: trigger: %s"
                      (u/the-id database) (.. ^Trigger tggr getKey getName)))
-    (persisted-info/ready-unpersisted-models! (u/the-id database))
+    (persisted-info/ready-database! (u/the-id database))
     (try (task/add-trigger! tggr)
          (catch ObjectAlreadyExistsException _e
            (log/info