次の方法で共有


接続されていないデータベースからの詳細なデータ復元

最終更新日: 2009年11月22日

適用対象: SharePoint Foundation 2010

このトピックでは、Microsoft SharePoint Foundation オブジェクト モデルが、接続されていないデータベースの作成をサポートする方法について説明します。接続されていないデータベースにより、特定のフィールドのレベルに至る詳細なデータを SharePoint Foundation コンテンツ データベースに復元できます。

詳細なデータ復元

SharePoint Foundation では、接続されていないデータベース機能によって、非常に詳細なデータ復元をサポートしています。そのプロセスは単純です。コードで CreateUnattachedContentDatabase() 静的メソッドを呼び出して、(接続されていない) SPContentDatabase オブジェクトを作成します。次に、SharePoint Foundation オブジェクト モデルを使用して、接続されていないデータベース オブジェクトから、サイト コレクション、Web サイト、リスト、リスト アイテム、または特定のアイテム内のフィールドを抽出します。そのデータを、目的のコンテンツ データベース内の該当の親オブジェクトに追加します (または、該当のターゲットを上書きします)。次のものが、ソース データベースとして機能します。

  • データベース スナップショット。SharePoint Foundation におけるデータベース スナップショットのサポートの詳細については、「SPContentDatabase」を参照してください。

  • Microsoft SQL Server にマウントされている Volume Shadow Copy Service (VSS) からのシャドウ コピー。SharePoint Foundation における VSS のサポートの詳細については、「SharePoint Foundation およびボリューム シャドウ コピー サービス」を参照してください。

  • アクセス可能な SQL Server のインスタンスで実行されている同じメジャー バージョンの SharePoint Foundation のコンテンツ データベース。

    注意

    以前のメジャー バージョンの SharePoint Foundation のコンテンツ データベースから、接続されていないデータベース オブジェクトを作成することはサポートされていません。

注意注意

接続されていないデータベースは、読み取り専用で処理する必要があります。接続されていないデータベースの Update() メソッドを呼び出すと、NotSupportedException がスローされます。

以下の例では、Employees リスト内のフィールドが、従業員が働いているビルのキー ID 番号を指定しています。具体的には、従業員に発行されたキーが特定されます。従業員番号 24 のこのフィールドが間違って変更されたものとします。次のコードでは、従業員番号 24 の BuildingKeyID を、データベースのスナップショットが作成された時点の内容にリセットします。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();