本文提供一個解決方案,說明您無法使用 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' 無法在此版本的 SQL Server 中啟動,因為它包含數據分割函數 'AuditPFN'。 只有 Enterprise Edition 的 SQL Server 才支援分割區。 無法啟動資料庫 『Org_MSCRM』,因為目前版本的 SQL Server 中無法使用某些資料庫功能。 (Microsoft SQL Server,錯誤:905)
原因
使用 Microsoft SQL Server Enterprise 版本安裝 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 版本時,無法刪除稽核記錄的整個分割區。