Thursday, April 16, 2009

Unable to rename machine running TFS 2008 (single server deployment).

I am trying to rename the host machine that is running TFS 2008 and it is not working!

Here are the steps I tried out on the Virtual PC 2007 TFS 2008 image (where i renamed the host from TfsRTM08 to TfsRTM-09) and the error message that I ended up with (which can be found right at the end):

Does any one know what is going on here?

Steps from How to: Rename a Data-Tier Server

According to the note right at the beginning:

If you restart the server in a single-server deployment, wait for the server to restart, and then stop the services that Team Foundation Server uses.

1. Shutdown services and sites

Windows SharePoint Services Timer
Default Web Site

Visual Studio Team Foundation Server Task Scheduler Service
Microsoft Team Foundation Server Application Pool

SQL Server Reporting Services (TFSINSTANCE)
ReportServer (application pool)

2. Rename the server to TFSRTM-09

Check if all services in step 1 are still shutdown (otherwise shut them down).

3. Redirect and rename reporting Services

Make sure that the following services are running

SQL Server Analysis Services
SQL Server Analysis Services (MSSQLSERVER)

SQL Server (MSSQLSERVER)
SQL Server Agent (MSSQLSERVER)

On the server that is running Reporting Services, click Start, point to All Programs, point to Microsoft SQL Server, point to Configuration Tools, and then click Reporting Services Configuration
In the Report Server Installation Instance Selection dialog box, make sure that the name of the current data-tier server appears and that the instance name is MSSQLSERVER, and then click Connect.
In the Explorer pane, click Server Status.
In the Report Server Status pane, click Start.
In the Explorer pane, click Database Setup.
In Server Name, type the name of the new data-tier server, and then click Connect. The SQL Server Connection dialog box opens.
In Database Name, type ReportServer, and click OK.
In the Database Connection pane, click Apply.
In the SQL Server Connection Dialog dialog box, click OK.

Error is reported: “Assigning Reporting Services Rights to User”
System.Data.SqlClient.SqlException: Windows NT user or group 'TFSRTM-09\tfsSqlServer' not found. Check the name again.at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()at Microsoft.ReportingServices.Common.DBUtils.ApplyScript(String connectionString, String script)at ReportServicesConfigUI.SqlClientTools.SqlTools.ApplyScript(String connectionString, String script)

In the Explorer pane of Reporting Services Configuration Manager, click Windows Service Identity.
In the Built-in Service Account list, click Local Service, click Network Service, and then click Apply.
You are prompted to back up the symmetric key.
Redo the steps of setting up the Database above. This time no error will be reported.

Open Computer Manager, and start the ReportServer or ReportServer$InstanceName application pool.
Open Internet Explorer, type the following string in the Address bar, and press ENTER: http://localhost/Reports (Also had to start the Default Website for this to work)
Click TfsOlapReportsDS.
In the Connection string box, update the Data source argument with the name of the server that hosts SQL Server Analysis Services. For example, type the following string:
Data source=NameOfAnalysisServicesDataTierServer\TFSInstance
Do the same for TfsReportDS

4. Update the Application-Tier Server to Work with the Renamed Server

Start the following services and websites

Microsoft Team Foundation Server Application Pool
ReportServer (application pool)
SQL Server Reporting Services (TFSINSTANCE)

Open the Command Prompt window, change directories to %ProgramFiles%\Microsoft Visual Studio 2008 Team Foundation Server\Tools, and type the following command:

TfsAdminUtil RenameDT tfsRTM-09

Error:
Verifying new selected TFS data source tfsrtm-09.
Verified new selected TFS data source tfsrtm-09 as valid.
ERROR: TF55030: Rename Data Tier failed. Please verify that the supplied Data Tier name is a valid Team Foundation Data Tier name,that the Data Tier can be accessed on the network and that you have administrative rights.

type the following command Set TfsDetailedErrors=1

Run the RenameDT command once again to get more error detail

