Невозможно восстановить из бэкапа коллекцию сайтов SharePoint 2013, заблокированную до архивации

Проблема: Ошибка «Доступ к этому веб-сайту запрещен» при восстановлении из резервной копии коллекции сайтов SharePoint Server 2013, у которой на момент архивирования был установлен статус блокировки «No access».

Симптомы

Недавно столкнулся с одним неприятным багом в SharePoint Server 2013 (версия 15.0.4693.1000). В SharePoint Central Administration в разделе Site Collection Quotas and Locks для одной из выведенных из эксплуатации коллекции сайтов был присвоен статус блокировки «No access».

 

Невозможно восстановить из бэкапа коллекцию сайтов SharePoint 2013, заблокированную до архивации

 

Позже была сделана резервная копия коллекции сайтов с помощью командлета PowerShell Backup-SPSite. Спустя какое-то время, пользователям понадобилось срочно восстановить некоторые файлы из одной библиотеки данной коллекции сайтов. При восстановлении с помощью команды Restore-SPSite возникла ошибка — «Доступ к этому веб-сайту запрещен».

 

Ошибка Access denied при выполнении Restore-SPSite

 

В логах ULS SharePoint были следующие сообщения:

PowerShell.exe (0x4748) 0x2CB4 SharePoint Foundation PowerShell 6tf2 High Microsoft.SharePoint.SPException: Доступ к этому веб-сайту запрещен. Обратитесь к администратору. —> System.Runtime.InteropServices.COMException: <nativehr>0x81020071</nativehr><nativestack>OWSSVR.DLL: (unresolved symbol, module offset=00000000000532BD) at 0x00007FFDE5FA32BD OWSSVR.DLL: (unresolved symbol, module offset=0000000000053860) at 0x00007FFDE5FA3860 OWSSVR.DLL: (unresolved symbol, module offset=00000000000516F0) at 0x00007FFDE5FA16F0 OWSSVR.DLL: (unresolved symbol, module offset=000000000015DF05) at 0x00007FFDE60ADF05 Microsoft.SharePoint.Library.ni.dll: (unresolved symbol, module offset=00000000000D560D) at 0x00007FFDE66E560D Microsoft.SharePoint.ni.dll: (unresolved symbol, module offset=00000000029A7A72) at 0x00007FFDEC2C7A72 Microsoft.SharePoint.ni.dll: (unresolved symbol, module offset=0000000002A89AE6) at 0x00007FFDEC3A9AE6 Microsoft.SharePoint.ni.dll: (unresolved symbol, module offset=0000000003081213) at 0x00007FFDEC9A1213 </nativestack>Доступ к этому веб-сайту запрещен. Обратитесь к администратору. at Microsoft.SharePoint.Library.SPRequestInternalClass.GetSiteFlags(String bstrUrl) at Microsoft.SharePoint.Library.SPRequest.GetSiteFlags(String bstrUrl) — End of inner exception stack trace — at Microsoft.SharePoint.SPGlobal.HandleComException(COMException comEx) at Microsoft.SharePoint.Library.SPRequest.GetSiteFlags(String bstrUrl) at Microsoft.SharePoint.SPSite.Restore(String filename, Boolean isADMode, Boolean& readOnlyMode, Boolean& hadWriteLock) at Microsoft.SharePoint.Administration.SPSiteCollection.Restore(String strSiteUrl, String strFilename, Boolean bOverwrite, Boolean bGradualDelete, Boolean hostHeaderAsSiteName, Boolean preserveSiteId) at Microsoft.SharePoint.PowerShell.SPCmdletRestoreSite.InternalProcessRecord() at Microsoft.SharePoint.PowerShell.SPCmdlet.ProcessRecord() 849dc397-3883-4a0f-87ad-e43e0e0839aa

Причем ошибка возникала уже в конце процедуры восстановления по истечение продолжительного времени. Во время восстановления сайта было видно, что данные активно пишутся в базу данных SQL и в конце процедуры размер базы данных был адекватен размеру архива.

Так как у меня были в наличие архивы SQL баз контента, то я попробовал также восстановить данные с помощью использования варианта с Unattached Content Database, но безрезультатно. К сожалению, как оказалось, у меня остались в наличие только базы данных, в которых эта коллекция сайтов уже везде была заблокирована. При просмотре контента из неприсоединенной базы данных можно было выбрать из списка нужную коллекцию сайтов, но сам контент — списки и библиотеки, не выводился, возникала неопознанная ошибка.

 

Решение

Поддержка MSFT предложила следующее решение.

  1. Установить обновление May 2017 CU.  Крайне рекомендуется обновить всю ферму, но если нет возможности обновить боевую ферму, рекомендуется развернуть или обновить тестовую. В моем случае мне было быстрее и проще развернуть тестовый SharePoint в варианте stand-alone.
  2. Создать новую базу данных контента.
  3. Далее нужно изменить версию схемы базы данных в файле бэкапа на версию обновленного SharePoint. В моем случае нужно было поменять 15.0.4693.1000 на 15.0.4927.1000. Номер версии находится в самом начале архивного файла. Отредактировать файл можно, например, с помощью Notepad++.
  4. Развернуть стандартным способом бэкап сайта в новую базу данных, используя ключ ContentDatabase.
  5. После этого зайти в раздел Site Collection Quotas and Locks и снять блокировку, то есть установить статус блокировки сайта «Not locked».

После этого коллекция сайтов должна быть доступна через браузер и вы сможете извлечь нужные данные.

Ложка дегтя. Правка версии схемы в архивном файле — неподдерживаемое решение, поэтому дальнейшее использование этого сайта в работе официально не поддерживается производителем! Только для восстановления важных данных. После этого данную коллекцию сайтов нужно удалить.

PS:  Если у вас критическая ситуация и нет другого варианта — вам позарез нужно восстановить всю коллекцию сайтов, вы можете попробовать это сделать на свой страх и риск. У меня не было такой необходимости, но я провел эксперимент — сделал backup этой коллекции сайтов в тестовой среде, снова подредактировал номер версии, развернул в новую базу в производственной среде, и не заметил каких либо сбоев в работе сайта.

Тимлид команды системных администраторов Windows-инфраструктуры с 20-летним опытом. Специализация: сопровождение серверов Windows, Active Directory, Hyper-V, PowerShell-автоматизация, мониторинг.