G'dayOur system is critical to production in the the Wet-blue (first stage leather processing)Tanneries where it is installed. Such Tanneries are generally in small to medium sized towns in country areas, usually with no IT staff on-site and limited availability of external IT specialists. These Tanneries usually have variable profitability based on factors they can't control, and therefore are reticent to spend any more than they have to on IT. As a result we have put a lot of time into ensuring our system, hardware and software, is as reliable as possible, can be maintained with the facilities the Tanneries have available to them, and that is within their budget. We have considered SQL clusters, but don't believe that it provides an appropriate solution for our customers.
Our end users will NEVER install our system, it will always be done by us on-site. We will be the only ones who will set up connection strings, of which there will only be two the primary one using the database on the DataServer, and the secondary using the AppServer. Every program in the system must be using the same connection string at the same time.
All the Programs that make up our system will use the same ApplicationKey, every BO will use the same DataSourceKey, the programs will only be run on one Computer, the AppServer (either directly or via terminal services).
We use two identical servers as our AppServer and DataServer each with hot swappable RAID disks. We run SQL Server on each and have transactional replication running to ensure that the TMS DataBase on AppServer is identical with that on DataServer. We use group policy to lock down the desktops of all users (except Administrator) to the extreme so that they can only use the programs that are started for them automatically when they log on.
If DataServer fails, the production will stop, we will be called, and we will instruct a production supervisor, how to reconfigure the system so that every program will now look at the database on AppServer, so that then after a reboot production can recommence. If AppServer fails, production will stop, we will be called, we will instruct the supervisor to powerdown both servers, transfer all the hot swap disks from one AppServer to DataServer, restart the server with AppServer's disks and then proceed as for DataServer having failed. This disk swapping process is one we have been through over a dozen times!
Once "DataServer" has been repaired, we wait for an extended break in production, either overnight or weekend, copy the database from AppServer to DataServer, re-establish replication and reconfigure the system to look at the database on DataServer.
The task of reconfiguring the system to look at the database that will be the Production database is what I'm trying to accomplish now. We will have a program for which this is the only task. This program will only be available to a special user "Swap" for which this the only function available. Normal users will never get anywhere near it.
My testing indicates to me that ConnectionManager.ShowAvailableConnectionStrings() will perform the task I want swapping between pre-configured connection strings. Given that the programs are only ever run on AppServer, this will make the change for every user. My only problem is still that I would prefer not to have the user "Swap" presented with so many options. Reverting to the database on DataServer is fine as we would be doing it, but in the first instance the change will be made at a time when the pressure is on as production is stopped, and the supervisor performing the change is unlikely to be computer literate.
This is the way I'll proceed, for now anyway.
Peter