I recently had to go through the process of migrating a TFS 2008 SP1 to a TFS 2010 environment.

I will go into the details of the tasks that I went through, but first I want to explain why I define it as a migration and not an upgrade.

When this environment was setup, based on support and limitations for TFS 2008, we used a 32 bit platform for the TFS Application Tier and Build Servers.  The Data Tier, since we were installing SP1 for TFS 2008, was done as a 64 bit installation.  We knew at that point that TFS 2010 was in the picture so that served as further motivation to make that a 64bit install of SQL Server.  The SQL Server at that point was a single instance (Default) installation too.  We had a pretty good strategy in place for backups of the databases supporting the environment (and this made the migration so much smoother), so we were pretty familiar with the databases and the purpose they serve.

I am sure many of you that have gone through a TFS 2008 installation have encountered challenges and trials.  And likely even more so if you, like me, needed to configure your deployment for SSL.  So, frankly I was a little concerned about the process of migrating.  They say practice makes perfect, and this environment I worked on is in some way my brain child, so I was not ready nor willing for this to be a failure or something that would impact my client’s work.

Prior to going through the migration process, we did the install of the environment.  The Data Tier was the same, with a new Named instance in place to host the 2010 install.  The Application Tier was in place too, and we did the DefaultCollection configuration to test and validate all components were in place as they should.

Anyway, on to the tasks for the migration (thanks to Martin Hinshelwood for his very thorough documentation):

  1. Close access to TFS 2008, you want to make sure all code is checked in and ready to go.  We stated a difference of 8 hours between code lock and the start of migration to give time for any unexpected delay.  How do we close access?  Stop IIS.
  2. Backup your databases.  Which ones?
    TfsActivityLogging
    TfsBuild
    TfsIntegration
    TfsVersionControl
    TfsWorkItemTracking
    TfsWorkItemTrackingAttachments
  3. Restore the databases to the new Named Instance (make sure you keep the same names)
  4. Now comes the fun part! The actual import/migration of the databases.  A couple of things happen here. The TfsIntegration database will be scanned, the other databases will be checked to validate they exist.  Those databases will go through a process of data being extracted and transferred to the TfsVersionControl database to then be renamed to Tfs_<Collection>. You will be using a tool called tfsconfig and the option import. This tool is located in the TFS 2010 installation path (C:\Program Files\Microsoft Team Foundation Server 2010\Tools),  the command to use is as follows: 
      tfsconfig import /sqlinstance:<instance> /collectionName:<name> /confirmed

    Where <instance> is going to be the SQL Server instance where you restored the databases to.  <name> is the name you will give the collection. And to explain /confirmed, well this means you have done a backup of the databases, why?  well remember you are going to merge the databases you restored when you execute the tfsconfig import command.
     
  5. The process will go through about 200 tasks, once it completes go to Team Foundation Server Administration Console and validate your imported databases and contents.

We’ll keep this manageable, so the next post is about how to complete that implementation with the SSL configuration.