Поделиться через


Восстановление фрагментарных данных из неприсоединенной базы данных

Дата последнего изменения: 22 ноября 2009 г.

Применимо к: SharePoint Foundation 2010

В этом разделе описывается, как объектная модель Microsoft SharePoint Foundation поддерживает создание неприсоединенных баз данных, из которых можно восстанавливать фрагментарные данные, вплоть до уровня конкретных полей, в базу данных контента SharePoint Foundation.

Восстановление данных из мелких фрагментов

SharePoint Foundation поддерживает восстановление фрагментарных данных посредством использования неприсоединенной базы данных. Это простой процесс. Код создает (неприсоединенный) SPContentDatabase объект, вызывая статический метод CreateUnattachedContentDatabase(). Затем код может использовать объектную модель SharePoint Foundation для извлечения данных из семейств сайтов, веб-сайтов, списков, элементов списков или полей определенных элементов объекта неприсоединенной базы данных. Данные затем добавляются в соответствующий родительский объект (или заменяют соответствующий конечный объект) в целевой базе данных контента. Исходной базой данных может быть один из следующих объектов.

  • Мгновенный снимок базы данных. Дополнительные сведения о поддержке мгновенных снимков баз данных в SharePoint Foundation см. в статье SPContentDatabase.

  • Теневая копия из службы теневого копирования томов (VSS), которая подключена в Microsoft SQL Server. Дополнительные сведения о поддержке службы теневого копирования томов в SharePoint Foundation см. в статье Службы SharePoint Foundation и служба теневого копирования томов.

  • Любая база данных контента из той же основной версии SharePoint Foundation, которая работает на доступном экземпляре SQL Server.

    ПримечаниеПримечание

    Майкрософт не поддерживает создание объекта неприсоединенной базы данных из базы данных контента более ранней основной версии SharePoint Foundation.

Предупреждающая заметкаВнимание!

Неприсоединенную базу данных следует считать доступной только для чтения. Если вызвать метод Update() неприсоединенной базы данных, вызывается исключение NotSupportedException.

В следующем примере поле в списке сотрудников определяет номер ключа от здания, в котором работает сотрудник. Так, он определяет ключ, выданный сотруднику. Рассмотрим ситуацию, когда это поле случайно изменено для сотрудника номер 24. Следующий код восстанавливает предыдущий номер ключа от здания сотрудника номер 24, записанный во время создания мгновенного снимка базы данных. Представьте, что snap — объект SPDatabaseSnapshot, который выступает здесь в роли исходной базы данных.

// Create the unattached database from the source.
SPContentDatabase unattachedDB = SPContentDatabase.CreateUnattachedContentDatabase(snap.ConnectionString);

// Get the good data.
SPList goodEmployeeList = unattachedDB.Sites["CustomSiteCol"].AllWebs["CustomSite"].Lists["Employees"];
SPListItemCollection goodItems = goodEmployeeList.GetItems(goodEmployeeList.DefaultView);
SPListItem employeeGoodData = goodItems[24];
Int32 keyNumber = employeeGoodData["BuildingKeyID"];

// Get a reference to the bad data.
SPSite siteCol = SPContext.Current.Site;
SPList badList = siteCol.AllWebs["CustomSite"].Lists["Employees"];
SPListItemCollection badItems = badList.GetItems(badList.DefaultView);
SPListItem employeeBadData = badItems[24];

// Overwrite the bad data.
employeeBadData["BuildingKeyID"] = keyNumber;
siteCol.ContentDatabase.Update();