listener を持つ可用性グループがあります。
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」のリスナーがあります。可用性グループに含めることができるリスナーは1つだけです。既存のリスナーを使用するか、既存のリスナーを削除して新しいリスナーを作成します。
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句にWhere-Object {$_.OwnerGroup -eq "SQLPROD_AG" -and $_.ResourceType -eq "Network Name' }
を使用します。
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'
可用性グループリスナーの削除 を参照してください。