Upgrading to Sharepoint 2013 : Upgrading Service Applications

Content databases aren’t the only databases that can be upgraded from SharePoint 2010 to SharePoint 2013. There is an exclusive club of service applications whose databases can also be upgraded to SharePoint 2013. Here are the members of that club:

  • Business Connectivity Services
  • Managed Metadata
  • Performance Point
  • Secure Store
  • User Profile Service
  • Search

In each of these cases the upgrade method is the same. Restore a copy of your SharePoint 2010 database into your SharePoint 2013’s SQL instance and start the service instance. Then create a new version of the service application in your SharePoint 2013 farm with PowerShell and point it at the restored database. When the service application is created, it will see a database is already there and upgrade it. When the service application is created it will have all the settings or content from the SharePoint 2010 version, depending on the individual service app. Because each service app behaves just a little differently, let’s take a look at each one.

Business Connectivity Services

If any entities were defined in your SharePoint 2010 Business Connectivity Services (BCS) service application it’s easy to bring them over to your new SharePoint 2013 farm. Following are the steps to upgrade your SharePoint 2010 BCS database to SharePoint 2013:

1. Restore the BCS database into your SharePoint 2013 SQL instance. The identity that the service app app pool runs as will need to be given the db_owner role on the database.
2. Start the Business Connectivity Services service instance. You can do this in Central Admin by selecting Application Management ⇒ Manage Services on Server, or with the following PowerShell snippet:

