I just spent the week talking with 3 different customers about high availability (HA) for their SQL Server environment. In each case, we debated the merits, benefits, costs and architectures of database mirroring vs. Windows/SQL clusters vs. a combination of those approaches. I don’t want to say that after these architectural design sessions that I would reach a generalized position because mileage varies depending on many factors. A few factors that come into play in an HA decision are costs, network, workloads, DBAs, complexity, and many others. One thing that worked well in each of these sessions, which is a good general practice, is to work with your business, essentially your customers & users, and come to a contracted agreement of what your SLA and requirements will be in terms of downtime, maintenance windows and disaster recovery requirements.
Having those business requirements up-front will steer your decision toward clustering, mirroring, both, or some other solution.
Now, back to the topic at hand: database mirroring in SQL Server. Regardless of whether you decide to mirror in high-safety mode (synchronous), asych, witness … there is an EXCELLENT checklist from a Microsoft Premier Field Engineer (PFE), John Daskalakis here. I used this in each case of my architectural customer sessions. I also love to link to PFE blogs because Microsoft has some of the brightest, best and smartest SQL Server people in the world working for the Premier support team. Enjoy!