如何:在 Web 应用程序仍在运行时备份

上次修改时间: 2010年1月13日

适用范围: SharePoint Foundation 2010

本主题介绍如何结合使用数据库快照和 Microsoft SharePoint Foundation 的未连接的数据库功能来在一个内容数据库备份一个或多个(或全部)网站集,同时保持这些网站集的承载 Web 应用程序及其子网站正常运行。这是通过制作内容数据库的时间点副本并在原始数据库继续正常工作的同时备份该副本来实现的。

备份实时部署

备份正在正常运行的 SharePoint Foundation 网站集有三个步骤。第一步,创建内容数据库的快照。第二步,利用此快照创建一个未连接的数据库对象。第三步,使用未连接的数据库(而不是实时内容数据库)作为备份源。

因为未连接的数据库是一个 SPContentDatabase 对象,因此您的代码可以调用其 Sites 属性的 Backup(String, String, Boolean) 方法。您可将特定网站集的 URL 传递给该方法,或者您的代码可以循环访问所有网站集并为每一个网站集调用 Backup(String, String, Boolean)

若要备份 Web 应用程序中的所有内容数据库,您的代码可以循环访问 SPWebApplication.ContentDatabases 属性并对所有内容数据库运行上述的三步骤过程。此外,您当然可以循环访问服务器场的所有 Web 应用程序来备份服务器场中的所有内容数据库,而不需要将 Web 应用程序设为只读的。

有关数据库快照的编程控制的详细信息,请参见数据库快照的编程管理

备份网站集

  1. 获取对内容数据库的引用。

  2. 调用内容数据库的 Snapshots 集合的 CreateSnapshot() 方法。

  3. 将快照的 ConnectionString 属性传递给静态 CreateUnattachedContentDatabase(SqlConnectionStringBuilder) 方法。

  4. 调用 Backup(String, String, Boolean) 并将特定网站集的 URL 传递给它。

警告注释警告

必须将未连接的数据库作为只读数据库来处理。如果您调用未连接的数据库的 Update() 方法,则会引发 NotSupportedException

示例

在下面的示例中,当前网站集是一个已备份的网站集,但相同内容数据库中任何其他网站集的 URL 都可能已经传递给 Backup(String, String, Boolean) 方法。

SPSite siteCol = SPContext.Current.Site;
SPContentDatabase cDB = siteCol.ContentDatabase;

SPDatabaseSnapshot snap = cDB.Snapshots.CreateSnapshot();

SPContentDatabase unDB = SPContentDatabase.CreateUnattachedContentDatabase(snap.ConnectionString);

unDB.Sites.Backup(siteCol.ServerRelativeUrl.Trim('/'), "\\Server\Backups\MySite.bak", true);
Dim siteCol As SPSite = SPContext.Current.Site
Dim cDB As SPContentDatabase = siteCol.ContentDatabase

Dim snap As SPDatabaseSnapshot = cDB.Snapshots.CreateSnapshot()

Dim unDB As SPContentDatabase = SPContentDatabase.CreateUnattachedContentDatabase(snap.ConnectionString)

unDB.Sites.Backup(siteCol.ServerRelativeUrl.Trim("/"c), "\Server\Backups\MySite.bak", True)

请参阅

概念

数据库快照的编程管理