本文提供了无法将具有 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)
无法在此版本的 SQL Server 中启动数据库“Org_MSCRM”,因为它包含分区函数“AuditPFN”。 只有 SQL Server Enterprise Edition 支持分区。 无法启动数据库“Org_MSCRM”,因为某些数据库功能在当前版本的 SQL Server 中不可用。 (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 Edition。 建议备份和还原数据库,而不是在生产数据库上运行脚本。针对还原的数据库运行以下脚本。
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 版本。
详细信息
审核功能在 sql Server Standard 版本Microsoft仍然有效,但是,使用标准版时,删除审核历史记录的整个分区的功能不可用。