Error:
Verifying new selected TFS data source tfsrtm-09.
Verified new selected TFS data source tfsrtm-09 as valid.
ERROR: Microsoft.TeamFoundation.Server.TfsAdminException: TF55030: Rename Data Tier failed. Please verify that the supplied Data Tier name is a valid Team Foundation Data Tier name, that the Data Tier can be accessed on the network and that you have administrative rights. ---> System.Net.WebException: The remote name could not be resolved: 'tfsrtm08' at System.Net.HttpWebRequest.GetRequestStream() at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at Microsoft.TeamFoundation.Proxy.Reporting.ReportingService.GetDataSourceContents(String DataSource) at Microsoft.TeamFoundation.Server.TfsDT.ChangeDataSources(String oldDataTierName, String newDataTierName) at Microsoft.TeamFoundation.Server.TfsDT.Rename(String newDataSourceName)--- End of inner exception stack trace --- at Microsoft.TeamFoundation.Server.TfsDT.Rename(String newDataSourceName) at Microsoft.TeamFoundation.Server.TfsAdmin.RenameDataTier(TfsAdminContext context, String newDataTierName) at Microsoft.TeamFoundation.Server.TfsAdminUtil.RunRenameDTUtil(List`1 parameters, List`1 commandSwitches, String[] rawArgs) at Microsoft.TeamFoundation.Server.TfsAdminUtil.Run(String[] args)
> Inner Exception: Status Code: NameResolutionFailure
System.Net.WebException: The remote name could not be resolved: 'tfsrtm08'
at System.Net.HttpWebRequest.GetRequestStream() at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at Microsoft.TeamFoundation.Proxy.Reporting.ReportingService.GetDataSourceContents(String DataSource) at Microsoft.TeamFoundation.Server.TfsDT.ChangeDataSources(String oldDataTierName, String newDataTierName) at Microsoft.TeamFoundation.Server.TfsDT.Rename(String newDataSourceName)

The error is very weird because it says that “The remote name could not be resolved: 'tfsrtm08'”. And TfsRtm08 will obviously not be found because it has been renamed to tfsrtm-09!.'

Any suggestions?

update (Apr 16, 2009) : I have posted this question to MSDN forums.

6 comments:

Robert said...

If you are following this document:

http://msdn.microsoft.com/en-us/library/ms404869.aspx

It sounds like you may have missed the step where you repoint your RS server Uris using "tfsadminutil configureconnections"

(see section: http://msdn.microsoft.com/en-us/library/ms404869.aspx#Rename )

If you aren't following those instructions I would encourage you to do so.

Regards,

Robert Horvick

Raj Rao said...

running ConfigureConnections /view fails with the following error message

TfsAdminUtil - Team Foundation Admin Utility
Copyright (c) Microsoft Corporation. All rights reserved.

ERROR: Microsoft.TeamFoundation.Server.TfsAdminException: TF55020: Could not access database. ---> Microsoft.TeamFoundation.Server.D
atabaseConnectionException: TF30041: Team Foundation Server could not connect to the database. Contact your Team Foundation Server
administrator. ---> System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a c
onnection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Serve
r is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTime
out, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpe
nTimeout, Int64 timerExpire, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance
, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptio
ns, String newPassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions,
Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConne
ctionPool pool, DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbCo
nnectionOptions options)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory
)
at System.Data.SqlClient.SqlConnection.Open()
at Microsoft.TeamFoundation.Server.SqlResourceComponent.execute(ExecuteType executeType, CommandBehavior behavior)
--- End of inner exception stack trace ---
at Microsoft.TeamFoundation.Server.SqlResourceComponent.MapException(SqlException ex, QueryExecutionState queryState)
at Microsoft.TeamFoundation.Server.SqlResourceComponent.MapException(SqlException ex)
at Microsoft.TeamFoundation.Server.SqlResourceComponent.HandleException(SqlException ex)
at Microsoft.TeamFoundation.Server.SqlResourceComponent.execute(ExecuteType executeType, CommandBehavior behavior)
at Microsoft.TeamFoundation.Server.SqlResourceComponent.ExecuteReader()
at Microsoft.TeamFoundation.Server.BisResourceComponent.GetServiceInterface(String entryType, String interfaceName)
--- End of inner exception stack trace ---
at Microsoft.TeamFoundation.Server.BisResourceComponent.GetServiceInterface(String entryType, String interfaceName)
at Microsoft.TeamFoundation.Server.TfsAdmin.GetCurrentConnections(TfsAdminContext context)
at Microsoft.TeamFoundation.Server.TfsAdmin.ShowCurrentConnections(TfsAdminContext context)
at Microsoft.TeamFoundation.Server.TfsAdminUtil.RunConfigureConnectionsUtil(List`1 parameters, List`1 commandSwitches, String[] r
awArgs)
at Microsoft.TeamFoundation.Server.TfsAdminUtil.Run(String[] args)
> Inner Exception:
Microsoft.TeamFoundation.Server.DatabaseConnectionException: TF30041: Team Foundation Server could not connect to the database. Con
tact your Team Foundation Server administrator. ---> System.Data.SqlClient.SqlException: A network-related or instance-specific erro
r occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance n
ame is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not
open a connection to SQL Server)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTime
out, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpe
nTimeout, Int64 timerExpire, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance
, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptio
ns, String newPassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions,
Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConne
ctionPool pool, DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbCo
nnectionOptions options)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory
)
at System.Data.SqlClient.SqlConnection.Open()
at Microsoft.TeamFoundation.Server.SqlResourceComponent.execute(ExecuteType executeType, CommandBehavior behavior)
--- End of inner exception stack trace ---
at Microsoft.TeamFoundation.Server.SqlResourceComponent.MapException(SqlException ex, QueryExecutionState queryState)
at Microsoft.TeamFoundation.Server.SqlResourceComponent.MapException(SqlException ex)
at Microsoft.TeamFoundation.Server.SqlResourceComponent.HandleException(SqlException ex)
at Microsoft.TeamFoundation.Server.SqlResourceComponent.execute(ExecuteType executeType, CommandBehavior behavior)
at Microsoft.TeamFoundation.Server.SqlResourceComponent.ExecuteReader()
at Microsoft.TeamFoundation.Server.BisResourceComponent.GetServiceInterface(String entryType, String interfaceName)
>> Inner Exception:
SQL Error #1
SQL Message: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not
found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections
. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
SQL LineNumber: 0
SQL Source: .Net SqlClient Data Provider
SQL Procedure:

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Ser
ver. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to a
llow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTime
out, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpe
nTimeout, Int64 timerExpire, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance
, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptio
ns, String newPassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions,
Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConne
ctionPool pool, DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbCo
nnectionOptions options)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory
)
at System.Data.SqlClient.SqlConnection.Open()
at Microsoft.TeamFoundation.Server.SqlResourceComponent.execute(ExecuteType executeType, CommandBehavior behavior)
Exception Data:
Key: HelpLink.ProdName, Value: Microsoft SQL Server
Key: HelpLink.EvtSrc, Value: MSSQLServer
Key: HelpLink.EvtID, Value: 53
Key: HelpLink.BaseHelpUrl, Value: http://go.microsoft.com/fwlink
Key: HelpLink.LinkId, Value: 20476

