Восстанавливаем бэкап сайт коллекции с более поздней версии Sharepoint

Иногда на практике возникает ситуация, когда баг воспроизводится только на продакшене, а не на QA или локальном окружении разработки. Такие проблемы сложнее исследовать. Часто они возникают из-за контента, который добавляется только в продакшен. И если у вас нет доступа к нему (напр. если поддержкой инфраструктуры занимается третья компания), вам потребуется запросить бэкап контентной базы данных или сайт коллекции, восстановить его локально и попробовать воспроизвести проблему. Но что делать, если у вас локально установлена более ранняя версия Sharepoint, чем на продакшене? Конечно, лучше иметь такую же версию (имеется ввиду соответствии в установленных кумулятивных обновлений в пределах одной основной версии 14 или 15). В этой статье я покажу трюк, как можно восстановить бэкап с более поздней версии. Прежде чем продолжить, хочу предупредить, что по сути это хак, и нет гарантий того, что в вашем конкретном случае он сработает. В зависимости от версии схема данных Sharepoint может измениться, поэтому стандартные механизмы не поддерживают этот способ. Хотя на практике в большинстве случаев он должен работать.

Хорошо, предположим, что у нас есть бэкап сайт коллекции с продакшена, полученный с помощью командлета Backup-SPSite:

Backup-SPSite http://example1.com -Path C:\Backup\example1.bak

Мы копируем его на локальное окружение и пытаемся восстановить с помощью Restore-SPSite:

Restore-SPSite http://example2.com -Path C:\Backup\example1.bak –Confirm:$false

(я специально использовал разные урлы для source и target сайт коллекций, чтобы показать, что с помощью указанных командлетов можно восстанавливать бэкап в другую сайт коллекцию, т.е. необязательно настраивать идентичное окружение, изменяя hosts файл или local dns). Если у нас установлена более ранняя версия Sharepoint, команда завершится с ошибкой, показав непонятное <nativehr> исключение, которое ничего не скажет о причинах ошибки. Но если переключить мониторинг в режим Verbose, то мы обнаружим следующее сообщение в логе:

Could not deserialize site from C:\Backup\example1.bak. Microsoft.SharePoint.SPException: Schema version of backup 15.0.4505.1005 does not match current schema version 15.0.4420.1017.

(конкретные номера версий не важны. Для данной статьи важно лишь, что версия Sharepoint на текущем окружении 15.0.4420.1017 меньше, чем версия, с которой мы взяли бэкап 15.0.4505.1005).

Что можно сделать в этом случае? Mount-SPContentDatabase не сработает по той же причине, т.е. бэкап контентной базы не поможет. Мы можем либо обновить локальное окружение (и вы должны рассматривать этот вариант как основной), либо пойти по нестандартному пути. Для последнего нам понадобится hex-редактор. Сначала я предположил, что бэкап сайт коллекции, выполненный показанным выше способом, является cab-файлом, который можно будет распаковать, подредактировать текстовые файлы внутри и запаковать обратно (подобный трюк я описывал в статье Сохранение идентичности объектов при экспорте и импорте сайтов в Sharepoint в различные позиции в топологии сайт коллекции). Но это оказалось не так в случае с бэкапом сайт коллекции – они похожи на обычные бинарные файлы. Поэтому для работы с ним нам понадобится hex-редактор. Я использовал HxD, но вы можете использовать любой на ваш вкус.

Если мы откроем файл бэкапа и попытаемся найти номер версии, который мы получили из сообщения в логе, мы обнаружим, что она указана в одном месте в начале файла:

image

Нужно изменить номер версии на тот, который используется на продакшене:

image

Сохраняем файл и запускаем Restore-SPSite снова. Теперь восстановление должно пройти успешно.

Надеюсь, что этот трюк поможет кому-нибудь. Помните только, что это хак, и его нужно использовать осторожно.

Advertisements

Об авторе sadomovalex

Старший инженер, team lead, консультант. Работаю в стеке .Net. Последние несколько лет занимаюсь разработкой enterprise приложений под Sharepoint, чему и будет в основном посвящена тематика этого блога. Также активно использую и интересуюсь ASP.Net MVC, DDD, TDD, Agile. Активно участвую в жизни многих профессиональных сообществ, SPb .Net UG, SPb ALT.Net, rsdn, Finland SP UG и др.
Запись опубликована в рубрике Content deployment, Sharepoint. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s