web-dev-qa-db-ja.com

常時ダッシュボードでエラーが発生しました

Windows Server Failover Clusterのセットアップがあり、1つのDC、1つのプライマリサーバー、1つのセカンダリサーバーでSQL Serverサービスを使用しています。

SQL Server Management Studioの使用中に、[Always On High Availability]の[Show Dashboard]をクリックすると、次のエラーが表示されます。

常時オンのダッシュボードでエラーが発生しました

この問題を解決するには?

enter image description here

2

要するに

この問題は、ダッシュボードがrequired_copies_to_commitに変更されたmaster.sys.availability_groups dmvのrequired_synchronized_secondaries_to_commit列を参照するクエリを実行することが原因です。

解決策はSSMSをアップグレードすることです(テストは17.4バージョンで行われます)。

SSMS 17.0

SSMS 17.0がインストールされているマシンでこれを再試行する場合

同じエラーが発生します:

無効な列名required_copies_to_commit

enter image description here

これは、17.0でダッシュボードを開いたときにクエリが異なるためです:

      select * into #tmpag_availability_groups from master.sys.availability_groups
    ...
    SELECT
    CAST(
            serverproperty(N'Servername')
           AS sysname) AS [Server_Name],
    AG.name AS [Name],
    ISNULL(AG.automated_backup_preference, 4) AS [AutomatedBackupPreference],
    ISNULL(AG.failure_condition_level, 6) AS [FailureConditionLevel],
    ISNULL(AG.health_check_timeout, -1) AS [HealthCheckTimeout],
    AR2.replica_metadata_id AS [ID],
    ISNULL(arstates2.role, 3) AS [LocalReplicaRole],
    ISNULL(agstates.primary_replica, '') AS [PrimaryReplicaServerName],
    AG.group_id AS [UniqueId],
    ISNULL(AG.basic_features, 0) AS [BasicAvailabilityGroup],
    ISNULL(AG.db_failover, 0) AS [DatabaseHealthTrigger],
    ISNULL(AG.dtc_support, 0) AS [DtcSupportEnabled],
    ISNULL(AG.is_distributed, 1) AS [IsDistributedAvailabilityGroup],
    ISNULL(AG.cluster_type, 0) AS [ClusterType],
    ISNULL(AG.required_copies_to_commit, 0) AS [RequiredCopiesToCommit]
    FROM
    #tmpag_availability_groups AS AG
    LEFT OUTER JOIN #tmpag_availability_group_states as agstates ON AG.group_id = agstates.group_id
    INNER JOIN #tmpag_availability_replicas AS AR2 ON AG.group_id = AR2.group_id
    INNER JOIN #tmpag_availability_replica_states AS arstates2 ON AR2.replica_id = arstates2.replica_id AND arstates2.is_local = 1
    ORDER BY
    [Name] ASC
   ...

存在しない列が使用されています

ISNULL(AG.required_copies_to_commit, 0) AS [RequiredCopiesToCommit]

SSMSの新しいバージョンの正しい列の代わりに:

ISNULL(AG.required_synchronized_secondaries_to_commit, 0) AS [RequiredSynchronizedSecondariesToCommit]

SSMS 17.4

免責事項:バージョン17.1、17.2、17.3でも正しいダッシュボードが表示される場合があります。まだテストしていません

ダッシュボードが正しく開いているときにssms(17.4以降)によって実行されているクエリをトレースすると、このクエリが実行されます

select * into #tmpag_availability_groups from master.sys.availability_groups
        ...    
SELECT
    CAST(
            serverproperty(N'Servername')
           AS sysname) AS [Server_Name],
    AG.name AS [Name],
    ISNULL(AG.automated_backup_preference, 4) AS [AutomatedBackupPreference],
    ISNULL(AG.failure_condition_level, 6) AS [FailureConditionLevel],
    ISNULL(AG.health_check_timeout, -1) AS [HealthCheckTimeout],
    AR2.replica_metadata_id AS [ID],
    ISNULL(arstates2.role, 3) AS [LocalReplicaRole],
    ISNULL(agstates.primary_replica, '') AS [PrimaryReplicaServerName],
    AG.group_id AS [UniqueId],
    CAST(ISNULL(AG.basic_features, 0) AS bit) AS [BasicAvailabilityGroup],
    CAST(ISNULL(AG.db_failover, 0) AS bit) AS [DatabaseHealthTrigger],
    CAST(ISNULL(AG.dtc_support, 0) AS bit) AS [DtcSupportEnabled],
    CAST(ISNULL(AG.is_distributed, 0) AS bit) AS [IsDistributedAvailabilityGroup],
    ISNULL(AG.cluster_type, 0) AS [ClusterType],
    ISNULL(AG.required_synchronized_secondaries_to_commit, 0) AS [RequiredSynchronizedSecondariesToCommit]
    FROM
    #tmpag_availability_groups AS AG
    LEFT OUTER JOIN #tmpag_availability_group_states as agstates ON AG.group_id = agstates.group_id
    INNER JOIN #tmpag_availability_replicas AS AR2 ON AG.group_id = AR2.group_id
    INNER JOIN #tmpag_availability_replica_states AS arstates2 ON AR2.replica_id = arstates2.replica_id AND arstates2.is_local = 1
    ORDER BY
    [Name] ASC
...


 select * into #tmpag_availability_groups from master.sys.availability_groups

SSMSバージョン

enter image description here

(17.4)

補足として、これらの列の一部はsys.availability_groupsdmv reference に追加されていません。

結局、ダッシュボードは正しく開きます。

正しい列名が使用されているため

required_synchronized_secondaries_to_commit 

ソリューション

クエリで正しい既存のDMV列を取得するには、SSMSの上位バージョン(17.4を使用した場合)にアップグレードする必要があります。

1
Randi Vertongen