从未附加的数据库进行精细的还原数据
上次修改时间: 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();