Esclarecimento direto : Estou usando RPO para descrever "Perda de dados estimada" e RTO para descrever "Tempo de recuperação estimado" nesta pergunta. Percebo que não são definições exatas, mas estão próximas o suficiente para o bem da questão.
Na parte inferior deste artigo, há um excelente bloco de código usado para calcular o RPO para uma determinada instância habilitada para Always-On:
--@EstimatedDataLoss (RPO)
WITH DR_CTE ( replica_server_name, database_name, last_commit_time)
AS
(
select ar.replica_server_name, database_name, rs.last_commit_time
from master.sys.dm_hadr_database_replica_states rs
inner join master.sys.availability_replicas ar on rs.replica_id = ar.replica_id
inner join sys.dm_hadr_database_replica_cluster_states dcs on dcs.group_database_id = rs.group_database_id and rs.replica_id = dcs.replica_id
where replica_server_name != @@servername
)
select ar.replica_server_name, dcs.database_name, rs.last_commit_time, DR_CTE.last_commit_time 'DR_commit_time', datediff(ss, DR_CTE.last_commit_time, rs.last_commit_time) 'lag_in_seconds'
from master.sys.dm_hadr_database_replica_states rs
inner join master.sys.availability_replicas ar on rs.replica_id = ar.replica_id
inner join sys.dm_hadr_database_replica_cluster_states dcs on dcs.group_database_id = rs.group_database_id and rs.replica_id = dcs.replica_id
inner join DR_CTE on DR_CTE.database_name = dcs.database_name
where ar.replica_server_name = @@servername
order by lag_in_seconds desc
E com algumas de minhas próprias modificações, uma consulta semelhante pode ser derivada para RTO:
--@EstimatedRecoveryTime (RTO)
select ar.replica_server_name, dcs.database_name, rs.redo_queue_size, rs.redo_rate, rs.redo_queue_size/rs.redo_rate as TRedo
from master.sys.dm_hadr_database_replica_states rs
inner join master.sys.availability_replicas ar on rs.replica_id = ar.replica_id
inner join sys.dm_hadr_database_replica_cluster_states dcs on dcs.group_database_id = rs.group_database_id and rs.replica_id = dcs.replica_id
where ar.replica_server_name != @@servername
Essas métricas funcionarão bem para meus ambientes Always-On, no entanto, estou procurando aplicar o mesmo para SQL Mirroring em alguns ambientes anteriores a 2012.
Existem objetos de sistema semelhantes para calcular as mesmas métricas para espelhamento de SQL?
Nota: Minhas referências ao que conta como RTO e RPO vêm deste artigo da Mircosoft:
https://msdn.microsoft.com/en-us/library/dn135338(v=sql.110).aspx