diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index e62e5d101669607543f06b389503304d4893415e..c387a78af5365fb43b59b707654d977f27404fde 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -8,6 +8,7 @@
 - cta/CTA#213 - Skip files with paths that have valid metadata
 ### Bug Fixes
 - cta/CTA#305 - AllCatalogueSchema file not created when updating schema
+- cta/CTA#309 - Ignore 'NoSuchObject' exceptions thrown by non-existing objects during retrieve job requeuing
 - cta/CTA#320 - CTA No Oracle is failing
 
 # v4.8.5-1
diff --git a/scheduler/OStoreDB/OStoreDB.cpp b/scheduler/OStoreDB/OStoreDB.cpp
index 62703f4c2650c7882e703358bf42e87809b7e894..5b3ed8bb469f02122c5be2492b337d9092fe6780 100644
--- a/scheduler/OStoreDB/OStoreDB.cpp
+++ b/scheduler/OStoreDB/OStoreDB.cpp
@@ -1956,8 +1956,15 @@ void OStoreDB::requeueRetrieveJobs(std::list<cta::SchedulerDatabase::RetrieveJob
     OStoreDB::RetrieveJob *oStoreJob = dynamic_cast<OStoreDB::RetrieveJob *>(job);
     auto rr = std::make_shared<objectstore::RetrieveRequest>(oStoreJob->m_retrieveRequest.getAddressIfSet(), m_objectStore);
     rrlist.push_back(rr);
-    locks.emplace_back(*rr);
-    rr->fetch();
+    try {
+      locks.emplace_back(*rr);
+      rr->fetch();
+    } catch (cta::exception::NoSuchObject &) {
+      log::ScopedParamContainer params(logContext);
+      params.add("retrieveRequestId", oStoreJob->m_retrieveRequest.getAddressIfSet());
+      logContext.log(log::INFO, "In OStoreDB::requeueRetrieveJobs(): no such retrieve request. Ignoring.");
+      continue;
+    }
     sorter.insertRetrieveRequest(rr, *m_agentReference, std::nullopt, logContext);
   }
   locks.clear();
@@ -1975,8 +1982,15 @@ void OStoreDB::requeueRetrieveRequestJobs(std::list<cta::SchedulerDatabase::Retr
     auto oStoreJob = dynamic_cast<OStoreDB::RetrieveJob *>(job);
     auto rr = std::make_shared<objectstore::RetrieveRequest>(oStoreJob->m_retrieveRequest.getAddressIfSet(), m_objectStore);
     rrlist.push_back(rr);
-    locks.emplace_back(*rr);
-    rr->fetch();
+    try {
+      locks.emplace_back(*rr);
+      rr->fetch();
+    } catch (cta::exception::NoSuchObject &) {
+      log::ScopedParamContainer params(logContext);
+      params.add("retrieveRequestId", oStoreJob->m_retrieveRequest.getAddressIfSet());
+      logContext.log(log::INFO, "In OStoreDB::requeueRetrieveRequestJobs(): no such retrieve request. Ignoring.");
+      continue;
+    }
     rr->garbageCollectRetrieveRequest(m_agentReference->getAgentAddress(), *m_agentReference, logContext, m_catalogue, true);
   }
   locks.clear();
@@ -3674,8 +3688,15 @@ void OStoreDB::RetrieveMount::requeueJobBatch(std::list<std::unique_ptr<Schedule
     OStoreDB::RetrieveJob *job = dynamic_cast<OStoreDB::RetrieveJob *>(j.get());
     auto rr = std::make_shared<objectstore::RetrieveRequest>(job->m_retrieveRequest.getAddressIfSet(), m_oStoreDB.m_objectStore);
     rrlist.push_back(rr);
-    locks.emplace_back(*rr);
-    rr->fetch();
+    try {
+      locks.emplace_back(*rr);
+      rr->fetch();
+    } catch (cta::exception::NoSuchObject &) {
+      log::ScopedParamContainer params(logContext);
+      params.add("retrieveRequestId", job->m_retrieveRequest.getAddressIfSet());
+      logContext.log(log::INFO, "In OStoreDB::RetrieveMount::requeueJobBatch(): no such retrieve request. Ignoring.");
+      continue;
+    }
     sorter.insertRetrieveRequest(rr, *m_oStoreDB.m_agentReference, std::nullopt, logContext);
   }
   locks.clear();