Get-SPServiceInstance | where-object {$_.TypeName -eq "Business Data 
Connectivity Service"} | Start-SPServiceInstance
3. Create the BCS service application with PowerShell. The PowerShell assumes you have a service app app pool named “Default SharePoint Service App Pool.” If your app pool name is different, adjust it accordingly. It also assumes the database from your SharePoint 2010 farm was named BusinessConnectivityDB.

# Start the service instance
$serviceapppool = Get-SPServiceApplicationPool "Default SharePoint Service App
 Pool"
 
# Create the service application
$bcsapp = New-SPBusinessDataCatalogServiceApplication -Name "Business Connectivity
 Service" -ApplicationPool $serviceapppool -DatabaseName "BusinessConnectivyDB"
4. When the service application is created it creates its own proxy, so you don’t need to create one with PowerShell.

Managed Metadata

While the Managed Metadata service (MMS) was new to SharePoint 2010, organizations were quick to adopt it. In order to bring all those terms over to your SharePoint 2013 farm you can upgrade your SharePoint 2010 MMS database. Following are instructions on how to introduce all those tasty terms to your SharePoint 2013 farm:

1. Restore the MMS database into your SharePoint 2013 SQL instance. The identity that the service app app pool runs as will need to be given the db_owner role on the database.
2. Start the Managed Metadata Services service instance. You can do this in Central Admin by selecting Application Management ⇒ Manage Services on Server, or with the following PowerShell snippet:

Get-SPServiceInstance | where-object {$_.TypeName -eq "Managed Metadata Web
 Service"} | Start-SPServiceInstance
3. Create the MMS service application with PowerShell. The PowerShell assumes you have a service app app pool named “Default SharePoint Service App Pool.” If your app pool name is different, adjust it accordingly. It also assumes the database from your SharePoint 2010 farm was named ManagedMetadataDB.

# Start the service instance
$serviceapppool = Get-SPServiceApplicationPool "Default SharePoint Service App
 Pool"
 
# Create the service application
$mmsapp = New-SPMetadataServiceApplication -Name "Managed Metadata Service" -
ApplicationPool $serviceapppool -DatabaseName "ManagedMetadataDB" 
 
# Create the servce proxy
New-SPMetadataServiceApplicationProxy -Name "Managed Metadata Service Proxy" -
ServiceApplication $mmsapp -DefaultProxyGroup

When you open the MMS management page in Central Admin, you should see all the terms from your SharePoint 2010 farm.

PerformancePoint

The PerformancePoint service application can also be updated to SharePoint 2013. Following are the instructions for bringing it over from your SharePoint 2010 farm:

1. Restore the PerformancePoint database into your SharePoint 2013 SQL instance. The identity that the service app app pool runs as will need to be given the db_owner role on the database.
2. Start the Managed Metadata Services service instance. You can do this in Central Admin by selecting Application Management ⇒ Manage Services on Server, or with the following PowerShell snippet:

Get-SPServiceInstance | where-object {$_.TypeName -eq "PerformancePoint Service" }
 | Start-SPServiceInstance
3. Create the PerformancePoint service application with PowerShell. The PowerShell assumes you have a service app app pool named “Default SharePoint Service App Pool.” If your app pool name is different, adjust it accordingly. It also assumes the database from your SharePoint 2010 farm was named PerformancePointDB.

# Start the service instance
$serviceapppool = Get-SPServiceApplicationPool "Default SharePoint Service App
 Pool"
 
# Create the service application
$perfpointapp = New- SPPerformancePointServiceApplication -Name "Performance Point
 Service" -ApplicationPool $serviceapppool -DatabaseName "PerformancePointDB" 
 
# Create the servce proxy
New- SPPerformancePointServiceApplicationProxy -Name "Performance Point Service 
Proxy" -ServiceApplication $ perfpointapp -DefaultProxyGroup

Search

SharePoint 2010 contained two SharePoint Search service applications. There was the bare-bones Search that came with SharePoint Foundation, and there was the full-blown Search service application that came with SharePoint Server 2010. It is only possible to upgrade the SharePoint Services Search service application. If you’re upgrading from SharePoint 2010 Foundation to SharePoint 2013 Foundation, you have to build it all from scratch. While that’s a tough pill to swallow, there is a silver lining. It will be a brand-new Search service application and there won’t be any cruft from the old Search messing things up. It will even have that new service application smell.

SharePoint Server 2010 had three databases in its stable; the Administration database, the Property database, and the Crawl database. Of these, only the Administration database can be brought over to SharePoint 2013. It contains all the settings and configuration, so it’s the only one that offers any value to a new farm. The steps for upgrading the Search Administration database are similar to the steps for upgrading the other service applications, but they require a little more PowerShell:

1. Restore the Search Administration database into your SharePoint 2013 SQL instance. The identity that the service app app pool runs as will need to be given the db_owner role on the database.
2. Start the Search Service service instance. Unlike the other service instances, you cannot do this in Central Admin. It must be done in PowerShell. The following snippet will do:

$SearchInstance = Get-SPEnterpriseSearchServiceInstance
Start-SPServiceInstance $SearchInst
3. Now create the Search service application with PowerShell. The PowerShell assumes you have a service app app pool named “Default SharePoint Service App Pool.” If your app pool name is different, adjust it accordingly. It also assumes the database from your SharePoint 2010 farm was named Search_AdminDB, and the SQL instance is named SharePointSQL.

# Get the app pool and service instance
$serviceapppool = Get-SPServiceApplicationPool "Default SharePoint Service App
 Pool"
$SearchInstance = Get-SPEnterpriseSearchServiceInstance
 
# Create the Search Service application by restoring the old Admin database
Restore-SPEnterpriseSearchServiceApplication -Name "Search Service Application" -
applicationpool $serviceapppool -databasename "Search_AdminDB" -databaseserver 
"SharePointSQL" -AdminSearchServiceInstance $SearchInstance
 
# Create the service proxy
$ssa = Get-SPEnterpriseSearchServiceApplication
New-SPEnterpriseSearchServiceApplicationProxy -Name "Search Service Proxy" -
SearchApplication $ssa
 
# Add the proxy to the default proxy group
$SearchProxy = Get-SPEnterpriseSearchServiceApplicationProxy
Add-SPServiceApplicationProxyGroupMember –member $SearchProxy -identity " "

Secure Store

Upgrading the Secure Store service application for SharePoint 2010 allows you to keep all the identify mappings that you were using. These are usually used in conjunction with other service applications. Because the contents of the Secure Store database wouldn’t be very secure if you could restore it without the encryption key it was encrypted with when it was created, you’ll need that in order for the upgrade to work. Here are the steps to upgrade your Secure Store database:

1. Restore the Secure Store database into your SharePoint 2013 SQL instance. Be sure to give the identity under which your service application app pool is running the db_owner role in the database.
2. Start the Secure Store service instance on one or more servers in your farm. You can do this from Central Admin by selecting Application Management ⇒ Manage Services on Server, or with the following PowerShell:

Get-SPServiceInstance | Where-Object { $_.TypeName -eq "Secure Store Service" } | 
Start-SPServiceInstance
3. Create the Secure Store service application. The following PowerShell assumes you have a service app app pool named “Default SharePoint Service App Pool.” If your app pool name is different, adjust it accordingly. It also assumes the database from your SharePoint 2010 farm was named SecureStoreDB and your passphrase was pass@word1:

# Get the service application pool
$serviceapppool = Get-SPServiceApplicationPool "Default SharePoint Service App
 Pool"
 
# Create the service application
$securestoreapp = New-SPSecureStoreServiceApplication -Name "Secure Store Service"
 -ApplicationPool $serviceapppool -DatabaseName "SecureStoreDB" 
 
# Create the service proxy
$securestoreproxy = New-SPSecureStoreApplicationProxy -Name "Secure Store Service
 Proxy" -ServiceApplication $securestoreapp -DefaultProxyGroup
 
# Restore the passphrase
Update-SPSecureStoreApplicationServerKey -Passphrase "pass@word1" -
ServiceApplicationProxy $securestoreproxy

You now have a Secure Store service application in SharePoint 2013 that contains all the credentials it had in your SharePoint 2010 farm.

User Profile Service

It shouldn’t come as a surprise to anyone that the User Profile Service (UPS) is a little more trouble than the other service apps. It does have a certain reputation to maintain, after all. Before upgrading your UPS service application, make sure your MMS service application has upgraded correctly. The UPS uses the MMS to store terms, so they should be in place before you bring the upgraded UPS online.

The SharePoint 2010 UPS used three databases: Profile, Social, and Sync. Only the Profile and Social databases support being upgraded. The Sync database is scratch space for the UPS while it’s doing imports and exports, so it doesn’t contain any useful information to upgrade. Use the following steps to bring your SharePoint 2010 profile information into your SharePoint 2013 farm:

1. Restore the UPS Profile and optionally the UPS Social databases into your SharePoint 2013 SQL instance. The identity under which the service app app pool runs needs to be given the db_owner role on the database.
2. The UPS has two service instances: the User Profile Service and the User Profile Sync Service. You only want to start the former before you create the service application. You can do this in Central Admin by selecting Application Management ⇒ Manage Services on Server, or with the following PowerShell snippet:

Get-SPServiceInstance | where-object {$_.TypeName -eq "User Profile Service" } | 
Start-SPServiceInstance
3. Create the UPS service application with PowerShell. The following PowerShell assumes you have a service app app pool named “Default SharePoint Service App Pool.” If your app pool name is different, adjust it accordingly. It also assumes the Profile DB from your SharePoint 2010 farm was named UserProfile_ProfileDB, and your Social DB was named UserProfile_SocialDB.

# Get the service app app pool
$serviceapppool = Get-SPServiceApplicationPool "Default SharePoint Service App
 Pool"
 
# Create the service application
$upa = New-SPProfileServiceApplication -Name "User Profile Service" 
-ApplicationPool $ serviceapppool -ProfileDBName "UserProfile_ProfileDB"
 -SocialDBName "UserProfile_SocialDB" -ProfileSyncDBName "UserProfile_SyncDB"
 
# Create the service proxy
New-SPMetadataServiceApplicationProxy -Name "User Profile Service Proxy" -
ServiceApplication $upa -DefaultProxyGroup
4. The User Profile Service’s Profile and Social databases should reflect the content that was in SharePoint 2010.