Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł zawiera rozwiązanie problemu, którego nie można przywrócić bazy programu Microsoft Dynamics CRM 2011 z wersji Microsoft SQL Server Enterprise edition na serwer z wersją Microsoft SQL Server Standard edition.
Dotyczy: Microsoft Dynamics CRM 2011
Oryginalny numer KB: 2567984
Objawy
Podczas próby przywrócenia bazy danych programu Microsoft SQL Server Enterprise na inny serwer z uruchomionym programem Microsoft SQL Server Standard występuje następujący błąd:
Przywracanie nie powiodło się dla serwera "SQLServerName".
Dodatkowe informacje:
Wystąpił wyjątek podczas wykonywania instrukcji lub pakietu Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)
Nie można uruchomić bazy danych "Org_MSCRM" w tej wersji programu SQL Server, ponieważ zawiera funkcję partycji "AuditPFN". Tylko wersja Enterprise programu SQL Server obsługuje partycjonowanie. Nie można uruchomić bazy danych "Org_MSCRM", ponieważ niektóre funkcje bazy danych nie są dostępne w bieżącej wersji programu SQL Server. (Microsoft SQL Server, błąd: 905)
Przyczyna
Gdy program Microsoft Dynamics CRM 2011 jest instalowany przy użyciu wersji Microsoft SQL Server Enterprise, zostanie utworzona partycja na potrzeby funkcji inspekcji programu Microsoft Dynamics CRM 2011. Tabela AuditBase używa partycjonowania, które jest dostępne tylko dla programu Microsoft SQL Server Enterprise.
Rozwiązanie
Aby usunąć partycjonowanie, wykonaj następujące kroki i skrypt. Poniższy skrypt ponownie utworzy wszystkie indeksy w partycji podstawowej, a następnie pominie partycję.
Przed wykonaniem poniższych kroków pamiętaj, aby utworzyć kopię zapasową 'Org_MSCRM' bazy danych.
'Org_MSCRM'Przywróć bazę danych do wersji Microsoft SQL Server Enterprise. Zaleca się tworzenie kopii zapasowych i przywracanie bazy danych zamiast uruchamiania skryptu w produkcyjnej bazie danych.Uruchom następujący skrypt względem przywróconej bazy danych.
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 ```Po zakończeniu wykonywania skryptu możesz utworzyć kopię zapasową bazy danych, a teraz powinno być możliwe przywrócenie bazy danych do wersji Microsoft SQL Server Standard.
Więcej informacji
Funkcja inspekcji jest nadal funkcjonalna w wersji Microsoft SQL Server Standard, jednak w przypadku korzystania z wersji Standard możliwość usunięcia całej partycji historii inspekcji jest niedostępna.