Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Всем привет. Сегодня хотел поделиться опытом переноса данных большого объёма с одной базы контента в другую без потери существующих идентификаторов документов или элементов, а также с сохранением 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 на всех веб серверах.
Удачи в Ваших делах.