четверг, 30 июня 2011 г.

Sharepoint 2010: Ошибки миграции.


Сама по себе миграция, на мой взгляд, никогда не проходит полностью без ошибок. В момент миграции происходят всякие изощеренные ошибки. Но даже, если при миграции не было ни одной ошибки, то будьте готовы натолкнуться на них при использовании смигрированной системы. В данной статье я опишу те ошибки, с которыми мне имело счастье столкнуться. Статья будет периодически пополняться, поэтому не прошу считать её законченной :)
Итак начнем.
Ошибки во время миграции
Во время миграции в файлах лога могут встречаться как ошибки, так и предупреждения. Давайте разберем их.
При preupgradecheck возникает ошибка InvalidDatabaseSchema
Found a missing feature Id
[powershell] [SPContentDatabaseSequence] [ERROR] [2/11/2011 5:37:26 PM]: Found a missing feature Id = [15c28c5f-c1d2-4a22-b93c-3267c4db0555]
Решение: Необходимо найти неустановленные фичи, используя запрос
DELETE FROM [WSS_Content_1000].[dbo].[Features]
WHERE FeatureId in ('9500b5fd-c36c-419c-9a63-7aa43d6ca93e', 'bd3ef2d0-3590-49b5-bc85-e676d3a8ddfc')
GO
Или воспользовавшись утилитой удаления фич http://featureadmin.codeplex.com/ (не смог воспользоваться, т.к. поздно встретил).
Можно также воспользоваться утилитами Forcedeletelist и Databaserepair (восстанавливает только объекты Sharepoint, если были как-то удалены родительские).
Неопределяемые веб-части
Чтобы разрешить проблемы с проблемными веб-частями, которые утилита миграция не может определить:
SELECT tp_WebPartTypeId, COUNT(1), tp_Assembly, tp_Class
FROM AllWebParts (NOLOCK)
WHERE tp_WebPartTypeId IS NOT NULL GROUP BY tp_WebPartTypeId, tp_Assembly, tp_Class
SELECT Webs.FullUrl, Webs.Title, AllDocs.DirName, AllDocs.LeafName
FROM AllDocs, Sites, AllWebParts, Webs
WHERE Webs.Id = Sites.RootWebId AND AllDocs.Id = AllWebParts.tp_PageUrlID
AND Sites.Id = AllDocs.SiteId AND tp_WebPartTypeId IN (
    SELECT DISTINCT tp_WebPartTypeId FROM AllWebParts (NOLOCK)
    WHERE tp_WebPartTypeId IS NOT NULL AND tp_Assembly IS NULL)
Здесь в tp_Source можно глянуть определение веб-части.
Database [xxxx] has reference(s) to a missing feature: Id = [xxxxxx]» или «WebPart class [xxx] is referenced [3] times in the database xxxx], but  is not installed on the current farm...
Можно воспользоваться утилитой http://sp2010extmigrareport.codeplex.com/. На вход подается выход от команды Test-SPContentDatabase Name <database name> -WebApplication <URL>, а на выходе получаем описание недостающих элементов. Данную утилиту надо запускать там где установлен Sharepoint 2007, а выход брать от Sharepoint 2010.
Ошибки сессии
Можно воспользоваться решением.
Если вы в своих решениях, например в веб-частях, используете сессии, то изначально в Sharepoint 2010 вы будите получать ошибки, когда попробуете воспользоваться функционалом. Для решение этой проблемы нужно выполнить в Powershell команду:
Enable-SPSessionStateService –DefaultProvision
Проверка БД:
Иногда надо проверить версию установленной БД.
SELECT name AS 'DB Name', compatibility_level AS 'Compatibility Level'
FROM master.sys.databases;
GO
Перемещение пользователей
При выполнении миграции, нужно чтобы пользователи, которые используются в БД Sharepoint 2007 были мигрированы в БД Sharepoint 2010: Перемещение имен входа и паролей между экземплярами SQL Server 2005 и Перемещение имен пользователей и паролей между экземплярами SQL Server
Object reference not set to an instance of an object
Если появляется ошибка во время операции Mount-SPContentDatabase
[powershell] [SPWebTemplateSequence] [ERROR] [14.03.2011 15:17:00]: Template MPS#0: SPWeb Id=4fa62de1-47c7-47af-9009-40a80b34a2b2 could not be accessed in SPSite Id=f1a0f774-8780-4cdf-9477-0cc0ef8b57d8 due to exception. Skipping this SPWeb for template upgrade. Exception: System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.SharePoint.SPSite.PreinitializeServer(SPRequest request)
   at Microsoft.SharePoint.SPSite.GetSPRequest()
   at Microsoft.SharePoint.SPSite.get_Request()
   at Microsoft.SharePoint.SPSite.OpenWeb(Guid gWebId, Int32 mondoHint)
   at Microsoft.SharePoint.Upgrade.SPWebTemplateSequence.ActivateWebFeatures(List`1 lstwebinfoToUpgrade, List`1& lstsiteidExceptions, List`1& lstwebinfoExceptions)

то надо просто переоткрыть окно PowerShell (http://blogs.msdn.com/b/jorman/archive/2010/06/09/mount-spcontentdatabase-failing-on-blank-meeting-workspace.aspx)
A duplicate content type name [xxx] was found
[powershell] [SPSiteWssSequence2] [ERROR] [4/15/2011 12:21:00 PM]: Feature upgrade incomplete for Feature 'CTypes' (Id: '695b6570-a48b-4a8e-8ea5-26ea7fc1d162') in Site 'http://portal’. Exception: A duplicate content type name "Рисунок" was found.
Осталась нерешенной. Есть похожая статья, которая мне не помогла Печальная рожица Есть еще одна, с помощью которой я решил проблему.
  • Открыл файл C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES\ctypes\ctypeswss.xml
  • Нашел ContentType с ID="0x010102, т.к. у нас ругается на Рисунок (Picture) 
  • Добавил атрибуты  Inherits="TRUE" и Overwrite="TRUE". Должно получиться что-то вроде <ContentType ID="0x010102"
            Name="$Resources:Picture"       
            Group="$Resources:Document_Content_Types"
            Description="$Resources:imgCtDesc"
            V2ListTemplateName="imglib"
            Inherits="TRUE"
            Overwrite="TRUE"
            Version="0">
  • Сохраняем файл
  • Делаем iisrest
Ошибка должна пропасть во время миграции.

Ошибки после миграции
Ошибка доступа в момент редактирования страницы.
Симптомы: Я владелец узла (не администратор семейства узла). Периодически при попытке редактирования страницы выскакивает ошибка "Нет доступа".

Решение: Для сайта в Sharepoint 2007 были созданы свои мастер-страницы. Страницы были мигрированы на Sharepoint 2010 с учетом новой функциональности (лента, новые контролы и тд). Если к странице была применена наша мастер-страница, то получали ошибку, описанную выше. Если же выбрать стандартную мастер-страницу (v4.master), то такую ошибку мы не получаем. Поначалу кажется, что дело в нашей мастер-странице. Но данная статья говорит о другом. Если коротко, то инструкция следующая: зайти в библиотеку "мастер-страниц и макетов" на главном узле, перейти в настройки разрешения и дать нужным пользователям или группе пользователей права на чтение.
В Sharepoint 2007 была похожая проблема, которая решалась так (1 и 2). Данной проблемы не должно быть в 2010 шарике. К сожалению, я не опробовал этот вариант, может быть тоже подошел, но вариант выше лучше.

Комментариев нет:

Отправить комментарий

Еще статьи

2leep.com