Partager via


Erreur « Impossible de démarrer la base de données dans cette édition de SQL Server » lors de la restauration d’une base de données Microsoft Dynamics CRM

Cet article fournit une résolution du problème que vous ne pouvez pas restaurer une base de données Microsoft Dynamics CRM 2011 avec Microsoft SQL Server Entreprise edition sur un serveur avec l’édition Microsoft SQL Server Standard.

S’applique à : Microsoft Dynamics CRM 2011
Numéro de base de connaissances d’origine : 2567984

Symptômes

Lorsque vous essayez de restaurer une base de données Microsoft SQL Server Entreprise sur un autre serveur exécutant Microsoft SQL Server Standard, vous obtenez l’erreur suivante :

La restauration a échoué pour le serveur « SQLServerName ».

Informations complémentaires :
Une exception s'est produite lors de l'exécution d'une instruction ou d'un lot Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)
La base de données « Org_MSCRM » ne peut pas être démarrée dans cette édition de SQL Server, car elle contient une fonction de partition « AuditPFN ». Seule l'édition Entreprise de SQL Server prend en charge le partitionnement. La base de données « Org_MSCRM » ne peut pas être démarrée, car certaines fonctionnalités de la base de données ne sont pas disponibles dans l’édition actuelle de SQL Server. (Microsoft SQL Server, Erreur : 905)

La cause

Lorsque Microsoft Dynamics CRM 2011 est installé à l’aide d’une édition Microsoft SQL Server Entreprise, une partition est créée pour la fonctionnalité d’audit de Microsoft Dynamics CRM 2011. La table AuditBase utilise le partitionnement disponible uniquement pour Microsoft SQL Server Entreprise.

Résolution

Utilisez les étapes et le script suivants pour supprimer le partitionnement. Le script suivant recrée tous les index sur la partition principale, puis supprime la partition.

Veillez à disposer d’une sauvegarde de la base de données avant 'Org_MSCRM' d’effectuer les étapes suivantes.

  1. Restaurez la 'Org_MSCRM' base de données dans une édition Microsoft SQL Server Entreprise. Il est recommandé de sauvegarder et de restaurer la base de données au lieu d’exécuter le script sur la base de données de production.

  2. Exécutez le script suivant sur la base de données restaurée.

    IF Object_id('tempdb..#indexesScript', 'U') IS NOT NULL
      DROP TABLE #indexesScript
    
    IF EXISTS (SELECT NAME
               FROM   sys.partition_schemes
               WHERE  NAME = 'AuditPScheme')
      BEGIN
          SELECT CASE WHEN ind.type != 1 THEN 'DROP INDEX [dbo].[AuditBase].' +
                 Quotename(ind.NAME) + ' ' ELSE ' ' END + 'CREATE ' + CASE is_unique
                 WHEN
                 1 THEN
                 'UNIQUE '
                 ELSE '' END + ind.type_desc + ' INDEX '
                 + Quotename(ind.NAME COLLATE sql_latin1_general_cp1_ci_as )
                 + ' ON [dbo].'
                 + Quotename(Object_name(object_id)) + ' ('
                 + Reverse(Substring(Reverse(( SELECT NAME + CASE WHEN
                 sc.is_descending_key = 1
                 THEN ' DESC' ELSE ' ASC' END + ',' FROM sys.index_columns sc JOIN
                 sys.columns c
                 ON sc.object_id = c.object_id AND sc.column_id = c.column_id WHERE
                 Object_name(
                 sc.object_id) = 'AuditBase' AND sc.object_id = ind.object_id AND
                 sc.index_id =
                 ind.index_id ORDER BY index_column_id ASC FOR xml path(''))), 2,
                 8000
                 )) +
                 ')' +
                 CASE WHEN ind.type = 1 THEN
                 ' WITH (DROP_EXISTING = ON) ON [PRIMARY]'
                 ELSE ' '
                 END AS Script
          INTO   #indexesScript
          FROM   sys.indexes ind
                 JOIN sys.partition_schemes ps
                   ON ind.data_space_id = ps.data_space_id
          WHERE  Object_name(object_id) = 'AuditBase'
                 AND ps.NAME = 'AuditPScheme'
                 AND is_unique_constraint = 0
    
          SELECT *
          FROM   #indexesScript
    
          DECLARE @recreateScript NVARCHAR(max)
          DECLARE indscript CURSOR FOR
            SELECT script
            FROM   #indexesScript
    
          OPEN indscript
    
          FETCH next FROM indscript INTO @recreateScript
    
          WHILE @@FETCH_STATUS = 0
            BEGIN
                BEGIN TRANSACTION t1
    
                EXECUTE Sp_executesql
                  @recreateScript
    
                IF @@ERROR > 0
                  BEGIN
                      ROLLBACK TRAN t1
    
                      DECLARE @message VARCHAR(max)
    
                      SET @message = 'Audit history recreate index failed. SQL: '
                                     + @recreateScript
    
                      RAISERROR (@message,10,1)
                  END
                ELSE
                  BEGIN
                      COMMIT TRAN
                  END
    
                FETCH next FROM indscript INTO @recreateScript
            END
    
          DROP partition scheme auditpscheme
    
          DROP partition FUNCTION auditpfn
    
          CLOSE indscript
    
          DEALLOCATE indscript
    
          DROP TABLE #indexesScript
      END 
    ```
    
    
  3. Une fois le script terminé, vous pouvez sauvegarder la base de données et maintenant vous devez être en mesure de restaurer la base de données dans une édition Microsoft SQL Server Standard.

Plus d’informations

La fonctionnalité d’audit est toujours fonctionnelle sur l’édition Microsoft SQL Server Standard. Toutefois, lorsque vous utilisez l’édition Standard, la possibilité de supprimer une partition entière de l’historique d’audit n’est pas disponible.