

# Acessar o banco de dados tempdb em instâncias de banco de dados Microsoft SQL Server no Amazon RDS
<a name="SQLServer.TempDB"></a>

Você pode acessar o banco de dados `tempdb` nas instâncias de bancos de dados Microsoft SQL Server no Amazon RDS. É possível executar o código em `tempdb` usando Transact-SQL pelo Microsoft SQL Server Management Studio (SSMS) ou de qualquer outro aplicativo cliente SQL padrão. Para obter mais informações sobre como se conectar à sua instância de banco de dados, consulte [Conectar-se à instância de banco de dados do Microsoft SQL Server](USER_ConnectToMicrosoftSQLServerInstance.md). 

O usuário mestre para a instância de banco de dados tem acesso `CONTROL` a `tempdb` para que esse usuário possa modificar as opções do banco de dados `tempdb`. O usuário mestre não é o proprietário do banco de dados `tempdb`. Se necessário, o usuário mestre poderá conceder acesso a `CONTROL` a outros usuários, para que eles também possam modificar as opções do banco de dados `tempdb`. 

**nota**  
Não é possível executar Database Console Commands (DBCC) no banco de dados `tempdb`. 

# Modificar opções do banco de dados tempdb
<a name="SQLServer.TempDB.Modifying"></a>

