

# Amazon RDS에서 실행되는 Microsoft SQL Server DB 인스턴스의 tempdb 데이터베이스에 액세스
<a name="SQLServer.TempDB"></a>

Amazon RDS에서 실행되는 Microsoft SQL Server DB 인스턴스의 `tempdb` 데이터베이스에 액세스할 수 있습니다. Microsoft SQL Server Management Studio(SSMS)를 통한 Transact-SQL 또는 기타 표준 SQL 클라이언트 애플리케이션을 사용하여 `tempdb`에서 코드를 실행할 수 있습니다. DB 인스턴스 연결에 대한 자세한 내용은 [Microsoft SQL Server DB 인스턴스에 연결](USER_ConnectToMicrosoftSQLServerInstance.md) 단원을 참조하십시오.

DB 인스턴스의 마스터 사용자는 `CONTROL` 데이터베이스 옵션을 수정할 수 있도록 `tempdb`에 대한 `tempdb` 액세스 권한을 부여받습니다. 마스터 사용자는 `tempdb` 데이터베이스의 데이터베이스 소유자가 아닙니다. 필요한 경우 마스터 사용자는 다른 사용자가 `CONTROL` 데이터베이스 옵션을 수정할 수 있도록 이들에게 `tempdb` 액세스 권한을 부여할 수 있습니다.

**참고**  
`tempdb` 데이터베이스에서 Database Console Commands(DBCC)를 실행할 수 없습니다.

# tempdb 데이터베이스 옵션 수정
<a name="SQLServer.TempDB.Modifying"></a>

Amazon RDS DB 인스턴스에 있는 `tempdb` 데이터베이스의 데이터베이스 옵션을 수정할 수 있습니다. 수정할 수 있는 옵션에 대한 자세한 내용은 Microsoft 설명서의 [tempdb 데이터베이스](https://msdn.microsoft.com/en-us/library/ms190768%28v=sql.120%29.aspx)를 참조하십시오.

최대 파일 크기 옵션과 같은 데이터베이스 옵션은 DB 인스턴스를 다시 시작한 후에도 유지됩니다. 데이터를 가져올 때 성능을 최적화하고 스토리지 부족을 방지하도록 데이터베이스 옵션을 수정할 수 있습니다.

## 데이터를 가져올 때 성능 최적화
<a name="SQLServer.TempDB.Modifying.Import"></a>

대량의 데이터를 DB 인스턴스로 가져올 때 성능을 최적화하려면 tempdb 데이터베이스의 `SIZE` 및 `FILEGROWTH` 속성을 큰 수로 설정합니다. `tempdb`를 최적화하는 방법에 대한 자세한 내용은 Microsoft 설명서의 [tempdb 성능 최적화](https://technet.microsoft.com/en-us/library/ms175527%28v=sql.120%29.aspx)를 참조하십시오.

다음은 크기를 100GB로, 파일 증가를 10%로 설정한 예입니다.

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

## 스토리지 문제 방지
<a name="SQLServer.TempDB.Modifying.Full"></a>

`tempdb` 데이터베이스에서 사용 가능한 모든 디스크 공간을 사용하는 것을 방지하려면 `MAXSIZE` 속성을 설정합니다. 다음은 속성을 2048MB로 설정한 예입니다.

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

# tempdb 데이터베이스 축소
<a name="SQLServer.TempDB.Shrinking"></a>

Amazon RDS DB 인스턴스의 `tempdb` 데이터베이스는 두 가지 방법으로 축소할 수 있습니다. `rds_shrink_tempdbfile` 프로시저를 사용하거나, `SIZE` 속성을 설정하면 됩니다.

## rds\$1shrink\$1tempdbfile 프로시저 사용
<a name="SQLServer.TempDB.Shrinking.Proc"></a>

Amazon RDS 프로시저 `msdb.dbo.rds_shrink_tempdbfile`를 사용하여 `tempdb` 데이터베이스를 축소할 수 있습니다. `rds_shrink_tempdbfile`에 대한 `CONTROL` 액세스 권한이 있는 경우에만 `tempdb`을 호출할 수 있습니다. `rds_shrink_tempdbfile`을 호출해도 DB 인스턴스에 가동 중지가 발생하지 않습니다.

`rds_shrink_tempdbfile` 프로시저에는 다음과 같은 파라미터가 있습니다.


****  

| 파라미터 이름 | 데이터 형식 | 기본값 | 필수 | 설명 | 
| --- | --- | --- | --- | --- | 
| `@temp_filename` | SYSNAME | — | 필수 | 축소할 파일의 논리적 이름입니다. | 
| `@target_size` | int | null | 선택 사항 | 파일의 새로운 크기(MB)입니다. | 

다음 예제에서는 `tempdb` 데이터베이스의 파일 이름을 가져옵니다.

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

다음 예제에서는 `tempdb`이라는 `test_file` 데이터베이스 파일을 축소하고 새로운 `10`MB 크기를 요청합니다.

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

## SIZE 속성 설정
<a name="SQLServer.TempDB.Shrinking.Size"></a>

`tempdb` 속성을 설정한 다음 DB 인스턴스를 다시 시작하여 `SIZE` 데이터베이스를 축소할 수도 있습니다. DB 인스턴스를 다시 시작하는 방법에 대한 자세한 내용은 [ DB 인스턴스 재부팅](USER_RebootInstance.md) 단원을 참조하십시오.

다음은 `SIZE` 속성을 1024MB로 설정한 예입니다.

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

# 다중 AZ 배포에 대한 TempDB 구성
<a name="SQLServer.TempDB.MAZ"></a>

RDS for SQL Server DB 인스턴스가 데이터베이스 미러링(DBM) 또는 상시 작동 가용성 그룹(AG)을 사용하는 다중 AZ 배포에 있는 경우, `tempdb` 데이터베이스 사용에 대한 다음 고려 사항을 유념하세요. 

기본 DB 인스턴스에서 보조 DB 인스턴스로 `tempdb` 데이터를 복제할 수 없습니다. 보조 DB 인스턴스로 장애 조치하면 보조 DB 인스턴스에 있는 `tempdb`는 비어 있게 됩니다. 

파일 크기 조정 및 자동 증가 설정을 비롯한 `tempdb` 데이터베이스 옵션의 구성을 기본 DB 인스턴스에서 보조 DB 인스턴스로 동기화할 수 있습니다. `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();
```

예를 들어, 01:00에 `tempdb` 구성을 수정한 다음 `rds_fn_server_object_last_sync_time` 함수를 실행하는 경우 에서 반환되는 값은 01:00 `last_sync_time` 이후여야 하며, 이는 자동 동기화가 발생했음을 나타냅니다.

SQL Server 에이전트 작업 복제를 함께 사용하는 경우 `@object_type` 파라미터에 SQL 에이전트 작업과 `tempdb` 구성을 제공하여 둘 모두에 대해 복제를 활성화할 수 있습니다.

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

SQL Server 에이전트 작업 복제에 대한 자세한 내용은 [SQL Server 에이전트 작업 복제 켜기](Appendix.SQLServer.CommonDBATasks.Agent.md#SQLServerAgent.Replicate) 섹션을 참조하세요.

`tempdb` 구성 변경 내용이 자동으로 동기화되도록 `rds_set_system_database_sync_objects` 저장 프로시저를 사용하는 대신 다음과 같은 수동 방법 중 하나를 사용할 수 있습니다.

**참고**  
`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) 단원을 참조하십시오.