How to: Programmatically Back Up and Restore a Single Site Collection
Applies to: SharePoint Foundation 2010
This topic describes how to back up and restore individual site collections programmatically.
To Back Up or Restore a Site Collection
Add to your Visual Studio project a reference to Microsoft.Sharepoint.
Add using statements for Microsoft.SharePoint and Microsoft.SharePoint.Administration.
Add the following lines to obtain a reference to the farm and its collection of services.
SPFarm myFarm = SPFarm.Local; SPServiceCollection myServices = myFarm.Services;
Dim myFarm As SPFarm = SPFarm.Local Dim myServices As SPServiceCollection = myFarm.Services
Obtain a reference to the Web service that publishes the Web application that hosts your site collection by using the service's Guid which is the value of its Id() property.
Guid serviceID = new Guid("21d91b29-5c5b-4893-9264-4e9c758618b4"); SPWebService webPubService = (SPWebService)myServices[serviceID];
Dim serviceID As New Guid("21d91b29-5c5b-4893-9264-4e9c758618b4") Dim webPubService As SPWebService = CType(myServices(serviceID), SPWebService)
If you do not know the Id() of the application publishing Web service, you can iterate through all the services and report their Name(), TypeName, and Id(). The following is an example:
foreach (SPService service in myServices) { if (service is SPWebService) { Console.WriteLine("Web service name:" + webService.Name); Console.WriteLine("Web service type:" + webService.TypeName); Console.WriteLine("Web service ID:" + webService.Id); Console.WriteLine(); Console.Readline(); } }
For Each service As SPService In myServices If TypeOf service Is SPWebService Then Console.WriteLine("Web service name:" & webService.Name) Console.WriteLine("Web service type:" & webService.TypeName) Console.WriteLine("Web service ID:" & webService.Id) Console.WriteLine() Console.Readline() End If Next service
Obtain a reference to the Web application that hosts your site collection. If you know the URL of the Web application you can obtain a reference with the static Lookup() method. Alternatively, you can use the application's Guid which is the value of its Id() property. The following code shows the second method.
SPWebApplicationCollection myApps = webPubService.WebApplications; Guid appID = new Guid("10ea4e6f-ae37-4909-b04f-f516c066bc37"); SPWebApplication myApp = myApps[appID];
Dim myApps As SPWebApplicationCollection = webPubService.WebApplications Dim appID As New Guid("10ea4e6f-ae37-4909-b04f-f516c066bc37") Dim myApp As SPWebApplication = myApps(appID)
If you do not know the Id() of the Web application that hosts your site collection, you can iterate through all the Web applications and report their Name(), TypeName, and Id(). The following is an example:
foreach (SPWebApplication app in webApps) { Console.WriteLine("Web application name:" + app.Name); Console.WriteLine("Web application type:" + app.TypeName); Console.WriteLine("Web application ID:" + app.Id); Console.WriteLine(); Console.Readline(); }
For Each app As SPWebApplication In webApps Console.WriteLine("Web application name:" & app.Name) Console.WriteLine("Web application type:" & app.TypeName) Console.WriteLine("Web application ID:" & app.Id) Console.WriteLine() Console.Readline() Next app
Get a reference to the Web application's collection of site collections.
SPSiteCollection mySiteCols = myApp.Sites;
Dim mySiteCols As SPSiteCollection = myApp.Sites
To back up a site collection, call the Backup() method. As parameters pass the following:
The full URL of the site collection; that is, the full URL of its Top Level Web site.
The full path and file name of the file that will hold the compressed content of the site collection.
True, if the operation should overwrite an existing backup file of the same name; false, if it should not.
mySiteCols.Backup(@"https://Server/sites/MySiteCollection", @"\\OtherServer\WSSBackups\SiteCollections\BackupOfMySiteCollection", true);
mySiteCols.Backup("http:// Server/sites/MySiteCollection", "\\OtherServer\WSSBackups\SiteCollections\BackupOfMySiteCollection", True)
To restore a site collection, call the Restore() method. It takes the same parameters as the Backup() method. The Boolean parameter indicates whether the site collection should be overwritten if it already exists at the specified URL.
mySiteCols.Restore(@"https://Server/sites/MySiteCollection", @"\\OtherServer\WSSBackups\SiteCollections\BackupOfMySiteCollection", true);
mySiteCols.Restore("http:// Server/sites/MySiteCollection", "\\OtherServer\WSSBackups\SiteCollections\BackupOfMySiteCollection", True)
Example
The following example shows a simple way to programmatically back up or restore a site collection. You will need to replace all the Guid values with actual values from your deployment and replace the placeholder values in the Backup and Restore methods with actual URLs and paths from your deployment.
// Get a reference to the Web application publishing
// Web service.
SPFarm myFarm = SPFarm.Local;
SPServiceCollection myServices = myFarm.Services;
Guid serviceID = new Guid("21d91b29-5c5b-4893-9264-4e9c758618b4");
SPWebService webPubService = (SPWebService)myServices[serviceID];
// Get a reference to the Web application that hosts the
// site collection.
SPWebApplicationCollection myApps = webPubService.WebApplications;
Guid appID = new Guid("10ea4e6f-ae37-4909-b04f-f516c066bc37");
SPWebApplication myApp = myApps[appID];
// As alternative to the preceding three lines, you can use
// the following when you know the URL of the Web application:
// SPWebApplication myApp = SPWebApplication.Lookup(url_of_Web_app)
// Get a reference to the Web application's collection of
// site collections.
SPSiteCollection mySiteCols = myApp.Sites;
// Back up a specified site collection.
mySiteCols.Backup(@"https://Server/sites/MySiteCollection", @"\\OtherServer\WSSBackups\SiteCollections\BackupOfMySiteCollection", true);
// Restoring the site collection is identical to the preceding
// code except that the "Restore" is used in place of "Backup".
//
// mySiteCols.Restore(@"https://Server/sites/MySiteCollection", @"\\OtherServer\WSSBackups\SiteCollections\BackupOfMySiteCollection", true);
' Get a reference to the Web application publishing
' Web service.
Dim myFarm As SPFarm = SPFarm.Local
Dim myServices As SPServiceCollection = myFarm.Services
Dim serviceID As New Guid("21d91b29-5c5b-4893-9264-4e9c758618b4")
Dim webPubService As SPWebService = CType(myServices(serviceID), SPWebService)
' Get a reference to the Web application that hosts the
' site collection.
Dim myApps As SPWebApplicationCollection = webPubService.WebApplications
Dim appID As New Guid("10ea4e6f-ae37-4909-b04f-f516c066bc37")
Dim myApp As SPWebApplication = myApps(appID)
' As alternative to the preceding three lines, you can use
' the following when you know the URL of the Web application:
' SPWebApplication myApp = SPWebApplication.Lookup(url_of_Web_app)
' Get a reference to the Web application's collection of
' site collections.
Dim mySiteCols As SPSiteCollection = myApp.Sites
' Back up a specified site collection.
mySiteCols.Backup("http:// Server/sites/MySiteCollection", "\\OtherServer\WSSBackups\SiteCollections\BackupOfMySiteCollection", True)
' Restoring the site collection is identical to the preceding
' code except that the "Restore" is used in place of "Backup".
'
' mySiteCols.Restore(@"http:// Server/sites/MySiteCollection", @"\\OtherServer\WSSBackups\SiteCollections\BackupOfMySiteCollection", true);
The SPSite class does not implement IBackupRestore and the Backup() and Restore() methods do not use the facilities of the Microsoft.SharePoint.Administration.Backup namespace. This means that records of backups and restorations of site collections are not kept in a history file (spbrtoc.xml) in the backup directory. Similarly, backup and restoration data is not stored in spbackup.xml or sprestore.xml files, neither are these site collection operations logged in spbackup.log or sprestore.log files.
If you want to do any kind of logging of backups and restorations of site collection operations, you will have to program your own system. Writing to the system-created spbrtoc.xml,spbackup.xml, sprestore.xml, spbackup.log, and sprestore.log files is not supported in SharePoint Foundation. Neither is moving them, deleting them, or renaming them. However, you can create files that merge data from the system-created files with data from your site collection backups and restorations.
See Also
Tasks
How to: Programmatically Back Up Content
How to: Programmatically Restore Content
How to: Create a Content Class That Can Be Backed Up and Restored
How to: Extend the STSADM Utility
Reference
Microsoft.SharePoint.Administration.Backup
Concepts
Programming with the SharePoint Foundation Backup/Restore Object Model