Backup, Restore, Migration in SharePoint 2013

SharePoint 2010 to SharePoint 2013 Migration
Migration process of SharePoint 2010 sites to 2013 is relatively straightforward, but requires some preliminary work done in SharePoint 2010 environment:

  • Prepare SharePoint 2010 sites for back up – put backed up sites in read-only mode or disconnect the sites from users for the duration of backup.
  • Backup the content database on SharePoint 2010 SQL server, using SQL tools
    Please note: You cannot use backup commands of stsadm or Powershell to take backups of SP2010 sites and can only use SQL Server capabilities.
    Because of this limitation if you like to upgrade only selected few site collections you might have isolate them into a separate content database.
    Here is a script you might find helpful for this isolation in SP2010:
    Get-SPSite -ContentDatabase SourceContentDbName | Move-SPSite -DestinationDatabase DestinationContentDbName
  • Prepare SharePoint 2013 environment – deploy any features or webparts used by backed up SP2010 sites if there are any. For example:
    Add-SPSolution "d:\path\customsolution.wsp"
    Install-SPSolution -Identity "customsolution.wsp" -WebApplication http://webappurl/ -GACDeployment
  • Restore SQL database backup on SharePoint 2013 SQL server, using SQL tools
  • Test the content database for any errors, by executing:
    Test-SPContentDatabase –Name contentdb –WebApplication http://webappurl/
  • Mount the content database, if previous test results are acceptable. Mounting the database will upgrade its content:
    Mount-SPContentDatabase –Name contentdb –WebApplication http://webappurl/

MS: Upgrade content databases to SharePoint 2013

Backup and Restore Site Collections in SharePoint 2013
The Powershell commands are very straightforward:

Backup-SPSite -Identity http://web/path/site -Path D:\path\site.bak –Verbose
Restore-SPSite -Identity http://web/path/site -Path D:\path\site.bak -Force –Verbose
Restore-SPSite -Identity http://web/path/site -DatabaseServer DBSERVER -DatabaseName SP_Content_Database -Path D:\Path\site.bak -Force -Verbose

If you are restoring to a specific content database, you must explicitly specify server name as well.
If you would like to control amount of site collections which can be stored in a particular content database, you can do so by using this little script.
In this script, we set maximum number of sites to 3 for the content database that contains site collection “http://web/path/site”:
Get-SPContentDatabase -Site http://web/path/site | Set-SPContentDatabase -MaxSiteCount 3 -WarningSiteCount 0

MS: Backup Site Collections
MS: Restore Site Collections

Known Issues – Backup and Restore Process Sensitivity to Environment Version

When you are backing and restoring site collections between different server environments one of the key things that you need to pay particular attention to is SharePoint patch level. The environments you are backing and restoring to must be at the same level.

Here is an example of error when you try to restore a site collection backed up in SharePoint at newer patch level.
After running the following restore command in Powershell, we see a very convoluted error message that has nothing to do with the actual error:
Restore-SPSite -Identity http://web/path/site -DatabaseServer DBSERVER -DatabaseName SP_Content_Database -Path D:\Path\site.bak -Force -Verbose
Restore Powershell
Exception: DirectoryNotFoundException – in reality has nothing to do with the actual error, which we can see in ULS log tells us that there is a version mismatch, and that is why our restore is failing.
Restore ULS Log
Blog: Backup and Restore Site Collection in SP2013