Перенос данных большого объёма в другую базу контента SharePoint 2013. Move SharePoint large content DB to another content DB into the same farm.
Всем привет. Сегодня хотел поделиться опытом переноса данных большого объёма с одной базы контента в другую без потери существующих идентификаторов документов или элементов, а также с сохранением Document ID. Проблем не возникает, если у Вас данные, например список или библиотека содержащая до 5000 элементов или документов соответственно. Но здесь совершенно другая история. Данные одной из библиотек превышают 120 000 документов с включённой версионностью, содержащими в определённых сценариях уникальные разрешения и прочие нестандартные вещи. И таких библиотек десяток. Стандартными средствами перенос не получится такой, который необходим.
Предупреждаю - этот способ не является поддерживаемым Microsoft, но увы нет стандартных средств.
Основными требованиями являются:
1. Сохранение структуры, навигации, стилей и настроек коллекции сайтов.
2. Сохранение идентификаторов и Document ID в библиотеках и списках.
3. Сохранение App приложений.
4. Сохранение рабочих процессов и всех запущенных экземпляров.
Это минимальные требования должны быть выполнены при переносе данных и задача должна решиться в кратчайшие сроки.
Итак, что для начала нужно сделать. Все наверно сталкивались с историей, когда просто брали и клонировали базы данных контента и при подключении базы получали сообщение о том, что такая коллекция сайтов уже зарегистрирована. Дело всё в том, что эта информация храниться в двух местах:
1. Базе данных конфигурации SharePoint 2013. Таблица SiteMap. Хранит информацию GUID коллекции сайтов и GUID базы контента
2. База данных контента. Таблица DatabaseInformation. Хранит информацию GUID базы контента.
Первый этап, что нужно сделать - это сделать резервную копию и потом восстановить эту копию, изменив название базы контента. После этого в таблице DatabaseInformation необходимо изменить GUID будущей базы контента.
Например,
UPDATE [dbo].[DatabaseInformation]
SET [Value] ='478e5aa1-5eb5-4674-acb6-8c81272d5377'
WHERE Name ='Id'
GO
Теперь можно подключить базу контента без ошибок, но никакой коллекции сайтов, ферма не увидит.
Второй шаг, который необходимо выполнить - это во всех таблицах, которые используют GUID коллекции сайтов, необходимо поменять на новый GUID. Начать необходимо с таблицы [dbo].AllSites
Например,
UPDATE [dbo].AllSites
SET Id ='ECFDB6C2-F964-4456-9ADF-4A8FF8921E3B',
HostHeader ='archive-demo.contoso.com'
WHERE Id ='ECFDB6C2-F964-4456-9ADF-4A8FF8921E3A'
GO
В запросе также изменено URL header, чтобы не было потом проблем с пониманием где новая коллекция сайтов.
В некоторых таблицах колонка называется SiteId, а в некоторых tp_SiteId. Это одна и та же колонка, просто так исторически сложилось в структуре базы контента SharePoint. Полный перечень таблиц, где необходимо поменять GUID такой:
AllSites, AllWebs, AllDocs, AllDocVersions, AllLinks, AllLists, AllListsAux, AllListsItemCount, AllListsPlus, AllListUniqueFields, AllLookupRelationships, AllUserData, [AllUserDataJunctions], [AllWebParts], [AppDatabaseMetadata], [AppInstallationProperty], [AppInstallations], [AppJobs], [AppLifecycleErrors], [AppPackages], [AppPrincipalPerms], [AppPrincipals], [AppResources], [AppRuntimeIcons], [AppRuntimeMetadata], [AppRuntimeSubstitutionDictionary], [AppSourceInfo], [AppTaskDependencies], [AppTasks], [BuildDependencies], [ContentTypes], [ContentTypeUsage], [CustomActions], [Deps], [DocsToStreams], [DocStreams], [EventReceivers], [EventSubsMatches], [Features], [FeatureTracking], [GroupMembership], [Groups], [HT_Cache], [ImmedSubscriptions], [NameValuePair], [NavNodes], [Perms], [Personalization], [RecycleBin], [Resources], [RoleAssignment], [Roles], [SchedSubscriptions], [ScheduledWorkItems], [SiteQuota], [SiteVersions], [SolutionFiles], [SolutionResourceUsageDaily], [Solutions], [StorageMetrics], [StorageMetricsChanges], [UserInfo], [WebMembers], [WebPartLists], [WebsPlus], [Workflow], [WorkflowAssociation].
После того, как все таблицы обновлены необходимо перезагрузить IIS на всех веб серверах.
Удачи в Ваших делах.