

# Trabalhar com armazenamento no RDS para SQL Server
<a name="Appendix.SQLServer.CommonDBATasks.DatabaseStorage"></a>

Com o RDS para SQL Server, você pode anexar até três volumes adicionais à sua instância do RDS para SQL Server, cada um associado a uma letra de unidade exclusiva do Windows. Isso permite que você distribua arquivos de banco de dados em vários volumes além da unidade `D:` padrão. Ao adicionar um volume de armazenamento, você ganha maior flexibilidade para gerenciamento de arquivos de banco de dados e otimização do armazenamento.

Os benefícios são:
+ **Distribuição flexível de arquivos**: distribua arquivos de dados do banco de dados e arquivos de log em vários volumes para melhorar a performance de E/S.
+ **Otimização do armazenamento**: use diferentes tipos e configurações de armazenamento para diferentes requisitos de workload.
+ **Escalabilidade**: adicione capacidade de armazenamento sem modificar os volumes existentes.

**Topics**
+ [

## Considerações sobre o uso de volumes de armazenamento adicionais com o RDS para SQL Server
](#SQLServer.ASV.Considerations)
+ [

## Adicionar, remover ou modificar volumes de armazenamento com o RDS para SQL Server
](#SQLServer.ASV.Management)
+ [

## Operações de restauração para volumes de armazenamento adicionais com o RDS para SQL Server
](#SQLServer.ASV.Restore)
+ [

## Casos de uso para volumes de armazenamento adicionais com o RDS para SQL Server
](#SQLServer.ASV.UseCases)

## Considerações sobre o uso de volumes de armazenamento adicionais com o RDS para SQL Server
<a name="SQLServer.ASV.Considerations"></a>

Observe os seguintes recursos e limitações ao usar volumes de armazenamento adicionais com o RDS para SQL Server:
+ É possível incluir volumes de armazenamento somente no SQL Server Standard Edition (SE), Enterprise Edition (EE) e Developer Edition (DEV-EE).
+ É possível adicionar até três volumes de armazenamento adicionais por instância.
+ Os nomes dos volumes são associados automaticamente às letras das unidades do Windows da seguinte forma:
  + `rdsdbdata2`: unidade `H:`.
  + `rdsdbdata3`: unidade `I:`.
  + `rdsdbdata4`: unidade `J:`.
+ Os arquivos TempDB continuam usando a unidade `T:` ao usar o armazenamento de instância NVMe. Os arquivos de auditoria do SQL Server e os arquivos do Microsoft Business Intelligence (MSBI) permanecem na unidade `D:`.
+ Você só pode usar os tipos de armazenamento SSD de uso geral (gp3) e o armazenamento em SSD de IOPS provisionadas.
+ O tamanho mínimo de armazenamento dos volumes de armazenamento adicionais é igual ao limite definido para a unidade `D:` padrão. O tamanho máximo de armazenamento para sua instância de banco de dados é de 256 TiB no total em todos os volumes.
+ A adição de volumes de armazenamento a instâncias com réplicas de leitura ou a instâncias de réplica de leitura não é aceita.
+ A inclusão de volumes de armazenamento nas instâncias habilitadas para backup automatizado entre regiões não é aceita.
+ Não é possível configurar volumes de armazenamento para ajuste de escala automático do armazenamento.
+ A movimentação de arquivos entre volumes após a criação não é aceita.
+ Você não pode excluir o volume `D:`, mas pode excluir outros volumes de armazenamento, desde que estejam vazios.
+ A modificação do tamanho dos volumes existentes durante a restauração de snapshots ou recuperação para um ponto no tempo (PITR) não é aceita. No entanto, você pode adicionar novos volumes de armazenamento durante as operações de restauração.

## Adicionar, remover ou modificar volumes de armazenamento com o RDS para SQL Server
<a name="SQLServer.ASV.Management"></a>

Você pode adicionar, modificar e remover volumes de armazenamento adicionais usando a AWS CLI ou o Console de gerenciamento da AWS. Todas as operações usam a operação de API `modify-db-instance` com o parâmetro `additional-storage-volumes`.

**Importante**  
Adicionar ou remover volumes de armazenamento adicionais cria uma ação pendente de backup e uma janela de bloqueio de restauração pontual. Essa janela é fechada quando o fluxo de trabalho de backup é concluído.

**Topics**
+ [

### Adicionar volumes de armazenamento
](#SQLServer.ASV.Adding)
+ [

### Escalar volumes de armazenamento adicionais
](#SQLServer.ASV.Scaling)
+ [

### Remover volumes de armazenamento adicionais
](#SQLServer.ASV.Removing)

### Adicionar volumes de armazenamento
<a name="SQLServer.ASV.Adding"></a>

É possível adicionar até três volumes de armazenamento além da unidade `D:` padrão. Para adicionar um novo volume de armazenamento à sua instância do RDS para SQL Server, use o comando `modify-db-instance` com o parâmetro `additional-storage-volumes`.

O exemplo a seguir adiciona um novo volume de SSD de uso geral de 4 mil GiB (gp3) chamado `rdsdbdata4`.

```
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
```

### Escalar volumes de armazenamento adicionais
<a name="SQLServer.ASV.Scaling"></a>

Você pode modificar qualquer configuração de armazenamento para seus volumes adicionais, exceto o tamanho do armazenamento. O exemplo a seguir modifica a configuração de IOPS do volume `rdsdbdata2`.

```
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
```

### Remover volumes de armazenamento adicionais
<a name="SQLServer.ASV.Removing"></a>

Você não pode excluir o volume `D:`, mas pode excluir outros volumes de armazenamento quando estão vazios.

**Atenção**  
Antes de remover um volume de armazenamento adicional, garanta que nenhum arquivo de banco de dados esteja armazenado no volume.

O exemplo a seguir remove o volume `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
```

## Operações de restauração para volumes de armazenamento adicionais com o RDS para SQL Server
<a name="SQLServer.ASV.Restore"></a>

Quando você restaura seu banco de dados, pode adicionar volumes de armazenamento. Também é possível modificar as configurações de armazenamento dos volumes existentes.

**Topics**
+ [

### Restauração por snapshot
](#SQLServer.ASV.SnapshotRestore)
+ [

### Recuperação para um ponto no tempo
](#SQLServer.ASV.PITR)
+ [

### Restauração de banco de dados nativo
](#SQLServer.ASV.NativeRestore)

### Restauração por snapshot
<a name="SQLServer.ASV.SnapshotRestore"></a>

Quando você restaura por meio de um snapshot, pode adicionar outros volumes de armazenamento ou modificar as configurações de IOPS, throughput e tipo de armazenamento dos volumes existentes.

O seguinte exemplo restaura uma instância de banco de dados por meio de um snapshot e modifica a configuração de IOPS para o volume `rdsdbdata2`:

```
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}]'
```

### Recuperação para um ponto no tempo
<a name="SQLServer.ASV.PITR"></a>

Durante a recuperação para um ponto no tempo (PITR), é possível adicionar novos volumes de armazenamento com configurações personalizadas.

O seguinte exemplo realiza PITR e adiciona um novo volume de SSD de uso geral de 5 mil GiB (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}]'
```

### Restauração de banco de dados nativo
<a name="SQLServer.ASV.NativeRestore"></a>

Você pode usar o procedimento armazenado `rds_restore_database` para restaurar bancos de dados em volumes de armazenamento adicionais específicos. Dois novos parâmetros aceitam a seleção de volume:

**`data_file_volume`**  
Especifica a letra da unidade para arquivos de dados do banco de dados.

**`log_file_volume`**  
Especifica a letra da unidade para arquivos de log do banco de dados.

O exemplo a seguir restaura um banco de dados com arquivos de dados na unidade `H:` e arquivos de log na unidade `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:';
```

Se você não especificar parâmetros de volume nem especificar a unidade `D:` para ambos os parâmetros, os arquivos do banco de dados serão restaurados para a unidade `D:` padrão:

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

## Casos de uso para volumes de armazenamento adicionais com o RDS para SQL Server
<a name="SQLServer.ASV.UseCases"></a>

Volumes de armazenamento adicionais comportam vários cenários de gerenciamento de banco de dados. As seções a seguir descrevem casos de uso comuns e abordagens de implementação.

**Topics**
+ [

### Criar bancos de dados em volumes de armazenamento adicionais
](#SQLServer.ASV.NewDatabase)
+ [

### Ampliar a capacidade de armazenamento
](#SQLServer.ASV.ExtendStorage)
+ [

### Mover bancos de dados entre volumes
](#SQLServer.ASV.MoveDatabase)
+ [

### Arquivar dados em um armazenamento econômico
](#SQLServer.ASV.ArchiveData)

### Criar bancos de dados em volumes de armazenamento adicionais
<a name="SQLServer.ASV.NewDatabase"></a>

É possível criar bancos de dados diretamente em volumes de armazenamento adicionais utilizando instruções `CREATE DATABASE` padrão do SQL Server.

O seguinte exemplo cria um banco de dados com arquivos de dados na unidade `H:` e arquivos de log na unidade `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%
);
```

### Ampliar a capacidade de armazenamento
<a name="SQLServer.ASV.ExtendStorage"></a>

Quando a unidade `D:` padrão atinge sua capacidade máxima, você pode adicionar outros volumes de armazenamento, escalar volumes existentes e criar arquivos de dados ou arquivos de log nos novos volumes.

**Como ampliar a capacidade de armazenamento**

1. Adicione um volume de armazenamento à sua instância usando o comando `modify-db-instance`.

1. Adicione um novo arquivo de dados ao volume de armazenamento adicional:

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

### Mover bancos de dados entre volumes
<a name="SQLServer.ASV.MoveDatabase"></a>

Para mover um banco de dados para um volume diferente, use a abordagem de backup e restauração com os procedimentos armazenados `rds_backup_database` e `rds_restore_database`. Para obter mais informações, consulte [Usar o backup e restauração nativos](SQLServer.Procedural.Importing.Native.Using.md).

**Como mover um banco de dados para outro volume**

1. Faça backup do bancos de dados usando `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. Restaure o banco de dados no volume de destino:

   ```
   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. Remova o banco de dados da sua unidade antiga para liberar espaço. Para obter mais informações, consulte [Eliminar um banco de dados em uma instância de banco de dados do Amazon RDS para Microsoft SQL Server](Appendix.SQLServer.CommonDBATasks.DropMirrorDB.md).

### Arquivar dados em um armazenamento econômico
<a name="SQLServer.ASV.ArchiveData"></a>

Para tabelas particionadas, você pode arquivar dados antigos em volumes de armazenamento adicionais com características de performance diferentes.

**Como arquivar dados particionados**

1. Adicione um volume de armazenamento com o tipo e a capacidade de armazenamento adequados.

1. Crie um grupo de arquivos no volume de armazenamento adicional:

   ```
   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. Mova as partições para o novo grupo de arquivos usando os comandos de gerenciamento de partições do SQL Server.