Tuesday, 15 November 2011

Headaches and TFS Migration: Moving databases to another SQL server

 

You may get this message if you attempt to migrate your databases to another server and then install the TFS server as an Application Tier only, pointing to the aforementioned database:

image


TF254006: No usable accounts are present in your configuration database. Use TfsConfig accounts /add to add an account and return to this wizard.

The reason is that the owner of the database on the new SQL server is set to nothing.

1. Open ‘security\users’ on the ‘tfs_configuration’ database (or the name of your configuration database)

2. Add the domain user you will be using for TFS (which should already be a user on the SQL server) to the ‘tfs_configuration’ database.

3. Make sure when you create the user above, you tick ‘TFSADMINROLE’ and ‘RFSEXECROLE’ as seen below.

image

4. Try and connect to the database again in the application tier, and all will work!

Headaches and TFS 2010 Migration: Database backups

If, like me, you need to move your TFS 2010 databases from one machine to another in order to create a separate application tier, one of the tasks is to shift the database from one machine to another.

Alas, when backing up the database on your existing SQL server, you may receive the following:

image

Microsoft SQL Server Management Studio

Backup failed for Server 'TFS2010'.  (Microsoft.SqlServer.SmoExtended)
ADDITIONAL INFORMATION:

System.Data.SqlClient.SqlError: A nonrecoverable I/O error occurred on file "e:\temp.bak:" 112(failed to retrieve text for this error. Reason: 15105). (Microsoft.SqlServer.Smo)


The reason for this obscure error is that your TFS database is very, very large. Your disk on the other hand is very, very small. You therefore have 2x options.

1. Delete files from the disk

2. Try and export with the ‘WITH COMPRESSION’ command.

In order to attempt the latter, you need to script to a new query window as you can’t do it from the UI.

image

Within the query window, add ‘WITH COMPRESSION’ so that it looks something like this:

BACKUP DATABASE [Tfs_DefaultCollection] TO  DISK = N'e:\temp.bak' WITH COMPRESSION, NOFORMAT, NOINIT,  NAME = N'Tfs_DefaultCollection-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Perfect! Your database should now end up on the disk, even if you don’t have a whole lot of space left. Note that the export and compression will likely take a long time (just over an hour for our TFS database)