# Before you upgrade

> Complete pre-upgrade steps to prepare your Orchestrator environment before upgrading to 2023.4 or later

Please make sure to perform these steps before you upgrade to 2023.4+. They help ensure that, once the upgrade is done, you can get started in no time, with zero issues.

1. [Back up](https://docs.uipath.com/orchestrator/standalone/2024.10/installation-guide/backup-and-restore#backup-and-restore) your database to remove any data loss risks.
2. Run the pre-upgrade database maintenance script below.

   This script removes all expired or consumed grants from the database. This helps speed up the `[identity].[PersistedGrants]` primary key and index re-creation, and, as such, the database migration.

   ```
   DECLARE @Now DATETIME2 = GETUTCDATE()
   DECLARE @ConsumedGrantsGracePeriod DATETIME2 = DATEADD(hour, -2, @Now)

   DECLARE @ConsumedDeleted int = 1
   DECLARE @ExpiredDeleted int = 1
   DECLARE @BatchSize int = 500
   DECLARE @ConsumedBatchesDeleted int = 0
   DECLARE @ExpiredBatchesDeleted int = 0

   SET LOCK_TIMEOUT 0
   SET DEADLOCK_PRIORITY LOW

   WHILE (@ConsumedDeleted=1 OR @ExpiredDeleted=1)
   BEGIN

     IF @ConsumedDeleted=1
     BEGIN
       BEGIN TRY
         DELETE TOP(@BatchSize) FROM [identity].[PersistedGrants] WHERE [ConsumedTime] IS NOT NULL AND [ConsumedTime] < @ConsumedGrantsGracePeriod AND [Type] <> 'reference_token'
         IF @@ROWCOUNT = 0
           SET @ConsumedDeleted=0
         ELSE
           SET @ConsumedBatchesDeleted = @ConsumedBatchesDeleted + 1
       END TRY
       BEGIN CATCH
         PRINT 'Failed to delete consumed grants'
       END CATCH
     END

     IF @ExpiredDeleted=1
     BEGIN
       BEGIN TRY
         DELETE TOP(@BatchSize) FROM [identity].[PersistedGrants] WHERE [Expiration] < @Now AND [Type] <> 'reference_token'
         IF @@ROWCOUNT = 0
           SET @ExpiredDeleted=0
         ELSE
           SET @ExpiredBatchesDeleted = @ExpiredBatchesDeleted + 1
       END TRY
       BEGIN CATCH
         PRINT 'Failed to delete expired grants'
       END CATCH
     END

     PRINT 'Consumed batches deleted: ' + CONVERT(nvarchar(32), @ConsumedBatchesDeleted)
     PRINT 'Expired batches deleted: ' + CONVERT(nvarchar(32), @ExpiredBatchesDeleted)

     -- Wait for 10 seconds between deletes
     IF (@ExpiredDeleted=1 OR @ConsumedDeleted=1)
       WAITFOR DELAY '00:00:05.000'

   END
   ```
3. [Migrate](https://docs.uipath.com/orchestrator/standalone/2022.10/user-guide/migrating-from-classic-folders-to-modern-folders) your classic folders to modern folders, so as to ensure uninterrupted executions. [These](https://docs.uipath.com/overview/other/latest/overview/classic-folders-removal) are the changes that you can expect at this point in the classic folders removal process.