Você pode modificar as opções no banco de dados `tempdb` nas instâncias de bancos de dados do Amazon RDS. Para obter mais informações sobre quais opções podem ser modificadas, consulte [Banco de dados tempdb](https://msdn.microsoft.com/en-us/library/ms190768%28v=sql.120%29.aspx) na documentação da Microsoft.

As opções do banco de dados, como as opções de tamanho máximo do arquivo, são persistentes depois que você reinicia sua instância de banco de dados. Você pode modificar as opções do banco de dados para otimizar a performance ao importar dados e para não ficar sem espaço de armazenamento.

## Otimizar a performance ao importar dados
<a name="SQLServer.TempDB.Modifying.Import"></a>

Para otimizar a performance ao importar grandes quantidades de dados na sua instância de banco de dados, defina as propriedades `SIZE` e `FILEGROWTH` do banco de dados tempdb para grandes quantidades. Para obter mais informações sobre como otimizar `tempdb`, consulte [Otimizando a performance do tempdb](https://technet.microsoft.com/en-us/library/ms175527%28v=sql.120%29.aspx) na documentação da Microsoft.

O exemplo a seguir demonstra a configuração do tamanho para 100 GB e o crescimento de arquivos para 10%. 

```
1. alter database[tempdb] modify file (NAME = N'templog', SIZE=100GB, FILEGROWTH = 10%)
```

## Prevenir problemas de armazenamento
<a name="SQLServer.TempDB.Modifying.Full"></a>

Para evitar que o banco de dados `tempdb` use todo o espaço em disco disponível, defina a propriedade `MAXSIZE`. O exemplo a seguir demonstra a configuração da propriedade para 2048 MB. 

```
1. alter database [tempdb] modify file (NAME = N'templog', MAXSIZE = 2048MB)
```

# Recolher o banco de dados tempdb
<a name="SQLServer.TempDB.Shrinking"></a>

Existem duas maneiras de reduzir o banco de dados `tempdb` na instância de banco de dados do Amazon RDS. Você pode usar o procedimento `rds_shrink_tempdbfile` ou pode definir a propriedade `SIZE`, 

## Usar o procedimento rds\$1shrink\$1tempdbfile
<a name="SQLServer.TempDB.Shrinking.Proc"></a>

Você pode usar o procedimento `msdb.dbo.rds_shrink_tempdbfile` do Amazon RDS para reduzir o banco de dados `tempdb`. Só será possível chamar `rds_shrink_tempdbfile` se você tiver acesso `CONTROL` a `tempdb`. Quando você chama `rds_shrink_tempdbfile`, não há tempo de inatividade para sua instância de banco de dados. 

O procedimento `rds_shrink_tempdbfile` tem os seguintes parâmetros.


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
| `@temp_filename` | SYSNAME | — | obrigatório | O nome lógico do arquivo para encolher. | 
| `@target_size` | int | nulo | opcional | O novo tamanho para o arquivo, em megabytes. | 

O exemplo a seguir obtém os nomes dos arquivos para o banco de dados `tempdb`.

```
1. use tempdb;
2. GO
3. 
4. select name, * from sys.sysfiles;
5. GO
```

O exemplo a seguir reduz um arquivo do banco de dados `tempdb` chamado `test_file` e solicita um novo tamanho de `10` megabytes: 

```
1. exec msdb.dbo.rds_shrink_tempdbfile @temp_filename = N'test_file', @target_size = 10;
```

## Definir a propriedade SIZE
<a name="SQLServer.TempDB.Shrinking.Size"></a>

Você também pode reduzir o banco de dados `tempdb` definindo a propriedade `SIZE` e reiniciando a instância de banco de dados. Para obter mais informações sobre como reiniciar sua instância de banco de dados, consulte [Reinicializar uma instância de banco de dados](USER_RebootInstance.md).

O exemplo a seguir demonstra a configuração da propriedade `SIZE` para 1024 MB. 

```
1. alter database [tempdb] modify file (NAME = N'templog', SIZE = 1024MB)
```

# Configuração TempDB para implantações multi-AZ
<a name="SQLServer.TempDB.MAZ"></a>

Se a instância de banco de dados do RDS para o SQL Server estiver em uma implantação multi-AZ usando o Database Mirroring (DBM) ou grupos de disponibilidade (AGs) Always On, lembre-se das considerações a seguir para o uso do banco de dados `tempdb`.

Não é possível replicar dados do `tempdb` da instância de banco de dados primária para a instância de banco de dados secundária. Ao fazer failover para uma instância de banco de dados secundária, o `tempdb` nessa instância de banco de dados secundária estará vazia.

É possível sincronizar a configuração das opções do banco de dados `tempdb`, incluindo o tamanho do arquivo e as configurações de crescimento automático, da instância de banco de dados primária para a instância de banco de dados secundária. A sincronização da configuração `tempDB` é aceita em todas as versões do RDS para SQL Server. É possível ativar a sincronização automática da configuração `tempdb` usando o seguinte procedimento armazenado:

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

**Importante**  
Antes de usar o procedimento armazenado `rds_set_system_database_sync_objects`, defina a configuração `tempdb` preferencial na instância de banco de dados primária, e não na instância de banco de dados secundária. Se você tiver feito a alteração na instância de banco de dados secundária, a configuração `tempdb` preferencial poderá ser excluída ao ativar a sincronização automática.

É possível usar a seguinte função para confirmar se a sincronização automática da configuração `tempdb` está ativada:

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

Quando a sincronização automática da configuração `tempdb` estiver ativada, haverá um valor exibido para o campo `object_class`. Quando está desativada, nenhum valor é exibido.

É possível usar a seguinte função para descobrir a última vez que os objetos foram sincronizados no horário UTC:

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

Por exemplo, se você modificou a configuração `tempdb` às 01:00 e depois executou a função `rds_fn_server_object_last_sync_time`, o valor exibido para `last_sync_time` deve ser posterior à 01:00, indicando que ocorreu uma sincronização automática.

Se você também estiver usando a replicação do SQL Server Agent, poderá habilitar a replicação tanto para os trabalhos do SQL Agent quanto para a configuração `tempdb` fornecendo-os no parâmetro `@object_type`:

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

Para ter mais informações sobre a replicação de trabalhos do SQL Server Agent, consulte [Ativar a replicação de trabalhos do SQL Server Agent](Appendix.SQLServer.CommonDBATasks.Agent.md#SQLServerAgent.Replicate).

Como alternativa ao uso do procedimento armazenado `rds_set_system_database_sync_objects` para garantir que as alterações da configuração `tempdb` sejam sincronizadas automaticamente, é possível usar um dos seguintes métodos manuais:

**nota**  
Recomendamos ativar a sincronização automática da configuração `tempdb` usando o procedimento armazenado `rds_set_system_database_sync_objects`: O uso da sincronização automática evita a necessidade de realizar essas tarefas manuais sempre que você altera a configuração `tempdb`.
+ Primeiro modifique sua instância de banco de dados e desative o Multi-AZ e depois modifique tempdb e finalmente volte a ativar o Multi-AZ. Esse método não envolve qualquer tempo de inatividade.

  Para obter mais informações, consulte [Modificar uma instância de banco de dados do Amazon RDS](Overview.DBInstance.Modifying.md). 
+ Modifique `tempdb` na instância primária original, faça failover manualmente e, por fim, modifique `tempdb` na nova instância primária. Esse método envolve tempo de inatividade. 

  Para ter mais informações, consulte [Reinicializar uma instância de banco de dados](USER_RebootInstance.md).