Aracılığıyla paylaş


Microsoft Dynamics CRM veritabanını geri yüklerken "Veritabanı SQL Server'ın bu sürümünde başlatılamıyor" hatası

Bu makalede, Microsoft SQL Server Enterprise sürümlü bir Microsoft Dynamics CRM 2011 veritabanını Microsoft SQL Server Standard sürümüne sahip bir sunucuya geri yükleyememe sorununun çözümü sağlanır.

Şunlar için geçerlidir: Microsoft Dynamics CRM 2011
Özgün KB numarası: 2567984

Belirtiler

Microsoft SQL Server Enterprise veritabanını Microsoft SQL Server Standard çalıştıran başka bir sunucuya geri yüklemeye çalışırken aşağıdaki hatayı alıyorsunuz:

'SQLServerName' Sunucusu için geri yükleme başarısız oldu.

Ek bilgi:
Transact-SQL ifadesi veya toplu işlemi yürütülürken bir istisna oluştu. (Microsoft.SqlServer.ConnectionInfo)
'Org_MSCRM' veritabanı, 'AuditPFN' bölüm işlevi içerdiğinden SQL Server'ın bu sürümünde başlatılamıyor. Yalnızca SQL Server'ın Enterprise sürümü bölümleme işlemini destekler. Veritabanı işlevlerinin bazıları SQL Server'ın geçerli sürümünde kullanılamadığından 'Org_MSCRM' veritabanı başlatılamıyor. (Microsoft SQL Server, Hata: 905)

Neden

Microsoft Dynamics CRM 2011 bir Microsoft SQL Server Enterprise sürümü kullanılarak yüklendiğinde, Microsoft Dynamics CRM 2011'in denetim işlevselliği için bir bölüm oluşturulur. AuditBase tablosu, yalnızca Microsoft SQL Server Enterprise için kullanılabilen bölümleme kullanır.

Çözüm

Bölümleme işlemini kaldırmak için aşağıdaki Adımları ve Betiği kullanın. Aşağıdaki betik Birincil bölümdeki tüm dizinleri yeniden oluşturur ve ardından bölümü siler.

Aşağıdaki adımları gerçekleştirmeden önce veritabanının 'Org_MSCRM' yedeğinin olduğundan emin olun.

  1. 'Org_MSCRM' Veritabanını bir Microsoft SQL Server Enterprise sürümüne geri yükleyin. Üretim veritabanında betiği çalıştırmak yerine, veritabanını yedeklemeniz ve geri yüklemeniz önerilir.

  2. Geri yüklenen veritabanında aşağıdaki betiği çalıştırın.

    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. Betik tamamlandıktan sonra veritabanını yedekleyebilirsiniz ve şimdi veritabanını bir Microsoft SQL Server Standard sürümüne geri yükleyebilmeniz gerekir.

Daha Fazla Bilgi

Denetim özelliği Microsoft SQL Server Standard sürümünde hala işlevseldir, ancak Standard sürümü kullanılırken denetim geçmişinin bir bölümünün tamamını silme özelliği kullanılamaz.