I can only second what Tom said.
The foundation of high availability and the fewest possible downtime is redundancy and load balancing. We have a completely redundant system in place that uses load balancing. I've yet to see an absolutely seamless switch with not one single client being affected. Although it takes only a small fracture of a second to have the load balancer recognize a system being down, during peak times, exactly during this smallest of small time windows a request might still be routed to the system which is down and thus failing.
I need to point out here, that you can not achieve such a solution with fat clients that have a database connection and r-code that is exectued on the client. Fat clients that lose the database connection for whatever reason will always encounter a STOP condition. Although you are able to handle a STOP condition gracefully there is no way to fail over the database connection. Even if that were possible there is still a security issue in failing over an authenticated user identity without exposing it on the client ripe to be stolen by an attacker. Persisting any kind of authentication/authorization credentials or single-sign-on object on the client is a NO GO.
Whatever you are trying to do in order to minimize downtime during deployment - if you want to reduce the downtime to an absolute minimum you need to make really serious investments in redundancy and load balancing and modern application architecture.
Heavy Regards, RealHeavyDude.