Vla*_*sky 6 sql-server sql-server-2012 high-availability availability-groups
如何查看集群主节点的故障转移历史?我试图弄清楚辅助节点是在什么时候开始充当主要节点的。
我们正在运行带有 SQL Server 2012 和可用性组的 Windows Server 2012。
Tho*_*ger 10
这是我的首选查询,用于提取 Aaron 提到的事件 (availability_replica_state_change)。此脚本还可以随意将 UTC 时间转换为您的本地时间:
declare @xel_path varchar(1024);
declare @utc_adjustment int = datediff(hour, getutcdate(), getdate());
-------------------------------------------------------------------------------
------------------- target event_file path retrieval --------------------------
-------------------------------------------------------------------------------
;with target_data_cte as
(
select
target_data =
convert(xml, target_data)
from sys.dm_xe_sessions s
inner join sys.dm_xe_session_targets st
on s.address = st.event_session_address
where s.name = 'alwayson_health'
and st.target_name = 'event_file'
),
full_path_cte as
(
select
full_path =
target_data.value('(EventFileTarget/File/@name)[1]', 'varchar(1024)')
from target_data_cte
)
select
@xel_path =
left(full_path, len(full_path) - charindex('\', reverse(full_path))) +
'\AlwaysOn_health*.xel'
from full_path_cte;
-------------------------------------------------------------------------------
------------------- replica state change events -------------------------------
-------------------------------------------------------------------------------
;with state_change_data as
(
select
object_name,
event_data =
convert(xml, event_data)
from sys.fn_xe_file_target_read_file(@xel_path, null, null, null)
)
select
object_name,
event_timestamp =
dateadd(hour, @utc_adjustment, event_data.value('(event/@timestamp)[1]', 'datetime')),
ag_name =
event_data.value('(event/data[@name = "availability_group_name"]/value)[1]', 'varchar(64)'),
previous_state =
event_data.value('(event/data[@name = "previous_state"]/text)[1]', 'varchar(64)'),
current_state =
event_data.value('(event/data[@name = "current_state"]/text)[1]', 'varchar(64)')
from state_change_data
where object_name = 'availability_replica_state_change'
order by event_timestamp desc;
Run Code Online (Sandbox Code Playgroud)