Delen via


Fout 'Database kan niet worden gestart in deze editie van SQL Server' bij het herstellen van een Microsoft Dynamics CRM-database

Dit artikel bevat een oplossing voor het probleem dat u een Microsoft Dynamics CRM 2011 met Microsoft SQL Server Enterprise-editiedatabase niet kunt herstellen naar een server met Microsoft SQL Server Standard-editie.

Van toepassing op: Microsoft Dynamics CRM 2011
Oorspronkelijk KB-nummer: 2567984

Symptomen

Wanneer u een Microsoft SQL Server Enterprise-database probeert te herstellen naar een andere server waarop Microsoft SQL Server Standard wordt uitgevoerd, krijgt u de volgende fout:

Herstellen is mislukt voor Server SQLServerName.

Aanvullende informatie:
Er is een uitzondering opgetreden tijdens het uitvoeren van een Transact-SQL-instructie of batch. (Microsoft.SqlServer.ConnectionInfo)
Database 'Org_MSCRM' kan niet worden gestart in deze editie van SQL Server omdat deze een partitiefunctie AuditPFN bevat. Alleen enterprise-editie van SQL Server ondersteunt partitionering. Database 'Org_MSCRM' kan niet worden gestart omdat een deel van de databasefunctionaliteit niet beschikbaar is in de huidige editie van SQL Server. (Microsoft SQL Server, fout: 905)

Oorzaak

Wanneer Microsoft Dynamics CRM 2011 is geïnstalleerd met een Microsoft SQL Server Enterprise-editie, wordt er een partitie gemaakt voor de controlefunctionaliteit van Microsoft Dynamics CRM 2011. De AuditBase-tabel maakt gebruik van partitionering die alleen beschikbaar is voor Microsoft SQL Server Enterprise.

Resolutie

Gebruik de volgende stappen en scripts om de partitionering te verwijderen. Met het volgende script worden alle indexen op de primaire partitie opnieuw gemaakt en vervolgens wordt de partitie verwijderd.

Zorg ervoor dat u een databaseback-up van de 'Org_MSCRM' database hebt voordat u de volgende stappen uitvoert.

  1. 'Org_MSCRM' De database herstellen naar een Microsoft SQL Server Enterprise-editie. Het is raadzaam om een back-up te maken van de database en deze te herstellen in plaats van het script uit te voeren op de productiedatabase.

  2. Voer het volgende script uit op de herstelde database.

    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. Zodra het script is voltooid, kunt u een back-up maken van de database en nu moet u de database kunnen herstellen naar een Microsoft SQL Server Standard-editie.

Meer informatie

De controlefunctie is nog steeds functioneel in de Microsoft SQL Server Standard-editie, maar wanneer u de Standard-editie gebruikt, is de mogelijkheid om een volledige partitie van de controlegeschiedenis te verwijderen niet beschikbaar.