Instance Üzerindeki Veritabanlarından Sadece Standalone Olanları Listelemek
Özellikle Always On kullanıyorsanız ve bazı veritabanlarınızı always on yapısına geçirmediyseniz bazı durumlarda instance üzerinden bulunan ve ag’ye dahil olmayan veritabanlarının listesine ihtiyacınız oluyor.
Aşağıdaki 2 script’te instance üzerindeki veritabanlarından sadece standalone olanların listesini veriyor. İkincisini ilkini bulamadığımda yazdım. 🙂 Dilediğinizi kullanabilirsiniz.
1)
select name from sys.sysdatabases where name not in( SELECT DISTINCT dbcs.database_name AS name FROM master.sys.availability_groups AS AG LEFT OUTER JOIN master.sys.dm_hadr_availability_group_states as agstates ON AG.group_id = agstates.group_id INNER JOIN master.sys.availability_replicas AS AR ON AG.group_id = AR.group_id INNER JOIN master.sys.dm_hadr_availability_replica_states AS arstates ON AR.replica_id = arstates.replica_id AND arstates.is_local = 1 INNER JOIN master.sys.dm_hadr_database_replica_cluster_states AS dbcs ON arstates.replica_id = dbcs.replica_id LEFT OUTER JOIN master.sys.dm_hadr_database_replica_states AS dbrs ON dbcs.replica_id = dbrs.replica_id AND dbcs.group_database_id = dbrs.group_database_id WHERE ISNULL(arstates.role, 3) = 1 OR ISNULL(dbcs.is_database_joined, 0) = 1 )and dbid >4 order by name asc
2)
SELECT name FROM sys.sysdatabases where dbid>4 and name not in( SELECT DB_NAME(dr_state.database_id) as name FROM (( sys.availability_groups AS ag JOIN sys.availability_replicas AS ar ON ag.group_id = ar.group_id ) JOIN sys.dm_hadr_availability_replica_states AS ar_state ON ar.replica_id = ar_state.replica_id) JOIN sys.dm_hadr_database_replica_states dr_state on ag.group_id = dr_state.group_id and dr_state.replica_id = ar_state.replica_id where ar_state.role_desc='PRIMARY' OR ar_state.role_desc='SECONDARY')