diff --git a/sa/db/boulder_sa/20230419000000_CombinedSchema.sql b/sa/db/boulder_sa/20230419000000_CombinedSchema.sql
index c2fa91c9e..6674fc3d9 100644
--- a/sa/db/boulder_sa/20230419000000_CombinedSchema.sql
+++ b/sa/db/boulder_sa/20230419000000_CombinedSchema.sql
@@ -1,7 +1,9 @@
 -- +migrate Up
 -- SQL in section 'Up' is executed when this migration is applied
 
-CREATE TABLE `authz2` (
+DROP TABLE IF EXISTS `authz`;
+
+CREATE TABLE IF NOT EXISTS `authz2` (
   `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
   `identifierType` tinyint(4) NOT NULL,
   `identifierValue` varchar(255) NOT NULL,
@@ -20,7 +22,7 @@ CREATE TABLE `authz2` (
   KEY `expires_idx` (`expires`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `blockedKeys` (
+CREATE TABLE IF NOT EXISTS `blockedKeys` (
   `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
   `keyHash` binary(32) NOT NULL,
   `added` datetime NOT NULL,
@@ -33,7 +35,7 @@ CREATE TABLE `blockedKeys` (
   KEY `extantCertificatesChecked_idx` (`extantCertificatesChecked`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `certificateStatus` (
+CREATE TABLE IF NOT EXISTS `certificateStatus` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `serial` varchar(255) NOT NULL,
   `subscriberApproved` tinyint(1) DEFAULT 0,
@@ -53,7 +55,7 @@ CREATE TABLE `certificateStatus` (
   KEY `notAfter_idx` (`notAfter`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `certificates` (
+CREATE TABLE IF NOT EXISTS `certificates` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `registrationID` bigint(20) NOT NULL,
   `serial` varchar(255) NOT NULL,
@@ -67,7 +69,7 @@ CREATE TABLE `certificates` (
   KEY `issued_idx` (`issued`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `certificatesPerName` (
+CREATE TABLE IF NOT EXISTS `certificatesPerName` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `eTLDPlusOne` varchar(255) NOT NULL,
   `time` datetime NOT NULL,
@@ -76,7 +78,22 @@ CREATE TABLE `certificatesPerName` (
   UNIQUE KEY `eTLDPlusOne_time_idx` (`eTLDPlusOne`,`time`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `fqdnSets` (
+CREATE TABLE IF NOT EXISTS `challenges` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `authorizationID` varchar(255) NOT NULL,
+  `LockCol` bigint(20) DEFAULT NULL,
+  `type` varchar(255) NOT NULL,
+  `status` varchar(255) NOT NULL,
+  `error` mediumblob DEFAULT NULL,
+  `validated` datetime DEFAULT NULL,
+  `token` varchar(255) NOT NULL,
+  `validationRecord` mediumblob DEFAULT NULL,
+  `keyAuthorization` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  KEY `authorizationID_challenges_idx` (`authorizationID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE IF NOT EXISTS `fqdnSets` (
   `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
   `setHash` binary(32) NOT NULL,
   `serial` varchar(255) NOT NULL,
@@ -89,7 +106,7 @@ CREATE TABLE `fqdnSets` (
   KEY `setHash_issued_idx` (`setHash`,`issued`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `incidents` (
+CREATE TABLE IF NOT EXISTS `incidents` (
   `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
   `serialTable` varchar(128) NOT NULL,
   `url` varchar(1024) NOT NULL,
@@ -98,7 +115,7 @@ CREATE TABLE `incidents` (
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `issuedNames` (
+CREATE TABLE IF NOT EXISTS `issuedNames` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `reversedName` varchar(640) CHARACTER SET ascii NOT NULL,
   `notBefore` datetime NOT NULL,
@@ -108,7 +125,7 @@ CREATE TABLE `issuedNames` (
   KEY `reversedName_notBefore_Idx` (`reversedName`,`notBefore`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `keyHashToSerial` (
+CREATE TABLE IF NOT EXISTS `keyHashToSerial` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `keyHash` binary(32) NOT NULL,
   `certNotAfter` datetime NOT NULL,
@@ -118,7 +135,7 @@ CREATE TABLE `keyHashToSerial` (
   KEY `keyHash_certNotAfter` (`keyHash`,`certNotAfter`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `newOrdersRL` (
+CREATE TABLE IF NOT EXISTS `newOrdersRL` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `regID` bigint(20) NOT NULL,
   `time` datetime NOT NULL,
@@ -127,7 +144,7 @@ CREATE TABLE `newOrdersRL` (
   UNIQUE KEY `regID_time_idx` (`regID`,`time`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `orderFqdnSets` (
+CREATE TABLE IF NOT EXISTS `orderFqdnSets` (
   `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
   `setHash` binary(32) NOT NULL,
   `orderID` bigint(20) NOT NULL,
@@ -139,14 +156,14 @@ CREATE TABLE `orderFqdnSets` (
   KEY `orderFqdnSets_registrationID_registrations` (`registrationID`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `orderToAuthz2` (
+CREATE TABLE IF NOT EXISTS `orderToAuthz2` (
   `orderID` bigint(20) NOT NULL,
   `authzID` bigint(20) NOT NULL,
   PRIMARY KEY (`orderID`,`authzID`),
   KEY `authzID` (`authzID`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `orders` (
+CREATE TABLE IF NOT EXISTS `orders` (
   `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
   `registrationID` bigint(20) NOT NULL,
   `expires` datetime NOT NULL,
@@ -162,7 +179,7 @@ CREATE TABLE `orders` (
 -- Note: This table's name is a historical artifact and it is now
 -- used to store linting certificates, not precertificates.
 -- See #6807.
-CREATE TABLE `precertificates` (
+CREATE TABLE IF NOT EXISTS `precertificates` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `registrationID` bigint(20) NOT NULL,
   `serial` varchar(255) NOT NULL,
@@ -175,7 +192,7 @@ CREATE TABLE `precertificates` (
   KEY `issued_precertificates_idx` (`issued`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `registrations` (
+CREATE TABLE IF NOT EXISTS `registrations` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `jwk` mediumblob NOT NULL,
   `jwk_sha256` varchar(255) NOT NULL,
@@ -190,7 +207,7 @@ CREATE TABLE `registrations` (
   KEY `initialIP_createdAt` (`initialIP`,`createdAt`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `requestedNames` (
+CREATE TABLE IF NOT EXISTS `requestedNames` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `orderID` bigint(20) NOT NULL,
   `reversedName` varchar(253) CHARACTER SET ascii NOT NULL,
@@ -199,9 +216,23 @@ CREATE TABLE `requestedNames` (
   KEY `reversedName_idx` (`reversedName`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
+CREATE TABLE IF NOT EXISTS `revokedCertificates` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `issuerID` bigint(20) NOT NULL,
+  `serial` varchar(255) NOT NULL,
+  `notAfterHour` datetime NOT NULL,
+  `shardIdx` bigint(20) NOT NULL,
+  `revokedDate` datetime NOT NULL,
+  `revokedReason` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `issuerID_shardIdx_notAfterHour_idx` (`issuerID`, `shardIdx`, `notAfterHour`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
 -- Tables below have foreign key constraints, so are created after all other tables.
 
-CREATE TABLE `serials` (
+DROP TABLE IF EXISTS `sctReceipts`;
+
+CREATE TABLE IF NOT EXISTS `serials` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `registrationID` bigint(20) NOT NULL,
   `serial` varchar(255) NOT NULL,
@@ -219,6 +250,18 @@ CREATE TABLE `serials` (
 -- First set of tables have foreign key constraints, so are dropped first.
 DROP TABLE `serials`;
 
+CREATE TABLE IF NOT EXISTS `authz` (
+  `id` varchar(255) NOT NULL,
+  `identifier` varchar(255) NOT NULL,
+  `registrationID` bigint(20) NOT NULL,
+  `status` varchar(255) NOT NULL,
+  `expires` datetime DEFAULT NULL,
+  `combinations` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `registrationID_identifier_status_expires_authz_idx` (`registrationID`,`identifier`,`status`,`expires`),
+  CONSTRAINT `regId_authz` FOREIGN KEY (`registrationID`) REFERENCES `registrations` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
 DROP TABLE `authz2`;
 DROP TABLE `blockedKeys`;
 DROP TABLE `certificateStatus`;
@@ -230,8 +273,44 @@ DROP TABLE `issuedNames`;
 DROP TABLE `keyHashToSerial`;
 DROP TABLE `newOrdersRL`;
 DROP TABLE `orderFqdnSets`;
+
+CREATE TABLE IF NOT EXISTS `orderToAuthz` (
+  `orderID` bigint(20) NOT NULL,
+  `authzID` varchar(255) NOT NULL,
+  PRIMARY KEY (`orderID`,`authzID`),
+  KEY `authzID` (`authzID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
 DROP TABLE `orderToAuthz2`;
 DROP TABLE `orders`;
+
+CREATE TABLE IF NOT EXISTS `pendingAuthorizations` (
+  `id` varchar(255) NOT NULL,
+  `identifier` varchar(255) NOT NULL,
+  `registrationID` bigint(20) NOT NULL,
+  `status` varchar(255) NOT NULL,
+  `expires` datetime DEFAULT NULL,
+  `combinations` varchar(255) NOT NULL,
+  `LockCol` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `identifier_registrationID_status_expires_idx` (`identifier`,`registrationID`,`status`,`expires`),
+  KEY `registrationID_status_expires_idx` (`registrationID`,`status`,`expires`),
+  CONSTRAINT `regId_pending_authz` FOREIGN KEY (`registrationID`) REFERENCES `registrations` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE IF NOT EXISTS `sctReceipts` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `sctVersion` tinyint(1) NOT NULL,
+  `logID` varchar(255) NOT NULL,
+  `timestamp` bigint(20) NOT NULL,
+  `extensions` blob DEFAULT NULL,
+  `signature` blob DEFAULT NULL,
+  `certificateSerial` varchar(255) NOT NULL,
+  `LockCol` bigint(20) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `certificateSerial_logID` (`certificateSerial`,`logID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
 DROP TABLE `precertificates`;
 DROP TABLE `registrations`;
 DROP TABLE `requestedNames`;
