diff --git a/db/docs/batched_background_migrations/backfill_epic_dates_to_work_item_dates_sources.yml b/db/docs/batched_background_migrations/backfill_epic_dates_to_work_item_dates_sources.yml
index 8a58ea389b1a91dbb2e5568a45fe1b6ce4615b4e..1e83186ef400f66360584929ed83f10dfaf53731 100644
--- a/db/docs/batched_background_migrations/backfill_epic_dates_to_work_item_dates_sources.yml
+++ b/db/docs/batched_background_migrations/backfill_epic_dates_to_work_item_dates_sources.yml
@@ -6,4 +6,4 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/153115
 milestone: '17.1'
 queued_migration_version: 20240531113402
 finalize_after: '2024-06-13'
-finalized_by: # version of the migration that finalized this BBM
+finalized_by: 20240702092809
diff --git a/db/post_migrate/20240702092809_finalize_backfill_epic_dates_to_work_item_dates_sources.rb b/db/post_migrate/20240702092809_finalize_backfill_epic_dates_to_work_item_dates_sources.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ea01ce327a5ac3885f5d190d19a2b2586d053c30
--- /dev/null
+++ b/db/post_migrate/20240702092809_finalize_backfill_epic_dates_to_work_item_dates_sources.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+class FinalizeBackfillEpicDatesToWorkItemDatesSources < Gitlab::Database::Migration[2.2]
+  milestone '17.2'
+  restrict_gitlab_migration gitlab_schema: :gitlab_main
+
+  disable_ddl_transaction!
+
+  def up
+    ensure_batched_background_migration_is_finished(
+      job_class_name: 'BackfillEpicDatesToWorkItemDatesSources',
+      table_name: 'epics',
+      column_name: 'id',
+      job_arguments: [],
+      finalize: true
+    )
+  end
+
+  def down; end
+end
diff --git a/db/schema_migrations/20240702092809 b/db/schema_migrations/20240702092809
new file mode 100644
index 0000000000000000000000000000000000000000..4b209a1ed9a569502393579d4c5c7f27d4dc04a3
--- /dev/null
+++ b/db/schema_migrations/20240702092809
@@ -0,0 +1 @@
+6bb7c9e06e1541c7edc35aca1bda2c3005c25c78c962de49b50f6b0007a96c80
\ No newline at end of file
diff --git a/spec/migrations/db/post_migrate/20240702092809_finalize_backfill_epic_dates_to_work_item_dates_sources_spec.rb b/spec/migrations/db/post_migrate/20240702092809_finalize_backfill_epic_dates_to_work_item_dates_sources_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..2cc9cd7c2f249fa494b2ec5a8417b76eb101ad62
--- /dev/null
+++ b/spec/migrations/db/post_migrate/20240702092809_finalize_backfill_epic_dates_to_work_item_dates_sources_spec.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require_migration!
+
+RSpec.describe FinalizeBackfillEpicDatesToWorkItemDatesSources, feature_category: :database, migration_version: 20240702092809 do
+  describe '#up' do
+    it 'ensures the migration is completed for self-managed instances' do
+      # enqueue the migration
+      QueueBackfillEpicDatesToWorkItemDatesSources.new.up
+
+      migration = Gitlab::Database::BackgroundMigration::BatchedMigration.where(
+        job_class_name: 'BackfillEpicDatesToWorkItemDatesSources',
+        table_name: 'epics'
+      ).first
+
+      expect(migration.status).not_to eq(6) # finalized
+
+      migrate!
+
+      expect(migration.reload.status).to eq(6)
+      QueueBackfillEpicDatesToWorkItemDatesSources.new.down
+    end
+  end
+end