web-dev-qa-db-ja.com

SQL Serverの高可用性fn_hadr_backup_is_preferred_replicaがセカンダリで0ゼロを返す

私はOla Hallengren Maintenance Solutionを実行していますが、AGバックアップの優先設定が[Prefer Secondary]に設定されているにもかかわらず、トランザクションログがセカンダリでバックアップされていないため、トランケートされていません。実行した場合:

SELECT availability_groups.name,
   dm_hadr_availability_replica_states.role_desc,
   UPPER(availability_groups.automated_backup_preference_desc) as 'preference'
FROM sys.databases databases
  INNER JOIN sys.availability_databases_cluster availability_databases_cluster ON databases.group_database_id = availability_databases_cluster.group_database_id
  INNER JOIN sys.availability_groups availability_groups ON availability_databases_cluster.group_id = availability_groups.group_id
  INNER JOIN sys.dm_hadr_availability_replica_states dm_hadr_availability_replica_states ON availability_groups.group_id = dm_hadr_availability_replica_states.group_id AND databases.replica_id = dm_hadr_availability_replica_states.replica_id
WHERE databases.name = 'EXT_CONFIG_DB'

セカンダリで、私は得ます:

name            role_desc   preference
SP-EXT-CONFIG   SECONDARY   SECONDARY

これは予想通りです。ただし、次に実行した場合:

SELECT sys.fn_hadr_backup_is_preferred_replica('EXT_Config_DB') as 'is_preferred_replica'

私は得ます:

is_preferred_replica
0

これは誤りであり、1に設定する必要があります。 fn_hadr_backup_is_preferred_replicaビットが0に設定されているため、Olaジョブはバックアップを行わないため、ログを切り捨てません。検索は小文字のインスタンス名が問題である可能性を示唆しているようですが、私のインスタンス名はすべて大文字です。

誰かがfn_hadr_backup_is_preferred_replicaが1ではなく0を返すように解決策を提案できますか?

Backup Preferences

Replica Properties

3
DiamondBeezer

これは誤りであり、1に設定する必要があります。

1に設定したい場合は、バックアップ設定を適切に構成する必要があります。

1が返されないのは、現在の設定に基づいてはならないためです。現在、すべてのレプリカのバックアップ優先度はまったく同じです。つまり、次にレプリカ名を確認します。 UK-DR-SQL001\WSSが最初にソートされるので、そのすべきは、関数がUK-SB-SQL01\WSSを返すセカンダリ(1がプライマリである場合)になります。

別のサーバーでバックアップを実行する場合は、優先度を適切に設定します。

以下は、現在の設定を前提として、UK-DR-SQL001\WSS1が返されるレプリカである必要があることを示す非常に単純な再現です。

CREATE TABLE #Replicas
(
    ReplicaName VARCHAR(40) NOT NULL,
    BackupPriority INT NOT NULL
)
GO

INSERT INTO #Replicas(ReplicaName, BackupPriority) 
Values('UK-DR-SQL001\WSS', 50)
,('UK-SB-SQL01\WSS',50)
,('UK-SB-SQL02\WSS',50)
GO

-- current case UK-SB-SQL01\WSS is the PRIMARY
-- prefer secondary is set
-- default collation assumed

SELECT ReplicaName, BackupPriority
FROM #Replicas
WHERE ReplicaName <> 'UK-SB-SQL01\WSS'
ORDER BY BackupPriority DESC --most important first
, ReplicaName ASC

私はOla Hallengren Maintenance Solutionを実行していますが、AGバックアップ設定がPrefer Secondaryに設定されているにもかかわらず、トランザクションログがセカンダリにバックアップされていないため、トランケートされていません。

これはDRサーバーでセットアップまたは実行されていないようです。またはバックアップ少なくともが試行されます。

4
Sean Gallardy

関数fn_hadr_backup_is_preferred_replicaの内部コードは、SELECT @@SERVERNAMEの出力を利用して、レプリカ名を確実に一致させます。

その出力がセカンダリのレプリカ名と一致することを確認します。また、サーバーで大文字と小文字を区別する照合を使用している場合は、exactの一致である必要があります。そうしないと、同じ結果が得られます。

2
user507