We have SQL Server 2008 set up in with a principal, mirror and monitor server, the mirror is synchronized and set to automatic failover. We recently saw a situation where we ran out of space on the principal server, which crippled the application using the database but didn't cause a failover, even though each query that the application ran was answered with an error:
The transaction log for database 'XXXX' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
I'm trying to figure out why failover didn't occur. Is because the mirror/witness still consider that the server is up as it is responding to pings and queries (all be it with an error)? Or is it something we have mis-configured? Do we need to add code our application layer to detect database errors like this and initiate a failover?
In parallel we are improving our monitoring so to try and avoid disk space problems, but we would still like to improve the reliability of the automatic failover.