Showing posts with label Project Server 2010. Show all posts
Showing posts with label Project Server 2010. Show all posts

Saturday, August 14, 2010

How to move Project Server 2010 to another farm

It seems quite easy following the article http://technet.microsoft.com/en-us/library/dd207290.aspx, however, that doesn't work in my case.  I checked Project Server 2010: Restoring or Migrating PWA Instances carefully, but, so far, no luck.

The error message is something like below:


Standard Information:PSI Entry Point:
Project User: PW2\svcadmin
Correlation Id: 42746a45-2147-4214-9787-87f93179c2a7
PWA Site URL: http://hvsp2010:700/PWA3
SSP Name: Project Web App service
PSError: NoError (0)
Queue SQL call failed. Error: System.Data.SqlClient.SqlException: A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - The pipe is being closed.)
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParserStateObject.WriteSni()
   at System.Data.SqlClient.TdsParserStateObject.ExecuteFlush()
   at System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Microsoft.Office.Project.Server.DataAccessLayer.DAL.SubDal.ExecuteStoredProcedureNoResult(String storedProcedureName, SqlParameter[] parameters)
   at Microsoft.Office.Project.Server.DataAccessLayer.QueueDal.GetJobCountPerfMon(String prefix, Int32& totalCount, Int32 idMarker, Int32& newJobCount, Int32& newIdMarker)
   at Microsoft.Office.Project.Server.BusinessLayer.Queue.BaseQueueAccess.SqlCallRetry.GetJobCountPerfMonSqlCall.Execute()
   at Microsoft.Office.Project.Server.BusinessLayer.Queue.BaseQueueAccess.SqlCallRetry.RetryableSqlCallBase.ExecuteRetryableSqlCall()




Standard Information:PSI Entry Point:
Project User: PW2\svcadmin
Correlation Id: d99d91b4-ebfc-49e9-a309-16d63b26bcb8
PWA Site URL: http://hvsp2010:700/PWA3
SSP Name: Project Web App service
PSError: NoError (0)
Project Server has encountered an underlying SQL Server exception. Please refer to SQL Server documentation for more details.
SQL Exception details:SqlException occurred in DAL:
00232

System.Data.SqlClient.SqlError: A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - The pipe is being closed.)


   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParserStateObject.WriteSni()
   at System.Data.SqlClient.TdsParserStateObject.ExecuteFlush()
   at System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Microsoft.Office.Project.Server.DataAccessLayer.DAL.SubDal.ExecuteStoredProcedureNoResult(String storedProcedureName, SqlParameter[] parameters)

.


In the end, as a dirty fix, I backup the whole farm and then restore it to the new SharePoint server.  It works.

How to move and migrate SharePoint farm

In common scenario, we need at least 3 farms: for development, for test and for production.  But for small company, it's quite often that we only have one production farm. And it's not so easy build a development or test farm based on it.

Although you can just backup and restore the site collection to the new farm, but if some sub system as "Project Server 2010" get involved, that doesn't work.

Here is how I do it for simple farm under the same domain.

1. Install a new SharePoint farm on 2 machines. One for sql server, one for SharePoint;
Don't start up any application service.
Remove unnecessary databases except "SharePoint_Config" and "SharePoint_Admin_xxxxxx".
Remove all folders under "C:\inetpub\wwwroot\wss\VirtualDirectories" on the new SharePoint server.

2. On the old SharePoint server, do a full farm backup through Central Admin;
The backup files need to be an UNC path like "\\server\sharedfolder".  We need to grant the read, write and change rights of that folder to "everyone".

3. Restore the backup through the Central Admin of the new farm.
Change the server name and the database server name.


4. Start up application services
Here is a tricky one. Although the "Service Applications" are running:


Their actual services may not be running.

We need to make them consistent with the old server.

These settings are not part of the farm backup.


5. Change applicaiton service associations
These settings are not part of the farm backup.

6. Deploy relevant files in the file system.
Include all dlls in GAC, user controls and features in SharePoint folder, etc.
If there is no customized part (everything is out of the box), we can ignore this part.