Robert said...

Further on in the documented I referenced earlier it explains how to update the DB connection string in the web.config file. Doing that might help with the configureconnections command.

Robert.

Raj Rao said...

Robert - I will try that tomorrow morning.

Just so that you know, when I first started I was following the instructions in http://msdn.microsoft.com/en-us/library/ms253106.aspx

What I have is a single tier TFS 2008 server (AT&DT). Now that I am ready to move it to production all I want to do is rename the server to the standards we use for our production machine.

Based on that scenario, I am following only the these steps from the document you referenced.

1. Prepare For a Restoration-Based Move
2. Skip - (Install Team Foundation Server on the New Hardware)
3. Skip - (Back up the WSS_Config Database on the New Server)
4. Skip - (Restore the Databases)
5. Restore Web Sites for Team Projects
6. Restore and Test SQL Report Server, Reporting Services, and Default Reports
7. Rename the Data-Tier Server and Activate the Application-Tier Server

(This where I ran in to problems last time).

Thanks again for your help.

Robert said...

Ah - I think that the step you skipped:

Skip - (Install Team Foundation Server on the New Hardware)

Would have updated the web.config file as I am suggesting.

Let me know how it goes.

You can contact me at robert.horvick AT microsoft.com if you find yourself blocked. Depending on the severity of the issue I may need to redirect you to customer support but I can certainly try and help you out.

Bill Wang said...

The call stack of running RenameDT indicates that the issue happens when invoking the reporting service web services to change the data source connection strings. It reminds me a similar case at http://social.msdn.microsoft.com/Forums/en-US/tfssetup/thread/543f9fc2-590f-4667-843b-d2dc14ec9d27.

As Robert suggested, I would run TfsAdminUtil ConfigureConnections to verify the reporting service url.

Before you run TfsAdminUtil ConfigureConnections, please update the connection string in the web.config to point to the NEW data tier name.

Before you run TfsAdminUtil RenameDT, please update the connection string in the web.config to point to the OLD data tier name.