이 문서에서는 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'
의 백업을 반드시 확보하십시오.
데이터베이스를
'Org_MSCRM'
Microsoft SQL Server Enterprise 버전으로 복원합니다. 프로덕션 데이터베이스에서 스크립트를 실행하는 대신 데이터베이스를 백업하고 복원하는 것이 좋습니다.복원된 데이터베이스에 대해 다음 스크립트를 실행합니다.
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 ```
스크립트가 완료되면 데이터베이스를 백업할 수 있으며 이제 데이터베이스를 Microsoft SQL Server Standard 버전으로 복원할 수 있습니다.
자세한 정보
감사 기능은 Microsoft SQL Server Standard 버전에서 계속 작동합니다. 그러나 Standard 버전을 사용하는 경우 감사 기록의 전체 파티션을 삭제하는 기능을 사용할 수 없습니다.