다음을 통해 공유


Microsoft Dynamics CRM 데이터베이스를 복원할 때 "이 버전의 SQL Server에서 데이터베이스를 시작할 수 없습니다." 오류

이 문서에서는 Microsoft SQL Server Enterprise Edition 데이터베이스가 있는 Microsoft Dynamics CRM 2011을 Microsoft SQL Server Standard 버전이 있는 서버로 복원할 수 없는 문제에 대한 해결 방법을 제공합니다.

적용 대상: Microsoft Dynamics CRM 2011
원래 KB 번호: 2567984

증상

Microsoft SQL Server Enterprise 데이터베이스를 Microsoft SQL Server Standard를 실행하는 다른 서버로 복원하려고 하면 다음 오류가 발생합니다.

서버 'SQLServerName'에 대한 복원이 실패했습니다.

추가 정보:
Transact-SQL 문 또는 일괄 처리를 실행하는 동안 예외가 발생했습니다. (Microsoft.SqlServer.ConnectionInfo)
'Org_MSCRM' 데이터베이스는 파티션 함수 'AuditPFN'을 포함하므로 이 버전의 SQL Server에서 시작할 수 없습니다. SQL Server의 Enterprise 버전만 분할을 지원합니다. 현재 버전의 SQL Server에서는 일부 데이터베이스 기능을 사용할 수 없으므로 데이터베이스 'Org_MSCRM'을(를) 시작할 수 없습니다. (Microsoft SQL Server, 오류: 905)

원인

Microsoft SQL Server Enterprise 버전을 사용하여 Microsoft Dynamics CRM 2011을 설치하면 Microsoft Dynamics CRM 2011의 감사 기능에 대한 파티션이 만들어집니다. AuditBase 테이블은 Microsoft SQL Server Enterprise에만 사용할 수 있는 분할을 사용합니다.

해결

다음 단계 및 스크립트를 사용하여 분할을 제거합니다. 다음 스크립트는 주 파티션의 모든 인덱스를 다시 만들고 파티션을 삭제합니다.

다음 단계를 수행하기 전에 데이터베이스인 'Org_MSCRM'의 백업을 반드시 확보하십시오.

  1. 데이터베이스를 'Org_MSCRM' Microsoft SQL Server Enterprise 버전으로 복원합니다. 프로덕션 데이터베이스에서 스크립트를 실행하는 대신 데이터베이스를 백업하고 복원하는 것이 좋습니다.

  2. 복원된 데이터베이스에 대해 다음 스크립트를 실행합니다.

    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. 스크립트가 완료되면 데이터베이스를 백업할 수 있으며 이제 데이터베이스를 Microsoft SQL Server Standard 버전으로 복원할 수 있습니다.

자세한 정보

감사 기능은 Microsoft SQL Server Standard 버전에서 계속 작동합니다. 그러나 Standard 버전을 사용하는 경우 감사 기록의 전체 파티션을 삭제하는 기능을 사용할 수 없습니다.