

# RDS for SQL Server のストレージの使用
<a name="Appendix.SQLServer.CommonDBATasks.DatabaseStorage"></a>

RDS for SQL Server では、RDS for SQL Server インスタンスに最大 3 つの追加ボリュームをアタッチでき、それぞれが一意の Windows ドライブ文字にマッピングされます。これにより、データベースファイルをデフォルトの `D:` ドライブ以外の複数のボリュームに分散できます。ストレージボリュームを追加すると、データベースファイル管理とストレージ最適化の柔軟性が向上します。

その他の利点には以下が含まれます。
+ **柔軟なファイル配布** – データベースデータファイルとログファイルを複数のボリュームに分散して、I/O パフォーマンスを向上させます。
+ **ストレージの最適化** – ワークロード要件に応じて異なるストレージタイプと設定を使用します。
+ **スケーラビリティ** – 既存のボリュームを変更せずにストレージ容量を追加します。

**Topics**
+ [

## RDS for SQL Server で追加のストレージボリュームを使用する際の考慮事項
](#SQLServer.ASV.Considerations)
+ [

## RDS for SQL Server を使用してストレージボリュームを追加、削除、または変更する
](#SQLServer.ASV.Management)
+ [

## RDS for SQL Server を使用した追加のストレージボリュームの復元オペレーション
](#SQLServer.ASV.Restore)
+ [

## RDS for SQL Server を使用した追加のストレージボリュームのユースケース
](#SQLServer.ASV.UseCases)

## RDS for SQL Server で追加のストレージボリュームを使用する際の考慮事項
<a name="SQLServer.ASV.Considerations"></a>

RDS for SQL Server で追加のストレージボリュームを使用する場合は、次の機能と制限に注意してください。
+ SQL Server Standard Edition (SE)、Enterprise Edition (EE)、および Developer Edition (DEV-EE) でのみストレージボリュームを追加できます。
+ インスタンスごとに最大 3 つのストレージボリュームを追加できます。
+ ボリューム名は、次のように Windows ドライブ文字に自動的にマッピングされます。
  + `rdsdbdata2` – `H:` ドライブ
  + `rdsdbdata3` – `I:` ドライブ
  + `rdsdbdata4` – `J:` ドライブ
+ TempDB ファイルは、NVMe インスタンスストレージを使用するときに引き続き `T:` ドライブを使用します。SQL Server 監査ファイルと Microsoft Business Intelligence (MSBI) ファイルは `D:` ドライブに残ります。
+ 汎用 SSD (gp3) およびプロビジョンド IOPS SSD (io2) ストレージタイプのみを追加できます。
+ 追加のストレージボリュームの最小ストレージサイズは、デフォルトの `D:` ドライブに設定されている制限と同じです。DB インスタンスの最大ストレージサイズは、すべてのボリュームで合計 256 TiB です。
+ リードレプリカを持つインスタンスまたはリードレプリカインスタンスへのストレージボリュームの追加はサポートされていません。
+ クロスリージョン自動バックアップが有効になっているインスタンスへのストレージボリュームの追加はサポートされていません。
+ ストレージの自動スケーリング用の追加ストレージボリュームの設定はサポートされていません。
+ 作成後のボリューム間のファイルの移動はサポートされていません。
+ `D:` ボリュームを削除することはできませんが、空である限り、他のストレージボリュームを削除することはできます。
+ スナップショット復元またはポイントインタイムリカバリ (PITR) 中の既存のボリュームのサイズの変更はサポートされていません。ただし、復元オペレーション中に新しいストレージボリュームを追加できます。

## RDS for SQL Server を使用してストレージボリュームを追加、削除、または変更する
<a name="SQLServer.ASV.Management"></a>

AWS CLI または AWS マネジメントコンソールを使用して、追加のストレージボリュームを追加、変更、削除できます。すべてのオペレーションは、`additional-storage-volumes` パラメータで `modify-db-instance` API オペレーションを使用します。

**重要**  
ストレージボリュームを追加または削除すると、バックアップ保留中のアクションとポイントインタイムリストアブラックアウトウィンドウが作成されます。このウィンドウは、バックアップワークフローが完了すると閉じます。

**Topics**
+ [

### ストレージボリュームの追加
](#SQLServer.ASV.Adding)
+ [

### 追加ストレージボリュームのスケーリング
](#SQLServer.ASV.Scaling)
+ [

### 追加ストレージボリュームの削除
](#SQLServer.ASV.Removing)

### ストレージボリュームの追加
<a name="SQLServer.ASV.Adding"></a>

デフォルトの `D:` ドライブ以外に最大 3 つのストレージボリュームを追加できます。RDS for SQL Server インスタンスに新しいストレージボリュームを追加するには、`additional-storage-volumes` パラメータを指定して `modify-db-instance` コマンドを使用します。

次の例では、`rdsdbdata4` という名前の新しい 4,000 GiB 汎用 SSD (gp3) ボリュームを追加します。

```
aws rds modify-db-instance \
  --db-instance-identifier my-sql-server-instance \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","StorageType":"gp3","AllocatedStorage":4000}]' \
  --apply-immediately
```

### 追加ストレージボリュームのスケーリング
<a name="SQLServer.ASV.Scaling"></a>

ストレージサイズを除き、追加ボリュームの任意のストレージ設定を変更できます。次の例では、`rdsdbdata2` ボリュームの IOPS 設定を変更します。

```
aws rds modify-db-instance \
  --db-instance-identifier my-sql-server-instance \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata2","IOPS":4000}]' \
  --apply-immediately
```

### 追加ストレージボリュームの削除
<a name="SQLServer.ASV.Removing"></a>

`D:` ボリュームは削除できませんが、空になった他のストレージボリュームは削除できます。

**警告**  
追加のストレージボリュームを削除する前に、データベースファイルがボリュームに保存されていないことを確認してください。

次の例では、`rdsdbdata4` ボリュームを削除しています。

```
aws rds modify-db-instance \
  --db-instance-identifier my-sql-server-instance \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","SetForDelete":true}]' \
  --apply-immediately
```

## RDS for SQL Server を使用した追加のストレージボリュームの復元オペレーション
<a name="SQLServer.ASV.Restore"></a>

データベースを復元するときに、ストレージボリュームを追加できます。既存のボリュームのストレージ設定を変更することもできます。

**Topics**
+ [

### スナップショット復元
](#SQLServer.ASV.SnapshotRestore)
+ [

### ポイントインタイムリカバリ
](#SQLServer.ASV.PITR)
+ [

### ネイティブデータベースの復元
](#SQLServer.ASV.NativeRestore)

### スナップショット復元
<a name="SQLServer.ASV.SnapshotRestore"></a>

スナップショットから復元する場合、新しいストレージボリュームを追加したり、既存のボリュームの IOPS、スループット、ストレージタイプの設定を変更したりできます。

次の例では、スナップショットから DB インスタンスを復元し、`rdsdbdata2` ボリュームの IOPS 設定を変更します。

```
aws rds restore-db-instance-from-db-snapshot \
  --db-instance-identifier my-restored-instance \
  --db-snapshot-identifier my-snapshot \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata2","IOPS":5000}]'
```

### ポイントインタイムリカバリ
<a name="SQLServer.ASV.PITR"></a>

ポイントインタイムリカバリ (PITR) 中に、カスタム設定で新しいストレージボリュームを追加できます。

次の例では、PITR を実行し、新しい 5,000 GiB の汎用 SSD (gp3) ボリュームを追加します。

```
aws rds restore-db-instance-to-point-in-time \
  --source-db-instance-identifier my-source-instance \
  --target-db-instance my-pitr-instance \
  --use-latest-restorable-time \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","StorageType":"gp3","AllocatedStorage":5000,"IOPS":5000,"StorageThroughput":200}]'
```

### ネイティブデータベースの復元
<a name="SQLServer.ASV.NativeRestore"></a>

`rds_restore_database` ストアドプロシージャを使用して、特定の追加のストレージボリュームにデータベースを復元できます。2 つの新しいパラメータがボリューム選択をサポートします。

**`data_file_volume`**  
データベースデータファイルのドライブ文字を指定します。

**`log_file_volume`**  
データベースログファイルのドライブ文字を指定します。

次の例では、`H:` ドライブ上のデータファイルと `I:` ドライブ上のログファイルを含むデータベースを復元します。

```
EXEC msdb.dbo.rds_restore_database    
    @restore_db_name='my_database',
    @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/backup-file.bak',
    @data_file_volume='H:',
    @log_file_volume='I:';
```

ボリュームパラメータを指定しない場合、または両方のパラメータに `D:` ドライブを指定した場合、データベースファイルはデフォルトの `D:` ドライブに復元されます。

```
EXEC msdb.dbo.rds_restore_database    
    @restore_db_name='my_database',
    @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/backup-file.bak';
```

## RDS for SQL Server を使用した追加のストレージボリュームのユースケース
<a name="SQLServer.ASV.UseCases"></a>

追加のストレージボリュームは、さまざまなデータベース管理シナリオをサポートします。以下のセクションでは、一般的なユースケースと実装アプローチについて説明します。

**Topics**
+ [

### 追加のストレージボリュームでのデータベースの作成
](#SQLServer.ASV.NewDatabase)
+ [

### ストレージ容量の拡張
](#SQLServer.ASV.ExtendStorage)
+ [

### ボリューム間のデータベースの移動
](#SQLServer.ASV.MoveDatabase)
+ [

### コスト効率の高いストレージへのデータのアーカイブ
](#SQLServer.ASV.ArchiveData)

### 追加のストレージボリュームでのデータベースの作成
<a name="SQLServer.ASV.NewDatabase"></a>

標準の SQL Server `CREATE DATABASE` ステートメントを使用して、追加のストレージボリュームで新しいデータベースを直接作成できます。

次の例では、`H:` ドライブにデータファイル、`I:` ドライブにログファイルを含むデータベースを作成します。

```
CREATE DATABASE MyDatabase
ON (
    NAME = 'MyDatabase_Data',
    FILENAME = 'H:\rdsdbdata\data\MyDatabase_Data.mdf',
    SIZE = 100MB,
    FILEGROWTH = 10MB
)
LOG ON (
    NAME = 'MyDatabase_Log',
    FILENAME = 'I:\rdsdbdata\data\MyDatabase_Log.ldf',
    SIZE = 10MB,
    FILEGROWTH = 10%
);
```

### ストレージ容量の拡張
<a name="SQLServer.ASV.ExtendStorage"></a>

デフォルトの `D:` ドライブが最大容量に達したら、ストレージボリュームを追加し、既存のボリュームをスケールして、新しいボリュームに新しいデータファイルまたはログファイルを作成できます。

**ストレージ容量を拡張するには**

1. `modify-db-instance` コマンドを使用して、インスタンスにストレージボリュームを追加します。

1. 追加のストレージボリュームに新しいデータファイルを追加します。

   ```
   ALTER DATABASE MyDatabase
   ADD FILE (
       NAME = 'MyDatabase_Data2',
       FILENAME = 'H:\rdsdbdata\data\MyDatabase_Data2.ndf',
       SIZE = 500MB,
       FILEGROWTH = 50MB
   );
   ```

### ボリューム間のデータベースの移動
<a name="SQLServer.ASV.MoveDatabase"></a>

データベースを別のボリュームに移動するには、`rds_backup_database` および `rds_restore_database` ストアドプロシージャでバックアップと復元の方法を使用します。詳細については、「[ネイティブバックアップおよび復元の使用](SQLServer.Procedural.Importing.Native.Using.md)」を参照してください。

**データベースを別のボリュームに移動するには**

1. `rds_backup_database` を使用してデータベースをバックアップします。

   ```
   EXEC msdb.dbo.rds_backup_database 
       @source_db_name='MyDatabase',
       @s3_arn_to_backup_to='arn:aws:s3:::my-bucket/database-backup.bak';
   ```

1. データベースをターゲットボリュームに復元します。

   ```
   EXEC msdb.dbo.rds_restore_database    
       @restore_db_name='MyDatabase_New',
       @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/database-backup.bak',
       @data_file_volume='H:',
       @log_file_volume='I:';
   ```

1. 古いドライブからデータベースを削除して、スペースを解放します。詳細については、「[Amazon RDS for Microsoft SQL Server DB インスタンスのデータベースの削除](Appendix.SQLServer.CommonDBATasks.DropMirrorDB.md)」を参照してください。

### コスト効率の高いストレージへのデータのアーカイブ
<a name="SQLServer.ASV.ArchiveData"></a>

パーティション化されたテーブルの場合、古いデータを異なるパフォーマンス特性を持つ追加のストレージボリュームにアーカイブできます。

**パーティション化されたデータをアーカイブするには**

1. 適切なストレージタイプと容量を持つストレージボリュームを追加します。

1. 追加のストレージボリュームに新しいファイルグループを作成します。

   ```
   ALTER DATABASE MyDatabase
   ADD FILEGROUP ArchiveFileGroup;
   
   ALTER DATABASE MyDatabase
   ADD FILE (
       NAME = 'Archive_Data',
       FILENAME = 'H:\rdsdbdata\data\Archive_Data.ndf',
       SIZE = 1GB,
       FILEGROWTH = 100MB
   ) TO FILEGROUP ArchiveFileGroup;
   ```

1. SQL Server パーティション管理コマンドを使用して、パーティションを新しいファイルグループに移動します。