Quick Guide to Installing TFS in Windows 2008 with SQL Server 2008 in a Hyper-V Virtual Machine

July 27, 2009

I have to say, installing TFS is one of the most cubersome processes that Microsoft has come up with.

Firstly, you need and edition of Windows Server. I decided that I would install it on Windows Server 2008 R2 64-bit Release Candidate. But that’s no good, because it is designed for 32-bit Windows Server and has very little support for 64-bit. It detects that it’s not 32-bit, and prevents you from continuing with the TFS install.

I had real trouble installing Windows Server 2008 first release on my machine; some problem with drivers that I couldn’t resolve, so for the moment I am pretty much stuck with the release candidate of Windows Server 2008 R2.

So I decided to install a 32-bit version of Windows Server 2008 in a Virtual Machine using Hyper-V. That was fun. I installed from an ISO image and I was up and running. To configure the Hyper-V site, I had to set up a virtual network, and I wanted to expose my TFS site to the outside world, so I had to tick the box to share the actual physical network adapter with the virtual one.

That got interesting, because the moment I did that, it cleared the settings on the actual physical network adapter. So I decided it needed to have the settings put back in. Wrong move! Leaving the network adapter how it is, without the settings, works.

Next, within the Hyper-V environment, you need to run the operating system, then you need to select Action from the Hyper-V main menu, and then click “Insert Integration Services Disk”. This puts a virtual ISO in the Virtual DVD drive, and a popup box helps you install this vital piece of software.

Once the Integration Services disk is installed, the VM should be able to have network access. To test, simply enter a web site, such as http://www.msdn.microsoft.com.

Next, the TFS installation. First, you need to set up all the accounts. The best place to look for which accounts need to be created is the chm file that you download from the Microsoft site, at http://www.microsoft.com/downloads/details.aspx?FamilyId=FF12844F-398C-4FE9-8B0D-9E84181D9923&displaylang=en

Next, you must use TFS with Service Pack 1 to be able to install on SQL Server 2008. This is not fun. To be able to perform this from scratch involves manually extracting files from the TFS installer and Service Pack 1 intallers and then creating a new merged installer from the two images. If you don’t do this, you will not be able to get TFS to install with SQL Server 2008. This step is quite complex; it’s not for the faint hearted.

It requires SQL Server Standard or Enterprise Edition, 2005 or 2008. On that machine, I had a SQL Server 2008 Development Edition. Nope, it can’t accept that. It must be a Standard or Enterprise Edition. So I installed a copy of SQL Server 2008 and installed SP1, and tried to install TFS. Wrong again. It didn’t recognise SQL Server 2008 with SP1.

So I had a think about it and decided that it must have worked without the service pack. So I removed my SP1 version of SQL Server 2008 and reinstalled without the service pack. It finally detected SQL Server 2008 and installed successfully.

A reboot after all this is a must.

Next, within Visual Studio 2008 Team Edition Development Edition, you need to install Team Explorer. Funnily enough, it’s called Team Edition but that means nothing without the Team Explorer. It’s yet another otherwise unneccessarily annoying steps to achieving the goal.

Of course, it doesn’t end here, because you also need to install Visual Studio 2008 SP1 again, as the Team Explorer downloaded will install in Visual Studio but is not the SP1 version. The implication here is that it won’t be able to connect to the project site correctly, meaning you won’t be able to add Projects.

Next, you need to add the users to the TFS Licenced Users group. This is how TFS tracks the total number of users that can access TFS. I am only using a Workgroup edition, so that limit is 5.  

Well, that was a tough installation process, but it was worth it. TFS is now up and running. It gives you a project structure, it gives you process guidance, a Sharepoint site to manage each project, reporting with SQL Server Reporting Services (SSRS) amongst many other features. Hope this helps!


Windows 7 and Windows 2008 Server R2 have RTM’d

July 23, 2009

Of course, I’m trying to get a server going with Windows Server 2008, and it’s giving me all sorts of problems!

Link to official release of Windows Server 2008 R2:

http://blogs.technet.com/windowsserver/archive/2009/07/22/windows-server-2008-r2-rtm.aspx

Link to official release of Windows 7:

http://windowsteamblog.com/blogs/windows7/archive/2009/07/22/windows-7-has-been-released-to-manufacturing.aspx


SQL Server 2005 – When it is acceptable to use cursors

July 14, 2009

I had someone recently ask me when it is acceptable to use cursors, because, believe it or not, there are acceptable circumstances where they should be considered.

Firstly, if you’re performing a one off batch process where the execution time doesn’t really matter, I mean, why not?  Whatever gets the job done, done quickly, and done in a form that is clear enough for you to understand – although that said, some would call it bad form because they consider that it doesn’t give you practice with “correct” set-based SQL.

Secondly, take a look at MVP Greg Low’s post on Avoiding Blocking Issues in ASP.Net Session State Databases. Here, Greg describes a scenario where the use of set-based SQL actually causes slower querying due to blocking that occurs while rows that are no longer being used are cleaned up.

More importantly, this has an implication in any database where you are using temporary session-style records that need to periodically be cleaned up. One scenario that I came across recently was with the building of advanced queries – the queries have multiple query parts and it was decided to store the state in the database against the session and user, but to not specifically use session objects to store this information. After a period of time, however, unused queries are cleaned up. This could potentially create the same sort of blocking problem that Greg is talking about in his article above.