I am setting up two dev environments (one will be on my local server, another on a cloud service provider where I will do work which may require more memory than on my local server).
What can I do to ensure that both environments are always fully in sync? I am looking at deploying apps centrally and using a tool to sync SQL Server databases, and another tool for keeping Sharepoint servers in sync, between two VMs on the two environments which are like-for-like. Is there anything else which would help to achieve this?
Thanks
This is a very tricky problem for SharePoint development.
As far as SQL server goes (for non-SharePoint stuff), you can just sync your databases using the tools provided in SQL Server. The copy database wizard for example or you could even write your own SSIS package if you need custom work to be done.
SharePoint is a different matter though. You cannot just sync site collections / web applications from one server to another by just copying the databases across, it won’t work (for many reasons, but mostly because when you create a web application on a server, it creates the databases using a GUID as the application ID. That GUID is used everywhere in the database and all the links between tables will be broken if you try and change it). The structure of the SharePoint database is not documented and MS recommends against modifying it manually. And honestly, even if you did manage to sync your databases right from SQL server, you would run into other problems because not all customizations you do are saved into the database (a lot of stuff goes into the 12 hive).
So it comes down to what you are trying to achieve.
If you are trying to sync customizations (i.e. your Content types, list templates, web parts, etc.) that were coded. I would recommend that you just build WSP packages from your development environment and that you deploy them everytime you need to sync.
If you are only trying to sync data (i.e. list items) you can use the backup / restore solution (you’ll find it in Central Administration). Note that it isn’t overly reliable if you have customizations though. It works fine on out of the box sites but it can be tricky to restore once you use your own list templates, etc.
You can also write code to sync using the web services or Content Deployment API and see if it suits your needs.
You can also look into tools that will do all or a part of the work for you. Here is one
So basically, no matter how you decide to do it, it won’t be as simple as you expected it to be. The DEV / TEST / PROD environment sync problem is classic for SharePoint development.
I work on a highly customized SharePoint web app and the best solution we found was to :