Sql-Server

在哪裡可以找到與可用性組的偵聽器關聯的 DNS 名稱?

  • February 19, 2020

我有一個具有listener的可用性組。

如下圖所示,呼叫了偵聽SQLPROD器。它使用埠 1433

在此處輸入圖像描述

當我執行以下腳本時:

ALTER AVAILABILITY GROUP [SQLPROD_AG]
   ADD LISTENER 'SQLPROD' (WITH IP (('200.1.1.199', '255.255.254.0')));

我收到此錯誤消息(當它已經存在時):

消息 19477,級別 16,狀態 48,第 4 行可用性組“SQLPROD_AG”已經有一個 DNS 名稱為“SQLPROD_AG_SQLPROD”的偵聽器。可用性組只能有一個偵聽器。使用現有的偵聽器,或刪除現有的偵聽器並創建一個新偵聽器。

使用Always On 可用性組目錄視圖我沒有發現任何啟示:

select * from sys.dm_hadr_auto_page_repair  
select * from sys.dm_hadr_cluster_networks
select * from sys.dm_hadr_availability_group_states 
select * from sys.dm_hadr_database_replica_cluster_states
select * from sys.dm_hadr_availability_replica_cluster_nodes    
select * from sys.dm_hadr_database_replica_states
select * from sys.dm_hadr_availability_replica_cluster_states   
select * from sys.dm_hadr_instance_node_map
select * from sys.dm_hadr_availability_replica_states   
select * from sys.dm_hadr_name_id_map
select * from sys.dm_hadr_cluster   
select * from sys.dm_tcp_listener_states
select * from sys.dm_hadr_cluster_members   


select * from sys.availability_databases_cluster    
select * from sys.availability_groups_cluster
select * from sys.availability_group_listener_ip_addresses  
select * from sys.availability_read_only_routing_lists
select * from sys.availability_group_listeners  
select * from sys.availability_replicas
select * from sys.availability_groups

一切似乎都很好:

在此處輸入圖像描述

當我使用 powershell 時,以下命令:

Import-Module FailoverClusters  
cls
Get-ClusterResource 

在此處輸入圖像描述

我在哪裡可以找到名字在哪裡SQLPROD_AG_SQLPROD?我可以更改此名稱嗎?

返回的消息不准確,因為它指的是它將為網路名稱資源 (SQLPROD_AG_SQLPROD) 提供的名稱,並且它被錯誤地標記為 DNS 名稱。你可以看到你的AG中的網路名稱資源被命名為SQLPROD_AG_SQLPROD,這就是它所指的。

它確實應該這樣說,“可用性組 ‘SQLPROD_AG’ 已經有一個偵聽器,其網路名稱資源為 ‘SQLPROD_AG_SQLPROD’。” 創建偵聽器時,將根據以下語法使用名稱創建關聯的網路名稱資源:

<Availability Group Name>_<DNS name>

由於具有該名稱的資源已經存在,因此無法創建它。

此外,DNS 名稱中不允許使用下劃線,因此錯誤消息中給出的名稱顯然不是 DNS 名稱。

要查看與偵聽器關聯的 DNS 名稱,您可以使用 SQL Server Management Studio 並查看偵聽器的屬性,或使用故障轉移群集管理器並查看網路名稱的屬性。

以下 PowerShell 命令將返回不是核心集群資源的所有網路名稱資源的名稱和 DNS 名稱。

Get-ClusterResource | Where-Object {$_.isCoreResource -eq $false -and $_.ResourceType -eq "Network Name" } | Get-ClusterParameter | Where-Object { $_.Name -eq "DnsName" } | Select ClusterObject, Value

如果您想按特定的 AG 名稱進行過濾,您將使用Where-Object {$_.OwnerGroup -eq "SQLPROD_AG" -and $_.ResourceType -eq "Network Name' }第一個 WHERE 子句。

使用 T-SQL,您可以從 AG 相關視圖中獲取此資訊。列出所有:

select ag.name, agl.dns_name from sys.availability_group_listeners agl
join sys.availability_groups ag ON ag.group_id = agl.group_id

要僅列出 SQLPROD_AG 的一個,您只需添加一個 WHERE 子句:

WHERE ag.name = 'SQLPROD_AG'

如果您想為偵聽器使用不同的 DNS 名稱,您必須刪除目前偵聽器並創建一個新偵聽器。

ALTER AVAILABILITY GROUP SQLPROD_AG REMOVE LISTENER 'SQLPROD'

請參閱刪除可用性組偵聽器

引用自:https://dba.stackexchange.com/questions/259862