

# Acceso a la base de datos tempdb de las instancias de bases de datos de Microsoft SQL Server en Amazon RDS
<a name="SQLServer.TempDB"></a>

Es posible acceder a la base de datos `tempdb` de las instancias de bases de datos de Microsoft SQL Server en Amazon RDS. También es posible ejecutar código en `tempdb` mediante Transact-SQL a través de Microsoft SQL Server Management Studio (SSMS) o cualquier otra aplicación cliente estándar de SQL. Para obtener más información acerca de cómo conectarse a la instancia de base de datos, consulte [Conexión a la instancia de base de datos de Microsoft SQL Server](USER_ConnectToMicrosoftSQLServerInstance.md). 

Al usuario principal de la instancia de base de datos se le concede el acceso `CONTROL` a `tempdb` para que pueda modificar las opciones de la base de datos `tempdb`. El usuario principal no es el propietario de la base de datos `tempdb`. Si es necesario, el usuario principal puede conceder el acceso `CONTROL` a otros usuarios para que también puedan modificar las opciones de la base de datos `tempdb`. 

**nota**  
No es posible ejecutar comandos de consola de base de datos (DBCC) en la base de datos `tempdb`. 

# Modificación de las opciones de la base de datos tempdb
<a name="SQLServer.TempDB.Modifying"></a>

