

# マルチ AZ 配置の TempDB 設定
<a name="SQLServer.TempDB.MAZ"></a>

データベースミラーリング (DBM) または Always On Availability Groups (AG) を使用して、RDS for SQL Server DB インスタンスがマルチ AZ 配置にある場合、`tempdb` データベースの使用については、以下の考慮事項に留意してください。

プライマリ DB インスタンスからセカンダリ DB インスタンスに `tempdb` データをレプリケートすることはできません。セカンダリ DB インスタンスにフェイルオーバーすると、そのセカンダリ DB インスタンスの `tempdb` は空になります。

プライマリ DB インスタンスからセカンダリ DB インスタンスに、ファイルのサイズ設定や自動拡張設定などの `tempdb` データベースオプションの設定を同期できます。`tempDB` 設定の同期は、すべての RDS for SQL Server バージョンでサポートされています。次のストアドプロシージャを使用して、`tempdb` 設定の自動同期を有効にできます。

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'TempDbFile';
```

**重要**  
`rds_set_system_database_sync_objects` ストアドプロシージャを使用する前に、セカンダリ DB インスタンスではなく、プライマリ DB インスタンスで希望の `tempdb` 設定を行ってください。セカンダリ DB インスタンスで設定を変更した場合、自動同期を有効にすると、希望の `tempdb` 設定が削除される可能性があります。

次の関数を使用して、`tempdb` 設定の自動同期が有効になっているかどうかを確認できます。

```
SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();
```

`tempdb` 設定の自動同期が有効な場合、`object_class` フィールドに戻り値があります。無効なときには、値は返されません。

次の関数を使用して、オブジェクトが UTC 時間で最後に同期された時刻を調べることができます。

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

例えば、`tempdb` 設定を 01:00 に変更してから `rds_fn_server_object_last_sync_time` 関数を実行した場合、`last_sync_time` として返される値は 01:00 より後であり、自動同期が発生したことを示します。

SQL Server Agent ジョブレプリケーションも使用している場合は、 `@object_type` パラメータで指定することで、SQL Agent ジョブと `tempdb` 設定の両方のレプリケーションを有効にできます。

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob,TempDbFile';
```

SQL Server Agent ジョブのレプリケーションの詳細については、「[SQL Server エージェントジョブレプリケーションをオンにする](Appendix.SQLServer.CommonDBATasks.Agent.md#SQLServerAgent.Replicate)」を参照してください。

`rds_set_system_database_sync_objects` ストアドプロシージャを使用して `tempdb` 設定変更が自動的に同期されるようにする代わりに、次のいずれかの手動方法を使用できます。

**注記**  
`rds_set_system_database_sync_objects` ストアドプロシージャを使用して `tempdb` 設定の自動同期を有効にすることをお勧めます。自動同期を使用すると、`tempdb` 設定を変更するたびにこれらの手動タスクを実行する必要がなくなります。
+ まず DB インスタンスを変更してマルチ AZ を無効にします。次に tempdb を変更し、最後にマルチ AZ を再度有効にします。この方法に伴うダウンタイムはありません。

  詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。
+ まず元のプライマリインスタンスで `tempdb` を変更します。次に手動でフェイルオーバーし、最後に新しいプライマリインスタンスで `tempdb` を変更します。このメソッドではダウンタイムが生じます。

  詳しくは、「[ DB インスタンスの再起動](USER_RebootInstance.md)」を参照してください。