diff --git a/src/main/java/eu/dissco/core/handlemanager/exceptions/CopyDatabaseException.java b/src/main/java/eu/dissco/core/handlemanager/exceptions/CopyDatabaseException.java
deleted file mode 100644
index cd261867..00000000
--- a/src/main/java/eu/dissco/core/handlemanager/exceptions/CopyDatabaseException.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package eu.dissco.core.handlemanager.exceptions;
-
-public class CopyDatabaseException extends Exception {
-
-  public CopyDatabaseException(String s) {
-    super(s);
-  }
-
-}
diff --git a/src/main/java/eu/dissco/core/handlemanager/repository/BatchInserter.java b/src/main/java/eu/dissco/core/handlemanager/repository/BatchInserter.java
index 3660d641..e01d7934 100644
--- a/src/main/java/eu/dissco/core/handlemanager/repository/BatchInserter.java
+++ b/src/main/java/eu/dissco/core/handlemanager/repository/BatchInserter.java
@@ -2,7 +2,7 @@
 
 import eu.dissco.core.handlemanager.domain.repsitoryobjects.HandleAttribute;
 import eu.dissco.core.handlemanager.domain.repsitoryobjects.HandleFullRow;
-import eu.dissco.core.handlemanager.exceptions.CopyDatabaseException;
+import eu.dissco.core.handlemanager.exceptions.PidCreationException;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -21,7 +21,7 @@ public class BatchInserter {
   private final CopyManager copyManager;
 
   public void batchCopy(long recordTimestamp, List<HandleAttribute> handleAttributes)
-      throws CopyDatabaseException {
+      throws PidCreationException {
     var rows = handleAttributes.stream()
         .map(attribute -> new HandleFullRow(attribute, recordTimestamp)).toList();
     try (var outputStream = new ByteArrayOutputStream()) {
@@ -29,19 +29,10 @@ public void batchCopy(long recordTimestamp, List<HandleAttribute> handleAttribut
         outputStream.write(row.getCsvRow());
       }
       var inputStream = new ByteArrayInputStream(outputStream.toByteArray());
-      var rowsChanged = copyManager.copyIn("COPY handles FROM stdin DELIMITER ','", inputStream);
-      verifyAllRowsPosted(rowsChanged, handleAttributes.size());
+      copyManager.copyIn("COPY handles FROM stdin DELIMITER ','", inputStream);
     } catch (IOException | SQLException e) {
       log.error("Sql error: ", e);
-      throw new CopyDatabaseException(e.getMessage());
-    }
-  }
-
-  private void verifyAllRowsPosted(long rowsChanged, int rowsToPost)
-      throws CopyDatabaseException {
-    if (rowsChanged != rowsToPost) {
-      log.error("Expected to post {} rows, but only {} rows changed", rowsToPost, rowsChanged);
-      throw new CopyDatabaseException("Failed to post correct rows");
+      throw new PidCreationException("Unable to insert handles into database.");
     }
   }
 }
diff --git a/src/main/java/eu/dissco/core/handlemanager/repository/PidRepository.java b/src/main/java/eu/dissco/core/handlemanager/repository/PidRepository.java
index da12a7ea..f4d3ff30 100644
--- a/src/main/java/eu/dissco/core/handlemanager/repository/PidRepository.java
+++ b/src/main/java/eu/dissco/core/handlemanager/repository/PidRepository.java
@@ -8,7 +8,7 @@
 import static eu.dissco.core.handlemanager.domain.FdoProfile.PRIMARY_SPECIMEN_OBJECT_ID;
 
 import eu.dissco.core.handlemanager.domain.repsitoryobjects.HandleAttribute;
-import eu.dissco.core.handlemanager.exceptions.CopyDatabaseException;
+import eu.dissco.core.handlemanager.exceptions.PidCreationException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -147,7 +147,7 @@ private HandleAttribute mapToAttribute(Record4<Integer, byte[], byte[], byte[]>
 
   // Post
   public void postAttributesToDb(long recordTimestamp, List<HandleAttribute> handleAttributes)
-      throws CopyDatabaseException {
+      throws PidCreationException {
     batchInserter.batchCopy(recordTimestamp, handleAttributes);
   }
 
diff --git a/src/main/java/eu/dissco/core/handlemanager/service/DoiService.java b/src/main/java/eu/dissco/core/handlemanager/service/DoiService.java
index 2701a91d..46dcf6b3 100644
--- a/src/main/java/eu/dissco/core/handlemanager/service/DoiService.java
+++ b/src/main/java/eu/dissco/core/handlemanager/service/DoiService.java
@@ -14,7 +14,6 @@
 import eu.dissco.core.handlemanager.domain.requests.objects.DigitalSpecimenRequest;
 import eu.dissco.core.handlemanager.domain.requests.objects.MediaObjectRequest;
 import eu.dissco.core.handlemanager.domain.requests.vocabulary.specimen.ObjectType;
-import eu.dissco.core.handlemanager.exceptions.CopyDatabaseException;
 import eu.dissco.core.handlemanager.exceptions.InvalidRequestException;
 import eu.dissco.core.handlemanager.exceptions.PidCreationException;
 import eu.dissco.core.handlemanager.exceptions.PidResolutionException;
@@ -94,14 +93,9 @@ public JsonApiWrapperWrite createRecords(
 
     log.info("Persisting new DOIs to db");
     var recordTimestamp = Instant.now().getEpochSecond();
-    try {
-      pidRepository.postAttributesToDb(recordTimestamp, handleAttributes);
-    } catch (CopyDatabaseException e) {
-      log.info("Rolling back handles");
-      var handlesString = handles.stream().map(h -> new String(h, StandardCharsets.UTF_8)).toList();
-      rollbackHandles(handlesString);
-      throw new PidCreationException("Unable to insert handles into database");
-    }
+
+    pidRepository.postAttributesToDb(recordTimestamp, handleAttributes);
+
     return new JsonApiWrapperWrite(formatCreateRecords(handleAttributes, recordTypes));
   }
 
diff --git a/src/main/java/eu/dissco/core/handlemanager/service/HandleService.java b/src/main/java/eu/dissco/core/handlemanager/service/HandleService.java
index d3785158..5651193c 100644
--- a/src/main/java/eu/dissco/core/handlemanager/service/HandleService.java
+++ b/src/main/java/eu/dissco/core/handlemanager/service/HandleService.java
@@ -21,7 +21,6 @@
 import eu.dissco.core.handlemanager.domain.requests.objects.OrganisationRequest;
 import eu.dissco.core.handlemanager.domain.requests.objects.SourceSystemRequest;
 import eu.dissco.core.handlemanager.domain.requests.vocabulary.specimen.ObjectType;
-import eu.dissco.core.handlemanager.exceptions.CopyDatabaseException;
 import eu.dissco.core.handlemanager.exceptions.InvalidRequestException;
 import eu.dissco.core.handlemanager.exceptions.PidCreationException;
 import eu.dissco.core.handlemanager.exceptions.PidResolutionException;
@@ -145,14 +144,7 @@ public JsonApiWrapperWrite createRecords(
 
     validateDigitalSpecimens(digitalSpecimenList);
     log.info("Persisting new handles to db");
-    try {
-      pidRepository.postAttributesToDb(recordTimestamp, handleAttributes);
-    } catch (CopyDatabaseException e) {
-      log.info("Rolling back handles");
-      var handlesString = handles.stream().map(h -> new String(h, StandardCharsets.UTF_8)).toList();
-      rollbackHandles(handlesString);
-      throw new PidCreationException("Unable to insert handles into database");
-    }
+    pidRepository.postAttributesToDb(recordTimestamp, handleAttributes);
     return new JsonApiWrapperWrite(formatCreateRecords(handleAttributes, recordTypes));
   }
 
diff --git a/src/test/java/eu/dissco/core/handlemanager/repository/BatchInserterTest.java b/src/test/java/eu/dissco/core/handlemanager/repository/BatchInserterTest.java
index e8851fbc..bc710fa0 100644
--- a/src/test/java/eu/dissco/core/handlemanager/repository/BatchInserterTest.java
+++ b/src/test/java/eu/dissco/core/handlemanager/repository/BatchInserterTest.java
@@ -10,7 +10,7 @@
 import eu.dissco.core.handlemanager.database.jooq.tables.Handles;
 import eu.dissco.core.handlemanager.domain.FdoProfile;
 import eu.dissco.core.handlemanager.domain.repsitoryobjects.HandleAttribute;
-import eu.dissco.core.handlemanager.exceptions.CopyDatabaseException;
+import eu.dissco.core.handlemanager.exceptions.PidCreationException;
 import java.nio.charset.StandardCharsets;
 import java.sql.DriverManager;
 import java.sql.SQLException;
@@ -55,7 +55,7 @@ void testBatchInsertIllegalChar() {
     );
 
     // Then
-    assertThrows(CopyDatabaseException.class,
+    assertThrows(PidCreationException.class,
         () -> batchInserter.batchCopy(CREATED.getEpochSecond(), attributes));
   }
 
diff --git a/src/test/java/eu/dissco/core/handlemanager/service/DoiServiceTest.java b/src/test/java/eu/dissco/core/handlemanager/service/DoiServiceTest.java
index 338439e6..707fce3a 100644
--- a/src/test/java/eu/dissco/core/handlemanager/service/DoiServiceTest.java
+++ b/src/test/java/eu/dissco/core/handlemanager/service/DoiServiceTest.java
@@ -10,7 +10,6 @@
 import static eu.dissco.core.handlemanager.testUtils.TestUtils.RECORD_TYPE_HANDLE;
 import static eu.dissco.core.handlemanager.testUtils.TestUtils.genCreateRecordRequest;
 import static eu.dissco.core.handlemanager.testUtils.TestUtils.genDigitalSpecimenAttributes;
-import static eu.dissco.core.handlemanager.testUtils.TestUtils.genDoiRecordAttributes;
 import static eu.dissco.core.handlemanager.testUtils.TestUtils.givenDigitalSpecimenRequestObjectNullOptionals;
 import static eu.dissco.core.handlemanager.testUtils.TestUtils.givenDoiRecordRequestObject;
 import static eu.dissco.core.handlemanager.testUtils.TestUtils.givenRecordResponseWriteSmallResponse;
@@ -18,18 +17,13 @@
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyList;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.BDDMockito.given;
-import static org.mockito.BDDMockito.then;
-import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mockStatic;
 
 import eu.dissco.core.handlemanager.Profiles;
 import eu.dissco.core.handlemanager.domain.repsitoryobjects.HandleAttribute;
 import eu.dissco.core.handlemanager.domain.requests.vocabulary.specimen.ObjectType;
-import eu.dissco.core.handlemanager.exceptions.CopyDatabaseException;
 import eu.dissco.core.handlemanager.exceptions.InvalidRequestException;
-import eu.dissco.core.handlemanager.exceptions.PidCreationException;
 import eu.dissco.core.handlemanager.properties.ProfileProperties;
 import eu.dissco.core.handlemanager.repository.PidRepository;
 import java.nio.charset.StandardCharsets;
@@ -122,29 +116,6 @@ void testCreateDoiRecordDoiProfile() throws Exception {
     assertThat(responseReceived).isEqualTo(responseExpected);
   }
 
-  @Test
-  void testCreateDoiRecordDbException() throws Exception {
-    // Given
-    byte[] handle = handles.get(0);
-    var request = genCreateRecordRequest(givenDigitalSpecimenRequestObjectNullOptionals(),
-        RECORD_TYPE_DS);
-    List<HandleAttribute> doiRecord = genDoiRecordAttributes(handle, ObjectType.DIGITAL_SPECIMEN);
-
-    given(pidNameGeneratorService.genHandleList(1)).willReturn(new ArrayList<>(List.of(handle)));
-    given(fdoRecordService.prepareDigitalSpecimenRecordAttributes(any(), any(),
-        eq(ObjectType.DIGITAL_SPECIMEN))).willReturn(
-        doiRecord);
-    doThrow(CopyDatabaseException.class).when(pidRepository)
-        .postAttributesToDb(CREATED.getEpochSecond(), doiRecord);
-
-    // When
-    assertThrows(PidCreationException.class, () -> service.createRecords(List.of(request)));
-
-    // Then
-    then(pidRepository).should()
-        .rollbackHandles(List.of(new String(handle, StandardCharsets.UTF_8)));
-  }
-
   @Test
   void testCreateInvalidType() {
     // Given
diff --git a/src/test/java/eu/dissco/core/handlemanager/service/HandleServiceTest.java b/src/test/java/eu/dissco/core/handlemanager/service/HandleServiceTest.java
index c62ee732..80cf8526 100644
--- a/src/test/java/eu/dissco/core/handlemanager/service/HandleServiceTest.java
+++ b/src/test/java/eu/dissco/core/handlemanager/service/HandleServiceTest.java
@@ -63,7 +63,6 @@
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.BDDMockito.given;
 import static org.mockito.BDDMockito.then;
-import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mockStatic;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -73,7 +72,6 @@
 import eu.dissco.core.handlemanager.domain.jsonapi.JsonApiWrapperWrite;
 import eu.dissco.core.handlemanager.domain.repsitoryobjects.HandleAttribute;
 import eu.dissco.core.handlemanager.domain.requests.vocabulary.specimen.ObjectType;
-import eu.dissco.core.handlemanager.exceptions.CopyDatabaseException;
 import eu.dissco.core.handlemanager.exceptions.InvalidRequestException;
 import eu.dissco.core.handlemanager.exceptions.PidCreationException;
 import eu.dissco.core.handlemanager.exceptions.PidResolutionException;
@@ -344,27 +342,6 @@ void testCreateDoiRecord() throws Exception {
     assertThat(responseReceived).isEqualTo(responseExpected);
   }
 
-  @Test
-  void testCreateDoiRecordDbException() throws Exception {
-    // Given
-    byte[] handle = handles.get(0);
-    var request = genCreateRecordRequest(givenDoiRecordRequestObject(), RECORD_TYPE_DOI);
-    List<HandleAttribute> doiRecord = genDoiRecordAttributes(handle, ObjectType.HANDLE);
-
-    given(pidNameGeneratorService.genHandleList(1)).willReturn(new ArrayList<>(List.of(handle)));
-    given(fdoRecordService.prepareDoiRecordAttributes(any(), any(), eq(ObjectType.DOI))).willReturn(
-        doiRecord);
-    doThrow(CopyDatabaseException.class).when(pidRepository)
-        .postAttributesToDb(CREATED.getEpochSecond(), doiRecord);
-
-    // When
-    assertThrows(PidCreationException.class, () -> service.createRecords(List.of(request)));
-
-    // Then
-    then(pidRepository).should()
-        .rollbackHandles(List.of(new String(handle, StandardCharsets.UTF_8)));
-  }
-
   @Test
   void testCreateDigitalSpecimen() throws Exception {
     // Given