Es posible modificar las opciones de la base de datos `tempdb` de las instancias de bases de datos de Amazon RDS. Para obtener más información acerca de las opciones que se pueden modificar, consulte [Base de datos tempdb](https://msdn.microsoft.com/en-us/library/ms190768%28v=sql.120%29.aspx) en la documentación de Microsoft.

Las opciones de base de datos como las opciones de tamaño máximo de archivo son persistentes después de reiniciar la instancia de base de datos. Es posible modificar las opciones de base de datos para optimizar el desempeño al importar datos y para evitar que se quede sin almacenamiento.

## Optimización del rendimiento al importar datos
<a name="SQLServer.TempDB.Modifying.Import"></a>

Para optimizar el desempeño al importar grandes cantidades de datos en la instancia de base de datos, asigne valores grandes a las propiedades `SIZE` y `FILEGROWTH` de la base de datos tempdb. Para obtener más información acerca de cómo optimizar `tempdb`, consulte [Optimizar el rendimiento de tempdb](https://technet.microsoft.com/en-us/library/ms175527%28v=sql.120%29.aspx) en la documentación de Microsoft.

En el siguiente ejemplo se muestra cómo configurar un tamaño de 100 GB y un crecimiento de archivo del 10 por ciento. 

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

## Cómo evitar problemas de almacenamiento
<a name="SQLServer.TempDB.Modifying.Full"></a>

Para evitar que la base de datos `tempdb` utilice todo el espacio en disco disponible, establezca la propiedad `MAXSIZE`. En el siguiente ejemplo se muestra cómo establecer la propiedad en 2048 MB. 

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

# Reducción del tamaño de la base de datos tempdb
<a name="SQLServer.TempDB.Shrinking"></a>

Hay dos maneras de reducir el tamaño de la base de datos `tempdb` de una instancia de base de datos de Amazon RDS. Es posible utilizar el procedimiento `rds_shrink_tempdbfile` o bien establecer la propiedad `SIZE`. 

## Uso del procedimiento rds\$1shrink\$1tempdbfile
<a name="SQLServer.TempDB.Shrinking.Proc"></a>

Puede utilizar el procedimiento `msdb.dbo.rds_shrink_tempdbfile` de Amazon RDS para reducir el tamaño de la base de datos `tempdb`. Solo se puede llamar a `rds_shrink_tempdbfile` si se tiene el acceso `CONTROL` a `tempdb`. Cuando se llama a `rds_shrink_tempdbfile`, no se produce tiempo de inactividad en la instancia de base de datos. 

El procedimiento `rds_shrink_tempdbfile` tiene los siguientes parámetros.


****  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
| `@temp_filename` | SYSNAME | — | obligatorio | El nombre lógico del archivo cuyo tamaño se va a reducir. | 
| `@target_size` | int | nulo | opcional | El tamaño nuevo del archivo, en megabytes. | 

En el siguiente ejemplo se obtienen los nombres de los archivos de la base de datos `tempdb`.

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

En el siguiente ejemplo se reduce el tamaño de un archivo de base de datos `tempdb` denominado `test_file` y se solicita un tamaño nuevo de megabytes `10`: 

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

## Configuración de la propiedad SIZE
<a name="SQLServer.TempDB.Shrinking.Size"></a>

También es posible reducir el tamaño de la base de datos `tempdb` estableciendo la propiedad `SIZE` y reiniciando la instancia de base de datos. Para obtener más información acerca de cómo reiniciar una instancia de base de datos, consulte [Reinicio de una instancia de base de datos ](USER_RebootInstance.md).

En el siguiente ejemplo se muestra cómo establecer la propiedad `SIZE` en 1024 MB. 

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

# Configuración de TempDB para implementaciones multi-AZ
<a name="SQLServer.TempDB.MAZ"></a>

Si la instancia de base de datos de RDS para SQL Server está en una implementación multi-AZ mediante creación de reflejos de base de datos (DBM) o grupos de disponibilidad AlwaysOn (AG), tenga en cuenta lo siguiente al utilizar la base de datos `tempdb`.

No puede replicar datos de `tempdb` de la instancia de base de datos principal a la instancia de base de datos secundaria. Si realiza una conmutación por error a una instancia de base de datos secundaria, `tempdb` en esa instancia de base de datos secundaria estará vacía.

Puede sincronizar la configuración de las opciones de la base de datos `tempdb`, incluidos el tamaño de los archivos y la configuración de crecimiento automático, desde la instancia de base de datos principal a la instancia de base de datos secundaria. Todas las versiones de RDS para SQL Server admiten la sincronización de la configuración de `tempDB`. Puede activar la sincronización automática de la configuración de `tempdb` mediante el siguiente procedimiento almacenado:

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

**importante**  
Antes de utilizar el procedimiento almacenado `rds_set_system_database_sync_objects`, asegúrese de haber establecido la configuración preferida de `tempdb` en la instancia de base de datos principal, en lugar de en la instancia de base de datos secundaria. Si realizó el cambio de configuración en su instancia de base de datos secundaria, su configuración preferida de `tempdb` podría eliminarse al activar la sincronización automática.

Puede utilizar la siguiente función para confirmar si la sincronización automática de la configuración de `tempdb` está activada:

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

Cuando se active la sincronización automática de la configuración de `tempdb`, se devolverá un valor para el campo `object_class`. Cuando está desactivada, no se devuelve ningún valor.

Puede utilizar la siguiente función para saber cuál fue la última vez que se sincronizaron los objetos, en hora UTC:

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

Por ejemplo, si modificó la configuración de `tempdb` a la 1:00 y, a continuación, ejecutó la función `rds_fn_server_object_last_sync_time`, el valor devuelto para `last_sync_time` debería ser posterior a la 1:00, lo que indica que se ha producido una sincronización automática.

Si también utiliza la replicación de trabajos del agente de SQL Server, puede habilitar la replicación tanto para los trabajos del agente de SQL como para la configuración de `tempdb`. Para ello, proporciónelos en el parámetro `@object_type`:

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

Para obtener más información acerca de la replicación de trabajos del agente de SQL Server, consulte [Activación de la replicación de trabajos del agente de SQL Server](Appendix.SQLServer.CommonDBATasks.Agent.md#SQLServerAgent.Replicate).

Como alternativa a utilizar el procedimiento almacenado `rds_set_system_database_sync_objects` para garantizar que los cambios de configuración de `tempdb` se sincronicen automáticamente, puede utilizar uno de los siguientes métodos manuales:

**nota**  
Recomendamos activar la sincronización automática de la configuración de `tempdb` mediante el procedimiento almacenado `rds_set_system_database_sync_objects`. El uso de la sincronización automática evita la necesidad de realizar estas tareas manuales cada vez que se cambia la configuración de `tempdb`.
+ En primer lugar, modifique la instancia de base de datos y desactive el despliegue Multi-AZ, a continuación, modifique tempdb y, por último, vuelva a activar el despliegue Multi-AZ. Este método no provoca ningún tiempo de inactividad.

  Para obtener más información, consulte [Modificación de una instancia de base de datos de Amazon RDS](Overview.DBInstance.Modifying.md). 
+ En primer lugar, modifique `tempdb` en la instancia principal original, a continuación, realice una conmutación por error manualmente y, por último, modifique `tempdb` en la nueva instancia principal. Este método provoca un tiempo de inactividad. 

  Para obtener más información, consulte [Reinicio de una instancia de base de datos ](USER_RebootInstance.md).