从未附加的数据库进行精细的还原数据

上次修改时间: 2009年11月22日

适用范围: SharePoint Foundation 2010

本主题介绍 Microsoft SharePoint Foundation 对象模型如何支持创建未连接的数据库,从该数据库中,可将详细程度达到特定字段级别的具体数据还原到 SharePoint Foundation 内容数据库。

具体数据修复

SharePoint Foundation 通过未连接的数据库功能支持高度具体的数据恢复。这个过程很简单。首先,代码通过调用静态 CreateUnattachedContentDatabase() 方法创建一个(未连接的) SPContentDatabase 对象,随后即可使用 SharePoint Foundation 对象模型从未连接的数据库对象网站集、网站、列表、列表项或特定项的字段中提取数据。数据随后会添加到目标内容数据库中的相应父对象(或覆盖相应的目标)。以下任意一项都可以充当源数据库:

  • 数据库快照。有关数据库快照的 SharePoint Foundation 支持的详细信息,请参阅 SPContentDatabase

  • Microsoft SQL Server 中已安装的卷影复制服务 (VSS) 提供的卷影副本。有关 VSS 的 SharePoint Foundation 支持的详细信息,请参阅 SharePoint Foundation 和卷影复制服务

  • SQL Server 的可访问实例上运行的 SharePoint Foundation 同一主要版本的任何内容数据库。

    备注

    Microsoft 不支持从 SharePoint Foundation 早期主要版本的内容数据库创建未连接的数据库对象。

警告注释警告

必须将未连接的数据库视为只读。如果调用未连接数据库的 Update() 方法,将引发 NotSupportedException

在下面的示例中,Employees 列表中的一个字段指定员工办公室钥匙的 ID 号。该字段专用于标识发给员工的钥匙。请考虑错误地更改了 24 号员工的此字段的情况。在生成数据库快照时,下面的代码会将 24 号员工的办公室钥匙的 ID 重置为原来的编号。假定 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();