Database mirroring and log shipping. Which is better?

You may ask yourself and others this question all the time. I have heard the question a lot. The quick answer...it depends. I think both are great, however, your situation may make one more attractive than the other.

 

Here's a quick list of the main benefits of each technology as well as some limitations:

 

  • Database Mirroring benefits:
    • Instantaneous synchronization of changes
    • Easy setup and maintenance
    • Automated failover (in High Availability Mode)
    • Easy to perform failover
    • Fast failover. (if no transactions are queued)
    • Applications can be mirroring aware using failover partner parameter in connection string
  • Database Mirroring limitations:
    • Limited number of databases can be mirrored per SQL instance. (however, this number is higher than the 10 you see plastered everywhere, but really depends on your hardware)
    • Mirrored database cannot be queried, backed up, or basically touched in any way (snapshot can be taken however)
    • Only supports one to one server pairings
    • Cannot mirror a database more than once
    • Synchronous mirroring is intolerant to latency and bandwidth constraints (Asynchronous mirroring has no problems with latency or bandwidth)
  • Log Shipping benefits:
    • Very flexible - Independent jobs govern backup/copy/restore behavior
    • Delay of restore job can protect from database corruption
    • Log shipped database can be queried. (in standby mode)
    • Log shipping allows multiple standby databases
    • Perhaps more tolerant to latency than sychronous mirroring.
    • Doesn't affect performance of primary server
    • Easy setup
  • Log Shipping limitations:
    • No automated failover
    • Cannot synchronize faster than once a minute
    • Failover is more complicated than mirroring
    • Harder to view status of log shipping