Freigeben über


Fehler "Datenbank kann in dieser Edition von SQL Server nicht gestartet werden" beim Wiederherstellen einer Microsoft Dynamics CRM-Datenbank

Dieser Artikel enthält eine Lösung für das Problem, dass Sie eine Microsoft Dynamics CRM 2011-Datenbank, die mit Microsoft SQL Server Enterprise Edition erstellt wurde, nicht auf einen Server mit Microsoft SQL Server Standard Edition wiederherstellen können.

Gilt für: Microsoft Dynamics CRM 2011
Ursprüngliche KB-Nummer: 2567984

Symptome

Beim Versuch, eine Microsoft SQL Server Enterprise-Datenbank auf einem anderen Server mit Microsoft SQL Server Standard wiederherzustellen, wird die folgende Fehlermeldung angezeigt:

Fehler bei der Wiederherstellung für server 'SQLServerName'.

Weitere Informationen:
Beim Ausführen einer Transact-SQL-Anweisung oder eines Batches ist eine Ausnahme aufgetreten. (Microsoft.SqlServer.ConnectionInfo)
Die Datenbank "Org_MSCRM" kann in dieser Edition von SQL Server nicht gestartet werden, da sie eine Partitionsfunktion "AuditPFN" enthält. Das Partitionieren wird nur von SQL Server Enterprise Edition unterstützt. Datenbank "Org_MSCRM" kann nicht gestartet werden, da einige Datenbankfunktionen in der aktuellen Edition von SQL Server nicht verfügbar sind. (Microsoft SQL Server, Fehler: 905)

Ursache

Wenn Microsoft Dynamics CRM 2011 mit einer Microsoft SQL Server Enterprise Edition installiert wird, wird eine Partition für die Überwachungsfunktionalität von Microsoft Dynamics CRM 2011 erstellt. Die AuditBase-Tabelle verwendet Partitionierung, die nur für Microsoft SQL Server Enterprise verfügbar ist.

Lösung

Verwenden Sie die folgenden Schritte und Skripts, um die Partitionierung zu entfernen. Das folgende Skript erstellt alle Indizes auf der primären Partition neu und legt dann die Partition ab.

Stellen Sie sicher, dass Sie über eine Datenbanksicherung der 'Org_MSCRM' Datenbank verfügen, bevor Sie die folgenden Schritte ausführen.

  1. Stellen Sie die 'Org_MSCRM' Datenbank in einer Microsoft SQL Server Enterprise-Edition wieder her. Es wird empfohlen, die Datenbank zu sichern und wiederherzustellen, anstatt das Skript in der Produktionsdatenbank auszuführen.

  2. Führen Sie das folgende Skript für die wiederhergestellte Datenbank aus.

    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. Nachdem das Skript abgeschlossen ist, können Sie die Datenbank sichern, und jetzt sollten Sie in der Lage sein, die Datenbank in einer Microsoft SQL Server Standard Edition wiederherzustellen.

Weitere Informationen

Das Überwachungsfeature ist weiterhin in der Microsoft SQL Server Standard Edition funktionsfähig. Wenn Sie jedoch die Standard edition verwenden, ist die Möglichkeit zum Löschen einer gesamten Partition des Überwachungsverlaufs nicht verfügbar.