

# 기본 백업 및 복원 기능을 사용하여 SQL Server 데이터베이스 가져오기 및 내보내기
<a name="SQLServer.Procedural.Importing"></a>

Amazon RDS는 전체 백업 파일(.bak 파일)을 사용하여 Microsoft SQL Server 데이터베이스에 기본 백업 및 복원을 할 수 있도록 지원합니다. RDS를 사용할 때 데이터베이스 서버의 로컬 파일 시스템을 사용하는 대신 Amazon S3에 저장된 파일에 액세스합니다.

예를 들어 로컬 서버에서 전체 백업을 생성하고, 이를 S3에 저장한 후, 기존 Amazon RDS DB 인스턴스에서 복원할 수 있습니다. 또한 RDS에서 백업을 만들고, 이를 S3에 저장한 후, 어디든 원하는 곳에서 복원할 수 있습니다.

읽기 전용 복제본이 있는 다중 AZ DB 인스턴스를 포함하여 모든 AWS 리전에서 단일 AZ 및 다중 AZ DB 인스턴스에 대해 기본 백업 및 복원을 사용할 수 있습니다. Amazon RDS에서 지원되는 Microsoft SQL Server의 모든 버전에 기본 백업 및 복원이 제공됩니다.

다음 다이어그램은 지원되는 시나리오를 보여 줍니다.

![\[기본 백업 및 복원 아키텍처\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/SQL-bak-file.png)


기본 .bak 파일을 사용하여 데이터베이스를 백업 및 복원하는 과정은 대개의 경우 데이터베이스를 가장 빨리 백업하고 복원할 수 있는 방법입니다. 또한 기본 백업 및 복원을 이용하는 것보다 장점이 더 많습니다. 예를 들면,
+ Amazon RDS로/에서 데이터베이스 마이그레이션
+ RDS for SQL Server DB 인스턴스 간에 데이터베이스를 이동합니다.
+ .bak 파일 내부의 데이터, 스키마, 저장 프로시저, 트리거 및 기타 데이터베이스 코드를 마이그레이션합니다.
+ DB 인스턴스 전체가 아닌 데이터베이스 하나를 백업 및 복원합니다.
+ 개발, 테스트, 교육, 데모를 위해 데이터베이스 사본을 만듭니다.
+ 재해 복구를 위한 추가 보호 계층을 위해 Amazon S3를 통해 백업 파일을 저장 및 전송합니다.
+ 투명한 데이터 암호화(TDE)가 설정된 데이터베이스의 기본 백업을 생성하고, 이러한 백업을 온프레미스 데이터베이스에 복원합니다. 자세한 내용은 [SQL Server에서 TDE(투명한 데이터 암호화) 지원](Appendix.SQLServer.Options.TDE.md) 섹션을 참조하세요.
+ TDE가 설정된 온프레미스 데이터베이스의 기본 백업을 RDS for SQL Server DB 인스턴스로 복원합니다. 자세한 내용은 [SQL Server에서 TDE(투명한 데이터 암호화) 지원](Appendix.SQLServer.Options.TDE.md) 섹션을 참조하세요.

**Contents**
+ [제한 및 권장 사항](#SQLServer.Procedural.Importing.Native.Limitations)
+ [기본 백업 및 복원 설정](SQLServer.Procedural.Importing.Native.Enabling.md)
  + [기본 백업 및 복원을 위한 IAM 역할 수동으로 만들기](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)
+ [기본 백업 및 복원 사용](SQLServer.Procedural.Importing.Native.Using.md)
  + [데이터베이스 백업](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Backup)
    + [사용법](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Backup.Syntax)
    + [예제](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Backup.Examples)
  + [데이터베이스 복원](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Restore)
    + [사용법](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Syntax)
    + [예제](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Examples)
  + [로그 복원](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log)
    + [사용법](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log.Syntax)
    + [예제](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log.Examples)
  + [데이터베이스 복원 마무리](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Finish.Restore)
    + [사용법](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Finish.Restore.Syntax)
  + [부분적으로 복원된 데이터베이스 작업](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Partially.Restored)
    + [부분적으로 복원된 데이터베이스 삭제](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Drop.Partially.Restored)
    + [부분적으로 복원된 데이터베이스에 대한 스냅샷 복원 및 특정 시점으로 복구 동작](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Snapshot.Restore)
  + [작업 취소](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Cancel)
    + [사용법](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Cancel.Syntax)
  + [작업 상태 추적](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking)
    + [사용법](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Syntax)
    + [예제](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Examples)
    + [응답](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Response)
+ [백업 파일 압축](SQLServer.Procedural.Importing.Native.Compression.md)
+ [문제 해결](SQLServer.Procedural.Importing.Native.Troubleshooting.md)
+ [다른 방법으로 SQL Server 데이터 가져오기 및 내보내기](SQLServer.Procedural.Importing.Snapshots.md)
  + [스냅샷을 사용하여 RDS for SQL Server로 데이터 가져오기](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Importing.Procedure)
    + [데이터 가져오기](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.Import)
      + [스크립트 생성 및 게시 마법사](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.ScriptWizard)
      + [가져오기 및 내보내기 마법사](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.ImportExportWizard)
      + [대량 복사](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.BulkCopy)
  + [RDS for SQL Server에서 데이터 내보내기](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting)
    + [SQL Server 가져오기 및 내보내기 마법사](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting.SSIEW)
    + [SQL Server 스크립트 생성 및 게시 마법사와 bcp 유틸리티](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting.SSGPSW)
+ [Linux의 BCP 유틸리티를 사용하여 데이터 가져오기 및 내보내기](SQLServer.Procedural.Importing.BCP.Linux.md)
  + [사전 조건](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Prerequisites)
  + [Linux에 SQL Server 명령줄 도구 설치](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Installing)
  + [RDS for SQL Server에서 데이터 내보내기](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting)
    + [기본 내보내기 구문](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting.Basic)
    + [내보내기 예시](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting.Example)
  + [RDS for SQL Server로 데이터 가져오기](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing)
    + [기본 가져오기 구문](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing.Basic)
    + [가져오기 예시](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing.Example)
  + [일반적인 BCP 옵션](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Options)
  + [모범 사례 및 고려 사항](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.BestPractices)
  + [일반적인 문제 해결](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Troubleshooting)

## 제한 및 권장 사항
<a name="SQLServer.Procedural.Importing.Native.Limitations"></a>

다음은 기본 백업 및 복원을 사용할 때 적용되는 몇 가지 제한 사항입니다.
+ Amazon RDS DB 인스턴스와 다른 AWS 리전에서는 Amazon S3 버킷으로 백업하거나 복원할 수 없습니다.
+ 기존 데이터베이스와 이름이 같은 데이터베이스는 복원할 수 없습니다. 데이터베이스 이름은 고유합니다.
+ 한 표준 시간대의 백업 파일을 다른 표준 시간대로 복원하지 않는 것이 좋습니다. 한 표준 시간대의 백업 파일을 다른 표준 시간대로 복원하는 경우 쿼리와 애플리케이션을 감사하여 표준 시간대 변경의 영향을 확인해야 합니다.
+ RDS for Microsoft SQL Server의 파일당 크기 제한은 5TB입니다. 큰 데이터베이스의 기본 백업의 경우 다중 파일 백업을 사용할 수 있습니다.
+ S3에 백업할 수 있는 최대 데이터베이스 크기는 DB 인스턴스에서 사용 가능한 메모리, CPU, I/O 및 네트워크 리소스에 따라 다릅니다. 데이터베이스가 클수록 백업 에이전트에서 더 많은 메모리를 사용합니다.
+ 10개 이상의 백업 파일에서 동시에 백업 또는 복원할 수 없습니다.
+ 차등 백업은 마지막 전체 백업을 기반을 합니다. 차등 백업이 작동할 수 있도록 마지막 전체 백업과 차등 백업 간에는 스냅샷을 만들 수 없습니다. 차등 백업을 만들려고 하는데 수동 또는 자동 스냅샷이 이미 있으면 차등 백업을 진행하기 전에 다른 전체 백업을 만드십시오.
+ file\$1guid(고유 식별자)가 `NULL`로 설정된 파일이 있는 데이터베이스에서는 차등 복원 및 로그 복원이 지원되지 않습니다.
+ 백업 또는 복원 작업은 최대 2개까지 동시에 실행할 수 있습니다.
+ Amazon RDS의 SQL Server에서 기본 로그 백업을 수행할 수 없습니다.
+ RDS는 데이터베이스의 기본 복원을 최대 64TiB까지 지원합니다. SQL Server Express Edition의 데이터베이스 기본 복원은 10GB로 제한됩니다.
+ 유지 관리 기간 또는 Amazon RDS에서 데이터베이스 스냅샷을 만드는 동안에는 기본 백업을 수행할 수 없습니다. 기본 백업 작업이 RDS 일일 백업 기간과 겹치는 경우 기본 백업 작업이 취소됩니다.
+ 다중 AZ DB 인스턴스에서는 전체 복구 모델로 백업된 데이터베이스만 기본적으로 복원할 수 있습니다.
+ 트랜잭션 내에서 기본 백업 및 복원을 위한 RDS 프로시저 호출은 지원되지 않습니다.
+ 대칭 암호화 AWS KMS key을(를) 사용하여 백업을 암호화합니다. Amazon RDS에서는 비대칭 KMS 키가 지원되지 않습니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [대칭 암호화 KMS 키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)을 참조하세요.
+ 기본 백업 파일은 "암호화 전용" 암호 모드를 사용하여 지정된 KMS 키로 암호화됩니다. 암호화된 백업 파일을 복원할 때 파일이 "암호화 전용" 암호 모드로 암호화되었음을 알고 있어야 합니다.
+ FILESTREAM 파일 그룹이 포함된 데이터베이스는 복원할 수 없습니다.
+ AWS KMS(SSE-KMS)를 사용한 Amazon S3 서버 측 암호화는 백업 저장 프로시저로 `@enable_bucket_default_encryption=1`을 전달할 때 S3 버킷의 기본 암호화 구성을 통해 지원됩니다. 기본적으로 복원은 S3 객체의 서버 측 암호화를 지원합니다.

  저장 프로시저에 KMS 키를 제공하면 모든 기본 백업 및 복원은 KMS 키를 사용하여 클라이언트 측에서 암호화 및 암호 해독됩니다. AWS는 `@enable_bucket_default_encryption=0`인 경우 SSE-S3를 사용하여 S3 버킷에 백업을 저장하거나 `@enable_bucket_default_encryption=1`인 경우 S3 버킷의 구성된 기본 암호화 키를 사용하여 백업을 저장합니다.
+ S3 액세스 포인트를 사용하는 경우 RDS 내부 VPC를 사용하도록 액세스 포인트를 구성할 수 없습니다.
+ 최상의 성능을 위해 디렉터리 버킷 또는 디렉터리 버킷에 대한 액세스 포인트를 해당 리전에서 사용할 수 있는 경우 사용하는 것이 좋습니다.

백업 파일을 만들고, 복사하고, 복원하는 동안 데이터베이스를 오프라인 상태로 둘 수 있다면 RDS로 마이그레이션할 때 기본 백업 및 복원을 사용하는 것이 좋습니다. 온프레미스 데이터베이스를 오프라인으로 전환할 수 없다면 AWS Database Migration Service를 사용하여 데이터베이스를 Amazon RDS로 마이그레이션하는 것이 좋습니다. 자세한 내용은 [AWS Database Migration Service란 무엇입니까?](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 참조하십시오.

기본 백업 및 복원은 리전 간 스냅샷 복사 기능의 데이터 복구 대신 사용하기 위한 기능이 아닙니다. Amazon RDS에서 교차 리전 재해 복구를 위해 데이터베이스 스냅샷을 다른 AWS 리전으로 복사할 때는 스냅샷 복사를 이용하는 것이 좋습니다. 자세한 내용은 [Amazon RDS용 DB 스냅샷 복사](USER_CopySnapshot.md) 섹션을 참조하세요.

# 기본 백업 및 복원 설정
<a name="SQLServer.Procedural.Importing.Native.Enabling"></a>

기본 백업 및 복원을 설정하려면 다음 세 가지 구성 요소가 필요합니다.

1. 백업 파일을 저장할 Amazon S3 버킷.

   백업 파일에 사용한 후 RDS로 마이그레이션하려는 백업을 업로드할 S3 버킷이 있어야 합니다. 이미 Amazon S3 버킷이 있으면 그 버킷을 사용하면 됩니다. 없는 경우 [버킷을 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html)할 수 있습니다. 또는 `SQLSERVER_BACKUP_RESTORE`을 사용하여 AWS Management Console 옵션을 추가할 때 새 버킷이 생성되도록 선택할 수도 있습니다.

   S3 사용에 대한 자세한 내용은 [Amazon Simple Storage Service 사용 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)를 참조하세요.

1. 버킷에 액세스하기 위한 AWS Identity and Access Management(IAM) 역할.

   이미 IAM 역할이 있으면 그 역할을 사용하면 됩니다. AWS Management Console을 사용하여 `SQLSERVER_BACKUP_RESTORE` 옵션을 추가할 때 새 IAM 역할이 생성되도록 선택할 수도 있습니다. 또는 수동으로 역할을 새로 만들 수 있습니다.

   수동으로 새 IAM 역할을 만들려면 다음 단원에서 설명하는 방법을 사용하십시오. 기존 IAM 역할에 신뢰 관계와 권한 정책을 연결하려는 경우에도 동일한 작업을 수행합니다.

1. DB 인스턴스의 옵션 그룹에 `SQLSERVER_BACKUP_RESTORE` 옵션 추가.

   DB 인스턴스에서 기본 백업 및 복원을 활성화하려면 DB 인스턴스의 옵션 그룹에 `SQLSERVER_BACKUP_RESTORE` 옵션을 추가합니다. 자세한 정보와 지침은 [SQL Server에서 기본 백업 및 복원 지원](Appendix.SQLServer.Options.BackupRestore.md) 섹션을 참조하십시오.

## 기본 백업 및 복원을 위한 IAM 역할 수동으로 만들기
<a name="SQLServer.Procedural.Importing.Native.Enabling.IAM"></a>

기본 백업 및 복원에 사용할 새 IAM 역할을 수동으로 생성할 수 있습니다. 이 경우 Amazon RDS 서비스에서 Amazon S3 버킷으로 권한을 위임하는 역할을 생성합니다. IAM 역할을 만들 때 신뢰 관계와 권한 정책을 연결합니다. 신뢰 관계를 통해 RDS가 이 역할을 맡도록 허용합니다. 권한 정책은 이 역할이 수행할 수 있는 작업을 정의합니다. 역할을 만드는 방법에 대한 자세한 내용은 [AWS 서비스에 대한 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)을 참조하세요.

기본 백업 및 복원 기능의 경우, 이 단원의 예제와 비슷한 신뢰 관계 및 권한 정책을 사용합니다. 다음 예제에서는 서비스 보안 주체 이름 `rds.amazonaws.com`을 모든 서비스 계정의 별칭으로 사용합니다. 다른 예에서는 신뢰 정책에서 액세스 권한을 부여할 다른 계정, 사용자, 역할을 식별하기 위해 Amazon 리소스 이름(ARN)을 지정합니다.

서비스 권한을 특정 리소스로 제한하는 리소스 기반 신뢰 관계의 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 및 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 전역 조건 컨텍스트 키를 사용하는 것이 좋습니다. 이는 [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)를 방지하는 가장 효과적인 방법입니다.

전역 조건 컨텍스트 키를 모두 사용하고 `aws:SourceArn` 값에 계정 ID가 포함되도록 할 수 있습니다. 이 경우 `aws:SourceAccount` 값과 `aws:SourceArn` 값의 계정이 동일한 문에서 사용될 때 동일한 계정 ID를 사용해야 합니다.
+ 단일 리소스에 대한 교차 서비스 액세스를 원하는 경우 `aws:SourceArn`을 사용하세요.
+ 해당 계정의 모든 리소스가 교차 서비스 사용과 연결되도록 허용하려는 경우 `aws:SourceAccount`를 사용하세요.

신뢰 관계에서는 역할에 액세스하는 리소스의 전체 ARN이 포함된 `aws:SourceArn` 전역 조건 컨텍스트 키를 사용해야 합니다. 기본 백업 및 복원의 경우 다음 예와 같이 DB 옵션 그룹과 DB 인스턴스를 모두 포함해야 합니다.

**Example 기본 백업 및 복원을 위한 전역 조건 컨텍스트 키와의 신뢰 관계**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "rds.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": [
                        "arn:aws:rds:Region:0123456789:db:db_instance_identifier",
                        "arn:aws:rds:Region:0123456789:og:option_group_name"
                    ],
                    "aws:SourceAccount": "0123456789"
                }
            }
        }
    ]
}
```

다음 예에서는 ARN을 사용하여 리소스를 지정합니다. ARN 사용에 대한 자세한 내용은 [Amazon 리소스 이름(ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)을 참조하십시오.

**Example 암호화 지원 없는 기본 백업 및 복원을 위한 권한 정책**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":
    [
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
        },
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:GetObjectAttributes",
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

**Example 암호화 지원 있는 기본 백업 및 복원을 위한 권한 정책**  
백업 파일을 암호화하려면 권한 정책에 암호화 키를 포함시켜야 합니다. 암호화 키에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [시작하기](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html)를 참조하세요.  
대칭 암호화 KMS 키를 사용하여 백업을 암호화해야 합니다. Amazon RDS에서는 비대칭 KMS 키가 지원되지 않습니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [대칭 암호화 KMS 키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)을 참조하세요.  
IAM 역할은 KMS 키의 키 사용자 및 키 관리자여야 합니다. 즉, 키 정책에서 지정해야 합니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [대칭 암호화 KMS 키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)을 참조하세요.  
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessToKey",
      "Effect": "Allow",
      "Action": [
        "kms:DescribeKey",
        "kms:GenerateDataKey",
        "kms:Encrypt",
        "kms:Decrypt"
      ],
      "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-id"
    },
    {
      "Sid": "AllowAccessToS3",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
    },
    {
      "Sid": "GetS3Info",
      "Effect": "Allow",
      "Action": [
        "s3:GetObjectAttributes",
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload"
      ],
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
    }
  ]
}
```

**Example 액세스 포인트를 사용하며 암호화 지원 없는 기본 백업 및 복원을 위한 권한 정책**  
S3 액세스 포인트를 사용하는 데 필요한 작업은 S3 버킷과 동일합니다. 리소스 경로가 S3 액세스 포인트 ARN 패턴과 일치하도록 업데이트됩니다.  
RDS는 프라이빗 VPC를 게시하지 않으므로 **네트워크 오리진: 인터넷**을 사용하도록 액세스 포인트를 구성해야 합니다. RDS 인스턴스의 S3 트래픽은 프라이빗 VPC를 통과하므로 퍼블릭 인터넷을 통과하지 않습니다.  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
                ],
            "Resource": [
            "arn:aws:s3:us-east-1:111122223333:accesspoint/amzn-s3-demo-ap",
            "arn:aws:s3:::underlying-bucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObjectAttributes",
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
                ],
                "Resource": [
                "arn:aws:s3:us-east-1:111122223333:accesspoint/amzn-s3-demo-ap/*",
                    "arn:aws:s3:::underlying-bucket/*"
                    ]
                }
            ]   
}
```

**Example 암호화 지원이 없는 디렉터리 버킷에 대한 액세스 포인트를 사용한 네이티브 백업 및 복원을 위한 권한 정책**  
디렉터리 버킷은 범용 버킷과 다른 [세션 기반 권한 부여 메커니즘](https://docs.aws.amazon.com//AmazonS3/latest/userguide/s3-express-authenticating-authorizing.html)을 사용하므로 기본 백업 복원에 필요한 유일한 권한은 버킷 수준 “s3express:CreateSession” 권한입니다. 객체 수준 액세스를 구성하려면 [디렉터리 버킷에 액세스 포인트](https://docs.aws.amazon.com//AmazonS3/latest/userguide/access-points-directory-buckets-policies.html)를 사용해야 합니다.  
RDS는 프라이빗 VPC를 게시하지 않으므로 **네트워크 오리진: 인터넷**을 사용하도록 액세스 포인트를 구성해야 합니다. RDS 인스턴스의 S3 트래픽은 프라이빗 VPC를 통과하므로 퍼블릭 인터넷을 통과하지 않습니다.  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":
    [
        {
        "Effect": "Allow",
        "Action": "s3express:CreateSession",
        "Resource": 
            [
                "arn:aws:s3express:us-east-1:111122223333:accesspoint/amzn-s3-demo-accesspoint--use1-az6--xa-s3",
                "arn:aws:s3express:us-east-1:111122223333:bucket/amzn-s3-demo-bucket--use1-az6--x-s3"
            ]
        }
    ]
}
```

# 기본 백업 및 복원 사용
<a name="SQLServer.Procedural.Importing.Native.Using"></a>

기본 백업 및 복원을 활성화하고 구성한 다음에는 사용하기 시작할 수 있습니다. 먼저 Microsoft SQL Server 데이터베이스에 연결한 다음 해당 작업을 위한 Amazon RDS 저장 프로시저를 호출합니다. 데이터베이스 연결 방법에 대한 자세한 내용은 [Microsoft SQL Server DB 인스턴스에 연결](USER_ConnectToMicrosoftSQLServerInstance.md) 섹션을 참조하십시오.

저장 프로시저 중에는 Amazon S3 버킷과 파일에 ARN(Amazon 리소스 이름)을 제공해야 하는 것도 있습니다. ARN의 형식은 `arn:aws:s3:::bucket_name/file_name.extension`입니다. Amazon S3에서는 ARN에 계정 번호나 AWS 리전을 요구하지 않습니다.

KMS 키(선택 사항)도 제공하는 경우 키의 ARN 형식은 `arn:aws:kms:region:account-id:key/key-id`입니다. 자세한 내용은 [Amazon 리소스 이름(ARN) 및 AWS 서비스 네임스페이스](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)를 참조하세요. 대칭 암호화 KMS 키를 사용하여 백업을 암호화해야 합니다. Amazon RDS에서는 비대칭 KMS 키가 지원되지 않습니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [대칭 암호화 KMS 키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)을 참조하세요.

**참고**  
KMS 키를 사용하는지 여부에 관계없이 기본 백업 및 복원 작업을 통해 S3에 업로드된 파일에 대해 기본값으로 SSE-S3를 통한 서버 측 고급 암호화 표준(AES) 256비트 암호화를 사용할 수 있습니다. `@enable_bucket_default_encryption=1`을 백업 저장 프로시저로 전달하면 S3 버킷의 구성된 기본 암호화 키가 사용됩니다.

각각의 저장 프로시저를 호출하는 방법에 대한 지침은 다음 주제를 참조하십시오.
+ [데이터베이스 백업](#SQLServer.Procedural.Importing.Native.Using.Backup)
+ [데이터베이스 복원](#SQLServer.Procedural.Importing.Native.Using.Restore)
+ [로그 복원](#SQLServer.Procedural.Importing.Native.Restore.Log)
+ [데이터베이스 복원 마무리](#SQLServer.Procedural.Importing.Native.Finish.Restore)
+ [부분적으로 복원된 데이터베이스 작업](#SQLServer.Procedural.Importing.Native.Partially.Restored)
+ [작업 취소](#SQLServer.Procedural.Importing.Native.Using.Cancel)
+ [작업 상태 추적](#SQLServer.Procedural.Importing.Native.Tracking)

## 데이터베이스 백업
<a name="SQLServer.Procedural.Importing.Native.Using.Backup"></a>

데이터베이스를 백업하려면 `rds_backup_database` 저장 프로시저를 사용하십시오.

**참고**  
유지 관리 기간 중 또는 Amazon RDS에서 스냅샷을 만드는 동안에는 데이터베이스를 백업할 수 없습니다.

### 사용법
<a name="SQLServer.Procedural.Importing.Native.Backup.Syntax"></a>

```
exec msdb.dbo.rds_backup_database
	@source_db_name='database_name',
	@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name.extension',
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],	
	[@overwrite_s3_backup_file=0|1],
	[@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n],
	[@type='DIFFERENTIAL|FULL'],
	[@number_of_files=n],
	[@enable_bucket_default_encryption=0|1];
```

다음 파라미터는 필수 파라미터입니다.
+ `@source_db_name` – 백업할 데이터베이스의 이름입니다.
+ `@s3_arn_to_backup_to` – 백업에 사용할 Amazon S3 버킷, 액세스 포인트, 디렉터리 버킷 또는 디렉터리 버킷의 액세스 포인트와 백업 파일의 이름을 나타내는 ARN입니다.

  파일에는 어떤 확장명이든 있을 수 있지만 `.bak`이 주로 사용됩니다. 액세스 포인트 ARN은 `arn:aws:s3:us-east-1:111122223333:access-point-name/object/key` 형식이어야 합니다.

다음 파라미터는 선택적입니다.
+ `@kms_master_key_arn` – 항목을 암호화하는 데 사용할 대칭 암호화 KMS 키의 ARN입니다.
  + 기본 암호화 키는 사용할 수 없습니다. 기본 키를 사용하면 데이터베이스가 백업되지 않습니다.
  +  KMS 키 식별자를 지정하지 않으면 백업 파일이 암호화되지 않습니다. 자세한 내용은 [Amazon RDS 리소스 암호화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html) 섹션을 참조하십시오.
  + KMS 키를 지정하면 클라이언트 측 암호화가 사용됩니다.
  + Amazon RDS에서는 비대칭 KMS 키가 지원되지 않습니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [대칭 암호화 KMS 키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)을 참조하세요.
+ `@overwrite_s3_backup_file` – 기존 백업 파일을 덮어쓸지 여부를 나타내는 값입니다.
  + `0` – 기존 파일을 덮어쓰지 않습니다. 이 값이 기본값입니다.

    `@overwrite_s3_backup_file`을 0으로 설정하면 파일이 이미 존재할 경우 오류를 반환합니다.
  + `1` – 백업 파일이 아니더라도 지정된 이름이 있는 기존 파일을 덮어씁니다.
+ `@type` – 백업 유형입니다.
  + `DIFFERENTIAL` – 차등 백업을 수행합니다.
  + `FULL` – 전체 백업을 수행합니다. 이 값이 기본값입니다.

  차등 백업은 마지막 전체 백업을 기반을 합니다. 차등 백업이 작동할 수 있도록 마지막 전체 백업과 차등 백업 간에는 스냅샷을 만들 수 없습니다. 차등 백업을 만들려고 하는데 스냅샷이 이미 있으면 차등 백업을 진행하기 전에 다른 전체 백업을 만드십시오.

  다음 예제 SQL 쿼리를 사용하여 마지막 전체 백업 또는 스냅샷을 찾을 수 있습니다.

  ```
  select top 1
  database_name
  , 	backup_start_date
  , 	backup_finish_date
  from    msdb.dbo.backupset
  where   database_name='mydatabase'
  and     type = 'D'
  order by backup_start_date desc;
  ```
+ `@number_of_files` – 백업을 분할(청크)할 파일 수입니다. 최대 개수는 10입니다.
  + 다중 파일 백업은 전체 백업과 차등 백업에 모두 지원됩니다.
  + 값 1을 입력하거나 파라미터를 생략하면 단일 백업 파일이 생성됩니다.

  파일에 공통으로 사용되는 접두사를 입력한 다음 접미사로 별표(`*`)를 붙입니다. 별표는 S3 ARN의 *file\$1name* 부분 아무 곳이나 지정할 수 있습니다. 별표는 생성된 파일에서 일련의 영숫자 문자열로 대체되며 `1-of-number_of_files`부터 시작합니다.

  예를 들어, S3 ARN의 파일 이름이 `backup*.bak`이고 `@number_of_files=4`를 설정한 경우 생성되는 백업 파일은 `backup1-of-4.bak`, `backup2-of-4.bak`, `backup3-of-4.bak` 및 `backup4-of-4.bak`입니다.
  + 파일 이름이 이미 존재하고 `@overwrite_s3_backup_file`이 0이면 오류가 반환됩니다.
  + 다중 파일 백업에는 S3 ARN의 *file\$1name* 부분에 별표를 하나만 지정할 수 있습니다.
  + 단일 파일 백업에는 S3 ARN의 *file\$1name* 부분에 별표를 여러 개 지정할 수 있습니다. 별표는 생성된 파일 이름에서 제거되지 않습니다.
+ `@block_size` - 백업 작업의 물리적 블록 크기를 지정하는 블록 크기(바이트)입니다. 유효한 값은 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536입니다.
+ `@max_transfer_size` – 최대 전송 크기는 백업 프로세스 중에 I/O 작업당 전송되는 데이터 볼륨의 상한(바이트)을 나타냅니다. 유효한 값은 65,536바이트(64KB)의 배수로, 최대 4,194,304바이트(4MB)입니다.
+ `@buffer_count` - 백업 프로세스에 사용할 I/O 버퍼의 총 수입니다.
+ `@enable_bucket_default_encryption` - S3에서 서버 측 암호화에 S3 버킷 기본 암호화 구성을 사용할지 여부를 나타내는 값입니다. 디렉터리 버킷은이 설정에 관계없이 항상 버킷의 기본 암호화 구성을 사용합니다.
  + `0` - 서버 측 암호화는 SSE-S3를 통한 고급 암호화 표준(AES) 256비트 암호화를 사용합니다.
  + `1` - 서버 측 암호화는 S3 버킷의 구성된 [기본 암호화](https://docs.aws.amazon.com//AmazonS3/latest/userguide/bucket-encryption.html)를 사용합니다.

### 예제
<a name="SQLServer.Procedural.Importing.Native.Backup.Examples"></a>

**Example 차등 백업**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak',
@overwrite_s3_backup_file=1,
@type='DIFFERENTIAL';
```

**Example 클라이언트 측 암호화를 사용하는 전체 백업**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE',
@overwrite_s3_backup_file=1,
@type='FULL';
```

**Example 다중 파일 백업**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=4;
```

**Example 다중 파일 차등 백업**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@type='DIFFERENTIAL',
@number_of_files=4;
```

**Example 암호화를 사용한 다중 파일 백업**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE',
@number_of_files=4;
```

**Example S3 덮어쓰기를 사용한 다중 파일 백업**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@overwrite_s3_backup_file=1,
@number_of_files=4;
```

**Example 블록 크기를 사용한 백업**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@block_size=512;
```

**Example `@max_transfer_size` 및 `@buffer_count`를 사용한 멀티파일 백업**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=4,
@max_transfer_size=4194304,
@buffer_count=10;
```

**Example @number\$1of\$1files 파라미터를 사용하는 단일 파일 백업**  
이 예제에서는 `backup*.bak` 백업 파일을 생성합니다.  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=1;
```

**Example 서버 측 암호화를 사용하는 전체 백업**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@overwrite_s3_backup_file=1,
@type='FULL',
@enable_bucket_default_encryption=1;
```

**Example 액세스 포인트를 사용한 전체 백업**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/object/backup1.bak',
@overwrite_s3_backup_file=1,
@type='FULL';
```

**Example 디렉터리 버킷의 액세스 포인트를 사용한 전체 백업**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3express:us-east-1:123456789012:accesspoint/my-access-point--use1-az6--xa-s3/object/backup1.bak',
@overwrite_s3_backup_file=1,
@type='FULL';
```

## 데이터베이스 복원
<a name="SQLServer.Procedural.Importing.Native.Using.Restore"></a>

데이터베이스를 복원하려면 `rds_restore_database` 저장 프로시저를 호출합니다. 복원 태스크가 완료되고 데이터베이스가 열린 후 Amazon RDS가 데이터베이스의 초기 스냅샷을 생성합니다.

### 사용법
<a name="SQLServer.Procedural.Importing.Native.Restore.Syntax"></a>

```
exec msdb.dbo.rds_restore_database
	@restore_db_name='database_name',
	@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name.extension',
	@with_norecovery=0|1,
	[@keep_cdc=0|1],
	[@data_file_volume='D:|H:|I:|J:'],
	[@log_file_volume='D:|H:|I:|J:'],
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
        [@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n],
	[@type='DIFFERENTIAL|FULL'];
```

다음 파라미터는 필수 파라미터입니다.
+ `@restore_db_name` – 복원할 데이터베이스의 이름입니다. 데이터베이스 이름은 고유합니다. 기존 데이터베이스와 이름이 같은 데이터베이스는 복원할 수 없습니다.
+ `@s3_arn_to_restore_from` – 데이터베이스를 복원하는 데 사용되는 백업 파일의 Amazon S3 접두사 및 이름을 나타내는 ARN입니다.
  + 단일 파일 백업의 경우 전체 파일 이름을 입력하십시오.
  + 다중 파일 백업의 경우 파일에 공통으로 사용되는 접두사를 제공한 다음 접미사로 별표(`*`)를 붙입니다.
    + 디렉터리 버킷을 사용하는 경우 [디렉터리 버킷의 차이](https://docs.aws.amazon.com//AmazonS3/latest/userguide/s3-express-differences.html)로 인해 ARN이 `/*`로 끝나야 합니다.
  + `@s3_arn_to_restore_from`이 비어 있으면 다음 오류가 반환됩니다. S3 ARN prefix cannot be empty(S3 ARN 접두사는 비워 둘 수 없습니다).

차등 복원에는 다음 파라미터가 필수적이지만 전체 복원에는 선택적입니다.
+ `@with_norecovery` – 복원 작업에 사용할 복구 절입니다.
  + RECOVERY로 복원하려면 `0`으로 설정합니다. 이 경우 데이터베이스는 복원 후 온라인 상태입니다.
  + NORECOVERY로 복원하려면 `1`로 설정합니다. 이 경우 데이터베이스는 복원 작업 완료 후 RESTORING 상태로 유지됩니다. 이 방법을 사용하면 나중에 차등 복원을 수행할 수 있습니다.
  + DIFFERENTIAL 복원의 경우 `0` 또는 `1`을 지정하십시오.
  + `FULL` 복원의 경우, 이 값은 기본적으로 `0`로 설정됩니다.

다음 파라미터는 선택적입니다.
+ `@keep_cdc` - 복원된 데이터베이스에서 변경 데이터 캡처(CDC) 구성을 유지할지 여부를 나타냅니다. KEEP\$1CDC를 활성화하려면 `1`로 설정하고 비활성화하려면 `0`으로 설정합니다. 기본값은 `0`입니다.
+ `@data_file_volume` - 데이터베이스 데이터 파일의 드라이브 문자를 지정합니다. 기본값은 `D:`입니다.
+ `@log_file_volume` - 데이터베이스 로그 파일의 드라이브 문자를 지정합니다. 기본값은 `D:`입니다.
+ `@kms_master_key_arn` – 백업 파일을 암호화한 경우 파일 복호화에 사용할 KMS 키입니다.

  KMS 키를 지정하면 클라이언트 측 암호화가 사용됩니다.
+ `@type` – 복원의 유형입니다. 유효한 형식은 `DIFFERENTIAL` 및 `FULL`입니다. 기본 값은 `FULL`입니다.
+ `@block_size` - 백업 작업의 물리적 블록 크기를 지정하는 블록 크기(바이트)입니다. 유효한 값은 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536입니다.
+ `@max_transfer_size` – 최대 전송 크기는 백업 프로세스 중에 I/O 작업당 전송되는 데이터 볼륨의 상한(바이트)을 나타냅니다. 유효한 값은 65,536바이트(64KB)의 배수로, 최대 4,194,304바이트(4MB)입니다.
+ `@buffer_count` - 백업 프로세스에 사용할 I/O 버퍼의 총 수입니다.

**참고**  
차등 복원의 경우 데이터베이스가 RESTORING 상태이거나 NORECOVERY로 복원하는 작업이 이미 존재해야 합니다.  
데이터베이스가 온라인 상태인 동안 나중에 차등 백업을 복원할 수 없습니다.  
이미 RECOVERY로 복원 작업을 보류 중인 데이터베이스에 대해서는 복원 작업을 제출할 수 없습니다.  
NORECOVERY와 KEEP\$1CDC가 모두 포함된 전체 복원은 지원되지 않습니다.  
리전 간 읽기 전용 복제본이 있는 인스턴스에서는 모든 기본 복원이 지원되지 않습니다.  
지원되는 구성의 경우, 읽기 전용 복제본을 사용하여 다중 AZ 인스턴스에서 데이터베이스를 복원하는 것은 다중 AZ 인스턴스에서 데이터베이스를 복원하는 것과 유사합니다. 복제본에서 데이터베이스를 복원하기 위해 추가 작업을 수행할 필요가 없습니다.

### 예제
<a name="SQLServer.Procedural.Importing.Native.Restore.Examples"></a>

**Example 단일 파일 복원**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
```

**Example 다중 파일 복원**  
여러 파일을 복원하는 동안 오류를 방지하려면 모든 백업 파일의 접두사가 같고 다른 파일은 이 접두사를 사용하지 않아야 합니다.  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup*';
```

**Example RECOVERY로 전체 데이터베이스 복원**  
다음 세 가지 예는 동일한 작업, RECOVERY를 사용한 전체 복원을 수행합니다.  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
```

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
[@type='DIFFERENTIAL|FULL'];
```

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='FULL',
@with_norecovery=0;
```

**Example 암호화로 전체 데이터베이스 복원**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

**Example 블록 크기를 사용한 복원**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@block_size=512;
```

**Example @max\$1transfer\$1size 및 @buffer\$1count를 사용한 멀티파일 복원**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup*',
@max_transfer_size=4194304,
@buffer_count=10;
```

**Example NORECOVERY로 전체 데이터베이스 복원**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='FULL',
@with_norecovery=1;
```

**Example NORECOVERY로 차등 복원**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='DIFFERENTIAL',
@with_norecovery=1;
```

**Example RECOVERY로 차등 복원**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='DIFFERENTIAL',
@with_norecovery=0;
```

**Example 액세스 포인트를 사용하여 RECOVERY를 사용한 전체 데이터베이스 복원**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/object/backup1.bak',
@with_norecovery=0;
```

**Example KEEP\$1CDC으로 전체 데이터베이스 복원**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@keep_cdc=1;
```

## 로그 복원
<a name="SQLServer.Procedural.Importing.Native.Restore.Log"></a>

로그를 복원하려면 `rds_restore_log` 저장 프로시저를 호출합니다.

### 사용법
<a name="SQLServer.Procedural.Importing.Native.Restore.Log.Syntax"></a>

```
exec msdb.dbo.rds_restore_log 
	@restore_db_name='database_name',
	@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/log_file_name.extension',
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
	[@with_norecovery=0|1],
	[@keep_cdc=0|1],
	[@stopat='datetime'],
	[@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n];
```

다음 파라미터는 필수 파라미터입니다.
+ `@restore_db_name` – 로그를 복원할 데이터베이스의 이름입니다.
+ `@s3_arn_to_restore_from` – 로그를 복원하는 데 사용되는 로그 파일의 Amazon S3 접두사 및 이름을 나타내는 ARN입니다. 파일에는 어떤 확장명이든 있을 수 있지만 `.trn`이 주로 사용됩니다.

  `@s3_arn_to_restore_from`이 비어 있으면 다음 오류가 반환됩니다. S3 ARN prefix cannot be empty(S3 ARN 접두사는 비워 둘 수 없습니다).

다음 파라미터는 선택적입니다.
+ `@keep_cdc` - 복원된 데이터베이스에서 변경 데이터 캡처(CDC) 구성을 유지할지 여부를 나타냅니다. KEEP\$1CDC를 활성화하려면 1로 설정하고 비활성화하려면 0으로 설정합니다. 기본값은 0입니다.
+ `@kms_master_key_arn` – 로그를 암호화한 경우, 로그 복호화에 사용할 KMS 키입니다.
+ `@with_norecovery` – 복원 작업에 사용할 복구 절입니다. 기본값은 `1`입니다.
  + RECOVERY로 복원하려면 `0`으로 설정합니다. 이 경우 데이터베이스는 복원 후 온라인 상태입니다. 데이터베이스가 온라인 상태인 동안 더 이상 로그 백업을 복원할 수 없습니다.
  + NORECOVERY로 복원하려면 `1`로 설정합니다. 이 경우 데이터베이스는 복원 작업 완료 후 RESTORING 상태로 유지됩니다. 이 방법을 사용하면 나중에 로그 복원을 수행할 수 있습니다.
+ `@stopat` – 데이터베이스가 지정된 날짜 및 시간(날짜 시간 형식)에서 해당 상태로 복원되도록 지정하는 값입니다. 지정된 날짜 및 시간 이전에 작성된 트랜잭션 로그 레코드만 데이터베이스에 적용됩니다.

  이 파라미터를 지정하지 않으면(NULL 인 경우) 전체 로그가 복원됩니다.
+ `@block_size` - 백업 작업의 물리적 블록 크기를 지정하는 블록 크기(바이트)입니다. 유효한 값은 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536입니다.
+ `@max_transfer_size` – 최대 전송 크기는 백업 프로세스 중에 I/O 작업당 전송되는 데이터 볼륨의 상한(바이트)을 나타냅니다. 유효한 값은 65,536바이트(64KB)의 배수로, 최대 4,194,304바이트(4MB)입니다.
+ `@buffer_count` - 백업 프로세스에 사용할 I/O 버퍼의 총 수입니다.

**참고**  
로그 복원의 경우 데이터베이스가 복원 상태이거나 NORECOVERY로 복원하는 작업이 이미 존재해야 합니다.  
데이터베이스가 온라인 상태인 동안 로그 백업을 복원할 수 없습니다.  
이미 RECOVERY로 복원 작업을 보류 중인 데이터베이스에서는 로그 복원 작업을 제출할 수 없습니다.

### 예제
<a name="SQLServer.Procedural.Importing.Native.Restore.Log.Examples"></a>

**Example 로그 복원**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
```

**Example 암호화로 로그 복원**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

**Example NORECOVERY로 로그 복원**  
다음 두 가지 예는 동일한 작업, NORECOVERY를 사용한 로그 복원을 수행합니다.  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=1;
```

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
```

**Example 블록 크기를 사용한 복원**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@block_size=512;
```

**Example RECOVERY로 로그 복원**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=0;
```

**Example STOPAT 절로 로그 복원**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=0,
@stopat='2019-12-01 03:57:09';
```

**Example KEEP\$1CDC를 사용한 로그 복원**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@keep_cdc=1;
```

## 데이터베이스 복원 마무리
<a name="SQLServer.Procedural.Importing.Native.Finish.Restore"></a>

`@with_norecovery=1`을 사용하여 데이터베이스에서 마지막 복원 작업을 수행한 경우, 데이터베이스는 이제 RESTORING 상태입니다. `rds_finish_restore` 저장 프로시저를 사용하여 정상적으로 작동할 이 데이터베이스를 엽니다.

### 사용법
<a name="SQLServer.Procedural.Importing.Native.Finish.Restore.Syntax"></a>

```
exec msdb.dbo.rds_finish_restore @db_name='database_name';
```

**참고**  
이 방법을 사용하려면 데이터베이스가 보류 중인 복원 작업 없이 RESTORING 상태여야 합니다.  
데이터베이스 복원을 마치려면 마스터 로그인을 사용하십시오. 또는 가장 최근에 NORECOVERY로 데이터베이스나 로그를 복원한 사용자 로그인 정보를 사용하십시오.

## 부분적으로 복원된 데이터베이스 작업
<a name="SQLServer.Procedural.Importing.Native.Partially.Restored"></a>

### 부분적으로 복원된 데이터베이스 삭제
<a name="SQLServer.Procedural.Importing.Native.Drop.Partially.Restored"></a>

부분적으로 복원된 데이터베이스를 삭제하려면(RESTORING 상태로 남음), `rds_drop_database` 저장 프로시저를 사용하십시오.

```
exec msdb.dbo.rds_drop_database @db_name='database_name';
```

**참고**  
이미 보류 중인 복원 작업이 있거나 복원 작업을 마친 데이터베이스에 대해서는 DROP 데이터베이스 요청을 제출할 수 없습니다.  
데이터베이스를 삭제하려면 마스터 로그인을 사용합니다. 또는 가장 최근에 NORECOVERY로 데이터베이스나 로그를 복원한 사용자 로그인 정보를 사용하십시오.

### 부분적으로 복원된 데이터베이스에 대한 스냅샷 복원 및 특정 시점으로 복구 동작
<a name="SQLServer.Procedural.Importing.Native.Snapshot.Restore"></a>

원본 인스턴스에서 부분적으로 복원된 데이터베이스(RESTORING 상태로 남음)는 스냅샷 복원 및 특정 시점으로 복구 도중에 대상 인스턴스에서 삭제됩니다.

## 작업 취소
<a name="SQLServer.Procedural.Importing.Native.Using.Cancel"></a>

백업 또는 복원 작업을 취소하려면 `rds_cancel_task` 저장 프로시저를 호출합니다.

**참고**  
FINISH\$1RESTORE 작업을 취소할 수 없습니다.

### 사용법
<a name="SQLServer.Procedural.Importing.Native.Cancel.Syntax"></a>

```
exec msdb.dbo.rds_cancel_task @task_id=ID_number;
```

다음 파라미터는 필수입니다.
+ `@task_id` – 취소할 작업의 ID입니다. 작업 ID는 `rds_task_status`를 호출하여 확인할 수 있습니다.

## 작업 상태 추적
<a name="SQLServer.Procedural.Importing.Native.Tracking"></a>

백업 및 복원 작업의 상태를 추적하려면 `rds_task_status` 저장 프로시저를 호출합니다. 파라미터를 제공하지 않으면 이 저장 프로시저는 모든 작업의 상태를 반환합니다. 작업 상태는 약 2분마다 업데이트됩니다. 작업 기록은 36일 동안 보존됩니다.

### 사용법
<a name="SQLServer.Procedural.Importing.Native.Tracking.Syntax"></a>

```
exec msdb.dbo.rds_task_status
	[@db_name='database_name'],
	[@task_id=ID_number];
```

다음 파라미터는 선택적입니다.
+ `@db_name` – 작업 상태를 표시할 데이터베이스의 이름입니다.
+ `@task_id` – 작업 상태를 표시할 작업의 ID입니다.

### 예제
<a name="SQLServer.Procedural.Importing.Native.Tracking.Examples"></a>

**Example 특정 작업의 상태 나열**  

```
exec msdb.dbo.rds_task_status @task_id=5;
```

**Example 특정 데이터베이스 및 작업의 상태 나열**  

```
exec msdb.dbo.rds_task_status
@db_name='my_database',
@task_id=5;
```

**Example 특정 데이터베이스의 모든 작업 및 상태 나열**  

```
exec msdb.dbo.rds_task_status @db_name='my_database';
```

**Example 현재 인스턴스의 모든 작업 및 상태 나열**  

```
exec msdb.dbo.rds_task_status;
```

### 응답
<a name="SQLServer.Procedural.Importing.Native.Tracking.Response"></a>

`rds_task_status` 저장 프로시저는 다음과 같은 열을 반환합니다.


****  

| 열 | 설명 | 
| --- | --- | 
| `task_id` |  작업의 ID입니다.  | 
| `task_type` |  입력 파라미터에 따라 다음과 같은 작업 유형: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html) 다음 복원 작업이 완료되고 데이터베이스가 열린 후 Amazon RDS가 데이터베이스의 최초 스냅샷을 만듭니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html)  | 
| `database_name` |  작업이 연결되어 있는 데이터베이스의 이름입니다.  | 
| `% complete` |  백분율로 나타낸 작업의 진행률입니다.  | 
| `duration (mins)` |  작업에 소요된 시간입니다(분).  | 
| `lifecycle` |  작업의 상태입니다. 가능한 상태는 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html)  | 
| `task_info` |  작업에 대한 추가 정보입니다. 데이터베이스를 백업하거나 복원하는 동안 오류가 발생하면 이 열에 오류에 대한 정보가 포함됩니다. 가능한 오류 목록 및 완화 전략은 [문제 해결](SQLServer.Procedural.Importing.Native.Troubleshooting.md) 섹션을 참조하십시오.  | 
| `last_updated` |  작업 상태를 마지막으로 업데이트한 날짜와 시간입니다. 상태는 5% 진행 후마다 업데이트됩니다.  | 
| `created_at` | 작업을 생성한 날짜와 시간입니다. | 
| S3\$1object\$1arn | 백업 또는 복원 중인 파일의 Amazon S3 접두사 및 이름을 나타내는 ARN입니다. | 
| `overwrite_s3_backup_file` |  백업 작업을 호출할 때 지정된 `@overwrite_s3_backup_file` 파라미터의 값입니다. 자세한 내용은 [데이터베이스 백업](#SQLServer.Procedural.Importing.Native.Using.Backup) 섹션을 참조하세요.  | 
| KMS\$1master\$1key\$1arn | 암호화(백업용) 및 복호화(복원용)에 사용되는 KMS 키의 ARN입니다. | 
| filepath | 기본 백업 및 복원 작업에는 해당되지 않음 | 
| overwrite\$1file | 기본 백업 및 복원 작업에는 해당되지 않음 | 

# 백업 파일 압축
<a name="SQLServer.Procedural.Importing.Native.Compression"></a>

Amazon S3 버킷 용량 절약을 위해 백업 파일을 압축할 수 있습니다. 백업 파일 압축에 대한 자세한 내용은 Microsoft 설명서의 [Backup Compression](https://msdn.microsoft.com/en-us/library/bb964719.aspx)을 참조하십시오.

백업 파일 압축은 다음 데이터베이스 에디션에 지원됩니다.
+ Microsoft SQL Server Enterprise Edition 
+ Microsoft SQL Server Standard Edition 

백업 파일에 대한 압축 옵션을 확인하려면 다음 코드를 실행합니다.

```
1. exec rdsadmin.dbo.rds_show_configuration 'S3 backup compression';
```

백업 파일 압축을 설정하려면 다음 코드를 실행하십시오.

```
1. exec rdsadmin.dbo.rds_set_configuration 'S3 backup compression', 'true';
```

백업 파일 압축을 해제하려면 다음 코드를 실행하십시오.

```
1. exec rdsadmin.dbo.rds_set_configuration 'S3 backup compression', 'false';
```

# 문제 해결
<a name="SQLServer.Procedural.Importing.Native.Troubleshooting"></a>

다음은 기본 백업 및 복원을 사용할 때 생길 수 있는 문제들입니다.


****  

| 문제 | 문제 해결 제안 | 
| --- | --- | 
|  데이터베이스 백업/복원 옵션이 아직 활성화되지 않았거나 활성화되는 중입니다. 나중에 다시 시도하세요.  |  `SQLSERVER_BACKUP_RESTORE` 옵션을 DB 인스턴스와 연결된 DB 옵션 그룹에 추가해야 합니다. 자세한 내용은 [기본 백업 및 복원 옵션 추가](Appendix.SQLServer.Options.BackupRestore.md#Appendix.SQLServer.Options.BackupRestore.Add) 섹션을 참조하세요.  | 
|  객체 '*rds\$1backup\$1database*', 데이터베이스 'msdb', 스키마 'dbo'에서 EXECUTE 권한이 거부되었습니다.  |  저장 프로시저를 실행할 때 마스터 사용자를 사용하고 있는지 확인합니다. 마스터 사용자로 로그인한 후에도 이 오류가 발생하면 관리 사용자 권한이 잘못 정렬되었기 때문일 수 있습니다. 마스터 사용자를 재설정하려면 AWS Management Console을 사용합니다. [Amazon RDS for SQL Server 마스터 사용자의 db\$1owner 역할 멤버십 재설정](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)을(를) 참조하세요.  | 
|  객체 '*rds\$1restore\$1database*', 데이터베이스 'msdb', 스키마 'dbo'에서 EXECUTE 권한이 거부되었습니다.  |  저장 프로시저를 실행할 때 마스터 사용자를 사용하고 있는지 확인합니다. 마스터 사용자로 로그인한 후에도 이 오류가 발생하면 관리 사용자 권한이 잘못 정렬되었기 때문일 수 있습니다. 마스터 사용자를 재설정하려면 AWS Management Console을 사용합니다. [Amazon RDS for SQL Server 마스터 사용자의 db\$1owner 역할 멤버십 재설정](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)을(를) 참조하세요.  | 
|  액세스 거부됨  | 백업 또는 복원 프로세스는 백업 파일에 액세스할 수 없습니다. 이것의 원인이 되는 문제는 일반적으로 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Troubleshooting.html)  | 
|  압축 기능이 있는 백업 데이터베이스는 <edition\$1name> Edition에서 지원되지 않습니다.  |  백업 파일 압축은 Microsoft SQL Server Enterprise Edition 및 Standard Edition에서만 지원됩니다. 자세한 내용은 [백업 파일 압축](SQLServer.Procedural.Importing.Native.Compression.md) 섹션을 참조하세요.  | 
|  키 <ARN>이 존재하지 않습니다.  |  암호화된 백업을 복원하려고 시도했으나 유효한 암호화 키를 제공하지 않았습니다. 암호화 키를 확인한 후 다시 시도하십시오.자세한 내용은 [데이터베이스 복원](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Restore) 섹션을 참조하세요.  | 
|  올바른 유형 및 덮어쓰기 속성을 사용하여 작업을 다시 실행하세요(Please reissue task with correct type and overwrite property)  |  데이터베이스 백업을 시도할 때 이미 존재하는 파일 이름을 입력하고 덮어쓰기 속성을 false로 설정하면 저장 작업이 실패합니다. 이 오류를 해결하려면 존재하지 않는 파일 이름을 입력하거나 덮어쓰기 속성을 true로 설정하십시오. 자세한 내용은 [데이터베이스 백업](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Backup) 섹션을 참조하세요. 데이터베이스를 복원할 때 잘못하여 `rds_backup_database` 저장 프로시저를 호출했을 수도 있습니다. 이 경우 대신 `rds_restore_database` 저장 프로시저를 호출하십시오. 자세한 내용은 [데이터베이스 복원](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Restore) 섹션을 참조하세요. 데이터베이스를 복원할 때 `rds_restore_database` 저장 프로시저를 호출한 경우, 유효한 백업 파일 이름을 입력했는지 확인하십시오. 자세한 내용은 [기본 백업 및 복원 사용](SQLServer.Procedural.Importing.Native.Using.md) 섹션을 참조하세요.  | 
|  RDS 인스턴스와 동일한 리전에 있는 버킷을 지정하세요.  |  Amazon RDS DB 인스턴스와 다른 AWS 리전에서는 Amazon S3 버킷으로 백업하거나 복원할 수 없습니다. Amazon S3 복제를 사용하여 백업 파일을 올바른 AWS 리전에 복사할 수 있습니다. 자세한 내용은 Amazon S3 설명서의 [리전 간 복제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/crr.html) 단원을 참조하십시오.  | 
|  지정된 버킷이 존재하지 않습니다  | 버킷 및 파일에 대해 올바른 ARN을 올바른 형식으로 입력했는지 확인하십시오. 자세한 내용은 [기본 백업 및 복원 사용](SQLServer.Procedural.Importing.Native.Using.md) 섹션을 참조하세요.  | 
|  사용자 <ARN>이 리소스 <ARN>에 대해 수행할 권한이 없습니다  |  암호화된 작업을 요청했으나 올바른 AWS KMS 권한을 제공하지 않았습니다. 올바른 권한이 있는지 확인하거나 올바른 권한을 추가하십시오. 자세한 내용은 [기본 백업 및 복원 설정](SQLServer.Procedural.Importing.Native.Enabling.md) 섹션을 참조하세요.  | 
|  복원 작업은 10개 이상의 백업 파일에서 복원할 수 없습니다. 일치하는 파일 수를 줄이고 다시 시도하세요  |  복원하려는 파일 수를 줄입니다. 필요한 경우 개별 파일을 더 크게 만들 수 있습니다.  | 
|  데이터베이스의 '*database\$1name*’이 이미 있습니다. 대/소문자 또는 액센트만 다른 두 데이터베이스는 허용되지 않습니다. 다른 데이터베이스 이름을 선택합니다.  |  기존 데이터베이스와 이름이 같은 데이터베이스는 복원할 수 없습니다. 데이터베이스 이름은 고유합니다.  | 

# 다른 방법으로 SQL Server 데이터 가져오기 및 내보내기
<a name="SQLServer.Procedural.Importing.Snapshots"></a>

다음으로, 스냅샷을 사용하여 Microsoft SQL Server 데이터를 Amazon RDS로 가져오는 방법에 대한 정보를 찾을 수 있습니다. 스냅샷을 사용하여 SQL Server를 실행 중인 RDS DB 인스턴스에서 데이터를 내보내는 방법에 대한 정보도 찾을 수 있습니다.

이 방법이 가능한 시나리오라면 기본 백업 및 복원 기능을 사용하여 Amazon RDS 안팎으로 데이터를 옮기는 것이 더 쉽습니다. 자세한 내용은 [기본 백업 및 복원 기능을 사용하여 SQL Server 데이터베이스 가져오기 및 내보내기](SQLServer.Procedural.Importing.md) 섹션을 참조하세요.

**참고**  
Amazon RDS for Microsoft SQL Server는 `msdb` 데이터베이스로 데이터 가져오기를 지원하지 않습니다.

## 스냅샷을 사용하여 RDS for SQL Server로 데이터 가져오기
<a name="SQLServer.Procedural.Importing.Procedure"></a>

**스냅샷을 사용하여 SQL Server DB 인스턴스로 데이터를 가져오려면**

1. DB 인스턴스를 만듭니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.

1. 애플리케이션이 대상 DB 인스턴스에 액세스하지 못하게 차단합니다.

   데이터를 가져오는 동안 DB 인스턴스에 대한 액세스를 금지하면 데이터 전송이 더 빨라집니다. 또한, 다른 애플리케이션이 DB 인스턴스에 동시에 쓸 수 없는 경우 데이터가 로드되는 동안 충돌에 대해 걱정할 필요가 없습니다. 뭔가 잘못되어 이전의 데이터베이스 스냅샷으로 롤백해야 할 때 잃게 되는 유일한 변경 내용은 가져온 데이터입니다. 문제를 해결한 후 이 데이터를 다시 가져올 수 있습니다.

   DB 인스턴스 액세스 제어에 대한 자세한 정보는 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md)을(를) 참조하십시오.

1. 대상 데이터베이스의 스냅샷을 만듭니다.

   대상 데이터베이스가 이미 데이터로 채워져 있으면 데이터베이스의 스냅샷을 만든 후에 데이터를 가져오는 것이 좋습니다. 데이터 가져오기에 문제가 있거나 변경 내용을 취소하려는 경우 스냅샷을 사용하여 데이터베이스를 이전 상태로 복원할 수 있습니다. 데이터베이스 스냅샷에 대한 자세한 정보는 [Amazon RDS의 단일 AZ DB 인스턴스에 대한 DB 스냅샷 생성](USER_CreateSnapshot.md)을(를) 참조하십시오.
**참고**  
데이터베이스 스냅샷을 만들 때, 백업이 진행되는 동안 데이터베이스에 대한 I/O 작업이 잠시(밀리초) 중단됩니다.

1. 대상 데이터베이스에서 자동 백업을 비활성화합니다.

   자동 백업이 비활성화되어 있을 때는 Amazon RDS가 트랜잭션을 로그에 기록하지 않기 때문에 대상 DB 인스턴스에서 자동 백업을 비활성화하면 데이터를 가져오는 동안 성능이 향상됩니다. 하지만 몇 가지 고려해야 할 사항이 있습니다. 특정 시점으로 복구를 수행하려면 자동 백업이 필요합니다. 따라서 데이터를 가져오는 동안 데이터베이스를 특정 시점으로 복원할 수 없습니다. 또한 보관을 선택하지 않을 경우 DB 인스턴스에서 생성된 자동 백업 데이터가 지워집니다.

   자동 백업을 유지하도록 선택하면 실수로 데이터가 삭제되는 것을 방지할 수 있습니다. 또한 Amazon RDS는 데이터베이스 인스턴스 속성을 각 자동 백업과 함께 저장하여 쉽게 복구할 수 있도록 지원합니다. 이 옵션을 사용하면 데이터베이스 인스턴스가 삭제된 이후에도 백업 보존 기간 중 특정 시점으로 데이터베이스 인스턴스를 복원할 수 있습니다. 자동 백업은 활성 데이터베이스 인스턴스에서와 마찬가지로 지정된 백업 기간이 종료되면 자동으로 삭제됩니다.

   또한 이전 스냅샷을 사용하여 데이터베이스를 복구할 수 있고, 지금까지 만든 스냅샷은 전부 그대로 사용할 수 있습니다. 자동 백업에 대한 자세한 내용은 [백업 소개](USER_WorkingWithAutomatedBackups.md) 단원을 참조하십시오.

1. 해당될 경우 외래 키 제약 조건을 비활성화합니다.

    외래 키 제약 조건을 비활성화할 필요가 있는 경우 다음 스크립트로 비활성화할 수 있습니다.

   ```
   --Disable foreign keys on all tables
       DECLARE @table_name SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables;
       
       OPEN table_cursor;
       FETCH NEXT FROM table_cursor INTO @table_name;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' NOCHECK CONSTRAINT ALL';
         EXEC (@cmd);
         FETCH NEXT FROM table_cursor INTO @table_name;
       END
       
       CLOSE table_cursor;
       DEALLOCATE table_cursor;
       
       GO
   ```

1. 해당될 경우 인덱스를 삭제합니다.

1. 트리거가 있는 경우 비활성화합니다.

    트리거를 비활성화해야 하는 경우 다음 스크립트로 비활성화할 수 있습니다.

   ```
   --Disable triggers on all tables
       DECLARE @enable BIT = 0;
       DECLARE @trigger SYSNAME;
       DECLARE @table SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name,
        table_object.name table_name
       FROM sysobjects trigger_object
       JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id
       WHERE trigger_object.type = 'TR';
       
       OPEN trigger_cursor;
       FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         IF @enable = 1
            SET @cmd = 'ENABLE ';
         ELSE
            SET @cmd = 'DISABLE ';
       
         SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' ';
         EXEC (@cmd);
         FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       END
       
       CLOSE trigger_cursor;
       DEALLOCATE trigger_cursor;
       
       GO
   ```

1. 원본 SQL Server 인스턴스에서 대상 DB 인스턴스로 가져오려는 로그인을 쿼리합니다.

   SQL Server는 `master` 데이터베이스에 로그인과 암호를 저장합니다. Amazon RDS는 `master` 데이터베이스에 액세스 권한을 부여하지 않기 때문에, 로그인 정보와 암호를 대상 DB 인스턴스로 직접 가져올 수는 없습니다. 대신, 원본 SQL Server 인스턴스에서 `master` 데이터베이스를 쿼리하여 DDL(데이터 정의 언어) 파일을 생성해야 합니다. 이 파일에는 대상 DB 인스턴스에 추가하려는 모든 로그인 정보와 암호가 포함되어야 합니다. 이 파일에는 전송하려는 역할 멤버십 및 권한도 포함되어야 합니다.

   `master` 데이터베이스 쿼리에 대한 자세한 정보는 Microsoft 기술 자료의 [SQL Server 인스턴스 간에 로그인 및 암호 전송](https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/security/transfer-logins-passwords-between-instances)을 참조하세요.

   스크립트의 출력은 대상 DB 인스턴스에서 실행할 수 있는 또 다른 스크립트입니다. 기술 자료 문서에 있는 스크립트에 다음 코드가 있을 경우 

   ```
   p.type IN 
   ```

   `p.type`이 나타나는 곳에서는 모두 다음 코드를 대신 사용합니다.

   ```
   p.type = 'S' 
   ```

1. [데이터 가져오기](#ImportData.SQLServer.Import)의 방법을 사용하여 데이터를 가져옵니다.

1. 애플리케이션에 대상 DB 인스턴스에 대한 액세스 권한을 부여합니다.

   데이터 가져오기가 완료되면 가져오기 중에 차단한 애플리케이션에 DB 인스턴스 액세스 권한을 부여할 수 있습니다. DB 인스턴스 액세스 제어에 대한 자세한 정보는 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md)을(를) 참조하십시오.

1. 대상 DB 인스턴스에서 자동 백업을 활성화합니다.

   자동 백업에 대한 자세한 내용은 [백업 소개](USER_WorkingWithAutomatedBackups.md) 단원을 참조하십시오.

1. 외래 키 제약 조건을 활성화합니다.

    앞서 외래 키 제약 조건을 비활성화한 경우 다음 스크립트로 활성화할 수 있습니다.

   ```
   --Enable foreign keys on all tables
       DECLARE @table_name SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables;
       
       OPEN table_cursor;
       FETCH NEXT FROM table_cursor INTO @table_name;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' CHECK CONSTRAINT ALL';
         EXEC (@cmd);
         FETCH NEXT FROM table_cursor INTO @table_name;
       END
       
       CLOSE table_cursor;
       DEALLOCATE table_cursor;
   ```

1. 인덱스가 있는 경우 인덱스를 활성화합니다.

1. 트리거가 있는 경우 트리거를 활성화합니다.

    앞서 트리거를 비활성화했다면 다음 스크립트로 활성화할 수 있습니다.

   ```
   --Enable triggers on all tables
       DECLARE @enable BIT = 1;
       DECLARE @trigger SYSNAME;
       DECLARE @table SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name,
        table_object.name table_name
       FROM sysobjects trigger_object
       JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id
       WHERE trigger_object.type = 'TR';
       
       OPEN trigger_cursor;
       FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         IF @enable = 1
            SET @cmd = 'ENABLE ';
         ELSE
            SET @cmd = 'DISABLE ';
       
         SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' ';
         EXEC (@cmd);
         FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       END
       
       CLOSE trigger_cursor;
       DEALLOCATE trigger_cursor;
   ```

### 데이터 가져오기
<a name="ImportData.SQLServer.Import"></a>

Microsoft SQL Server Management Studio는 Express Edition을 제외한 모든 Microsoft SQL Server 버전에 포함되는 그래픽 SQL Server 클라이언트입니다. SQL Server Management Studio Express는 Microsoft에서 무료 다운로드로 사용할 수 있습니다. 다운로드에 관해서는 [Microsoft 웹 사이트](https://www.microsoft.com/en-us/download)을(를) 참조하십시오.

**참고**  
SQL Server Management Studio는 Windows 기반 애플리케이션으로만 사용할 수 있습니다.

SQL Server Management Studio에는 SQL Server DB 인스턴스로 데이터를 가져오는 데 유용한 다음 도구가 포함됩니다.
+ 스크립트 생성 및 게시 마법사
+ 가져오기 및 내보내기 마법사
+ 대량 복사

#### 스크립트 생성 및 게시 마법사
<a name="ImportData.SQLServer.MgmtStudio.ScriptWizard"></a>

스크립트 생성 및 게시 마법사는 데이터베이스의 스키마, 데이터 자체 또는 두 가지를 모두 포함한 스크립트를 만듭니다. 로컬 SQL Server 배포에서 데이터베이스에 대한 스크립트를 생성할 수 있습니다. 그런 다음, 포함된 정보를 Amazon RDS DB 인스턴스로 전송하는 스크립트를 실행할 수 있습니다.

**참고**  
1GiB 이상의 데이터베이스인 경우, 데이터베이스 스키마만 스크립팅하는 것이 더 효율적입니다. 그런 다음 가져오기 및 내보내기 마법사 또는 SQL Server의 대량 복사 기능을 사용하여 데이터를 전송합니다.

스크립트 생성 및 게시 마법사에 대한 자세한 정보는 [Microsoft SQL Server 문서](http://msdn.microsoft.com/en-us/library/ms178078%28v=sql.105%29.aspx)을(를) 참조하십시오.

마법사에서는 특히 [**스크립팅 옵션 설정**] 페이지의 고급 옵션에 주의하여 스크립트에 포함하려는 모든 것이 선택되어 있는지 확인하십시오. 예를 들어 데이터베이스 트리거는 기본적으로 스크립트에 포함되지 않습니다.

스크립트가 생성되고 저장되면 SQL Server Management Studio를 사용하여 DB 인스턴스에 연결한 후 스크립트를 실행할 수 있습니다.

#### 가져오기 및 내보내기 마법사
<a name="ImportData.SQLServer.MgmtStudio.ImportExportWizard"></a>

가져오기 및 내보내기 마법사는 특별한 통합 서비스 패키지를 만드는데, 이 패키지를 사용하여 로컬 SQL Server 데이터베이스에서 대상 DB 인스턴스로 데이터를 복사할 수 있습니다. 이 마법사에서는 대상 DB 인스턴스로 어떤 테이블, 심지어 테이블 내에 있는 어떤 튜플을 복사할지 필터링할 수 있습니다.

**참고**  
가져오기 및 내보내기 마법사는 큰 데이터 집합에 매우 효과적이지만, 로컬 배포 위치에서 원격으로 데이터를 내보내는 가장 빠른 방법은 아닐 수도 있습니다. 훨씬 더 빠른 방법을 원한다면, SQL Server 대량 복사 기능을 고려하십시오.

가져오기 및 내보내기 마법사에 대한 자세한 내용은 [Microsoft SQL Server 문서](http://msdn.microsoft.com/en-us/library/ms140052%28v=sql.105%29.aspx)를 참조하십시오.

이 마법사의 [**대상 선택**] 페이지에서 다음을 수행합니다.
+ [**서버 이름**]에 DB 인스턴스의 엔드포인트 이름을 입력합니다.
+ 서버 인증 모드를 위해 [**SQL Server 인증 사용**]을 선택합니다.
+ [**사용자 이름**] 및 [**암호**]에 DB 인스턴스용으로 만든 마스터 사용자의 자격 증명을 입력합니다.

#### 대량 복사
<a name="ImportData.SQLServer.MgmtStudio.BulkCopy"></a>

SQL Server 대량 복사 기능은 원본 데이터베이스에서 DB 인스턴스로 데이터를 복사하는 효율적인 수단입니다. 대량 복사는 ASCII 파일과 같은 데이터 파일에 사용자가 지정하는 데이터를 쓰는 기능입니다. 대량 복사를 다시 실행하여 파일의 내용을 대상 DB 인스턴스에 쓸 수 있습니다.

이 섹션에서는 모든 SQL Server 버전에 포함되어 있는 **bcp** 유틸리티를 사용합니다. 대량 가져오기 및 내보내기 작업에 대한 자세한 정보는 [Microsoft SQL Server 문서](http://msdn.microsoft.com/en-us/library/ms187042%28v=sql.105%29.aspx)를 참조하십시오.

**참고**  
대량 복사 기능을 사용하기 전에, 우선 데이터베이스 스키마를 대상 DB 인스턴스로 가져와야 합니다. 이 주제의 앞 부분에서 설명한 스크립트 생성 및 게시 마법사는 이 목적으로 사용하기에 훌륭한 도구입니다.

다음 명령은 로컬 SQL Server 인스턴스에 연결합니다. 그러면 기존 SQL Server 배포의 C:\$1 루트 디렉터리에 지정된 테이블의 탭으로 구분된 파일이 생성됩니다. 테이블은 정규화된 이름으로 지정되고, 텍스트 파일은 복사되는 테이블과 이름이 같습니다.

```
bcp dbname.schema_name.table_name out C:\table_name.txt -n -S localhost -U username -P password -b 10000 
```

앞에 나온 코드에는 다음 옵션이 포함됩니다.
+ `-n`은 대량 복사에서 복사되는 데이터의 기본 데이터 형식을 사용할 것임을 지정합니다.
+ `-S`는 *bcp* 유틸리티가 연결할 SQL Server 인스턴스를 지정합니다.
+ `-U`는 SQL Server 인스턴스에 로그인할 계정의 사용자 이름을 지정합니다.
+ `-P`는 로 지정된 사용자의 암호를 지정합니다.`-U`
+ `-b`는 가져온 데이터의 배치당 행 수를 지정합니다.

**참고**  
가져오기 작업에 중요한 다른 파라미터가 있을 수 있습니다. 예를 들어, 자격 증명 값에 속한 `-E` 파라미터가 필요할 수 있습니다. 자세한 내용은 [Microsoft SQL Server 문서](http://msdn.microsoft.com/en-us/library/ms162802%28v=sql.105%29.aspx)에서 **bcp** 유틸리티 관련 명령줄 구문에 대한 상세 설명을 참조하십시오.

예를 들어 기본 스키마 `store`를 사용하는 `dbo`라는 이름의 데이터베이스에 `customers`라는 이름의 테이블이 있다고 가정합시다. 암호가 `admin`인 사용자 계정 `insecure`이 `customers` 테이블에서 10,000개의 행을 `customers.txt`라는 파일로 복사합니다.

```
bcp store.dbo.customers out C:\customers.txt -n -S localhost -U admin -P insecure -b 10000 
```

데이터 파일을 생성한 후 비슷한 명령을 사용하여 DB 인스턴스에 데이터를 업로드할 수 있습니다. 사전에 대상 DB 인스턴스에서 데이터베이스 및 스키마를 생성하십시오. 출력 파일을 지정하는 `in` 대신 입력 파일을 지정하는 `out` 인수를 사용합니다. 로컬 SQL Server 인스턴스를 지정하기 위해 localhost를 사용하는 대신, DB 인스턴스의 엔드포인트를 지정합니다. 1433 이외의 포트를 사용하는 경우 그 포트도 지정합니다. 사용자 이름과 암호는 DB 인스턴스에 대한 마스터 사용자와 암호가 됩니다. 구문은 다음과 같습니다.

```
bcp dbname.schema_name.table_name 
					in C:\table_name.txt -n -S endpoint,port -U master_user_name -P master_user_password -b 10000
```

이전 예제를 진행하기 위해, 마스터 사용자 이름이 `admin`이고 암호가 `insecure`라고 가정합니다. DB 인스턴스의 엔드포인트는 `rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com`이고, 포트 4080을 사용합니다. 명령은 다음과 같습니다.

```
bcp store.dbo.customers in C:\customers.txt -n -S rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com,4080 -U admin -P insecure -b 10000 
```

**참고**  
보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

## RDS for SQL Server에서 데이터 내보내기
<a name="SQLServer.Procedural.Exporting"></a>

다음 옵션 중 하나를 선택하여 RDS for SQL Server DB 인스턴스에서 데이터를 내보낼 수 있습니다.
+ **전체 백업 파일(.bak)을 사용한 기본 데이터베이스 백업** – .bak 파일을 사용하여 데이터베이스를 백업하는 과정은 철저히 최적화되어 있으며, 대개의 경우 데이터를 가장 빨리 내보내는 방법입니다. 자세한 내용은 [기본 백업 및 복원 기능을 사용하여 SQL Server 데이터베이스 가져오기 및 내보내기](SQLServer.Procedural.Importing.md) 섹션을 참조하세요.
+ **SQL Server 가져오기 및 내보내기 마법사** – 자세한 내용은 [SQL Server 가져오기 및 내보내기 마법사](#SQLServer.Procedural.Exporting.SSIEW) 섹션을 참조하세요.
+ **SQL Server 스크립트 생성 및 게시 마법사와 bcp 유틸리티** – 자세한 내용은 [SQL Server 스크립트 생성 및 게시 마법사와 bcp 유틸리티](#SQLServer.Procedural.Exporting.SSGPSW) 섹션을 참조하세요.

### SQL Server 가져오기 및 내보내기 마법사
<a name="SQLServer.Procedural.Exporting.SSIEW"></a>

SQL Server 가져오기 및 내보내기 마법사를 사용하여 RDS for SQL Server DB 인스턴스에서 다른 데이터 스토어로 하나 이상의 테이블, 보기 또는 쿼리를 복사할 수 있습니다. 대상 데이터 스토어가 SQL Server가 아닌 경우 이 방법이 가장 좋습니다. 자세한 내용은 SQL Server 문서의 [SQL Server 가져오기 및 내보내기 마법사](http://msdn.microsoft.com/en-us/library/ms141209%28v=sql.110%29.aspx)를 참조하십시오.

SQL Server 가져오기 및 내보내기 마법사는 Microsoft SQL Server Management Studio의 일부로 제공됩니다. 이 그래픽 SQL Server 클라이언트는 Express Edition을 제외한 모든 Microsoft SQL Server 버전에 포함됩니다. SQL Server Management Studio는 Windows 기반 애플리케이션으로만 사용할 수 있습니다. SQL Server Management Studio Express는 Microsoft에서 무료 다운로드로 사용할 수 있습니다. 다운로드에 관해서는 [Microsoft 웹 사이트](http://www.microsoft.com/en-us/search/Results.aspx?q=sql%20server%20management%20studio)을(를) 참조하십시오.

**SQL Server 가져오기 및 내보내기 마법사를 사용하여 데이터를 내보내려면**

1. SQL Server Management Studio에서 RDS for SQL Server DB 인스턴스에 연결합니다. 이 작업을 수행하는 자세한 방법은 [Microsoft SQL Server DB 인스턴스에 연결](USER_ConnectToMicrosoftSQLServerInstance.md) 단원을 참조하십시오.

1. [**개체 탐색기**]에서 [**데이터베이스**]를 확장하고, 원본 데이터베이스에 대한 컨텍스트 메뉴를 마우스 오른쪽 버튼을 클릭하여 열고, [**작업**]을 선택한 다음, [**데이터 내보내기**]를 선택합니다. 그러면 마법사가 표시됩니다.

1. [**데이터 소스 선택**] 페이지에서 다음을 수행합니다.

   1. **Data source(데이터 원본)**에 **SQL Server Native Client 11.0**을 선택합니다.

   1. [**서버 이름(Server name)**] 상자에 RDS for SQL Server DB 인스턴스의 엔드포인트가 표시되는지 확인합니다.

   1. [**SQL 서버 인증 사용**]을 선택합니다. [**사용자 이름(User name)**] 및 [**암호(Password)**]에서 DB 인스턴스의 마스터 사용자 이름과 암호를 입력합니다.

   1. [**데이터베이스**] 상자에 데이터를 내보내려는 원본 데이터베이스가 표시되는지 확인합니다.

   1. **다음**을 선택합니다.

1. [**대상 선택**] 페이지에서 다음을 수행합니다.

   1. **Destination(대상)**에 **SQL Server Native Client 11.0**을 선택합니다.
**참고**  
다른 대상 데이터 원본을 사용할 수 있습니다. 여기에는 .NET Framework 데이터 공급자, OLE DB 공급자, SQL Server Native Client 공급자, ADO.NET 공급자, Microsoft Office Excel, Microsoft Office Access 및 Flat File 소스 등이 포함됩니다. 이러한 데이터 원본 중 하나를 대상으로 선택한 경우 나머지 4단계를 건너뛰십시오. 다음에 제공할 연결 정보에 대한 자세한 내용은 SQL Server 문서의 [대상 선택](http://msdn.microsoft.com/en-us/library/ms178430%28v=sql.110%29.aspx)을 참조하십시오.

   1. [**서버 이름**]에 대상 SQL Server DB 인스턴스의 서버 이름을 입력합니다.

   1. 알맞은 인증 유형을 선택합니다. 필요한 경우 사용자 이름과 암호를 입력합니다.

   1. [**데이터베이스**]에서 대상 데이터베이스의 이름을 선택하거나, [**새로 만들기**]를 선택하여 내보낸 데이터를 포함하는 새 데이터베이스를 만듭니다.

      **새로 만들기**를 선택하는 경우, 제공할 데이터베이스 정보에 대한 자세한 내용은 SQL Server 문서의 [데이터베이스 생성](http://msdn.microsoft.com/en-us/library/ms183323%28v=sql.110%29.aspx)을 참조하십시오.

   1. **다음**을 선택합니다.

1. [**테이블 복사 또는 쿼리**] 페이지에서 [**하나 이상의 테이블 또는 뷰에서 데이터 복사**] 또는 [**전송 데이터를 지정할 쿼리 작성**]을 선택합니다. **다음**을 선택합니다.

1. [**전송 데이터를 지정할 쿼리 작성**]을 선택한 경우 [**원본 쿼리 지정**] 페이지가 표시됩니다. SQL 쿼리를 입력하거나 붙여 넣은 다음, [**구문 분석**]을 선택하여 확인합니다. 쿼리 유효성 검사가 끝나면 [**다음**]을 선택합니다.

1. [**원본 테이블 및 뷰 선택**] 페이지에서 다음을 수행합니다.

   1. 내보내려는 테이블과 뷰를 선택하거나 사용자가 입력한 쿼리가 선택되어 있는지 확인합니다.

   1. [**매핑 편집**]을 선택하고 데이터베이스 및 열 매핑 정보를 지정합니다. 자세한 내용은 SQL Server 문서의 [열 매핑](http://msdn.microsoft.com/en-us/library/ms189660%28v=sql.110%29.aspx)을 참조하십시오.

   1. (선택 사항) 내보낼 데이터의 미리 보기를 확인하려면 테이블, 뷰 또는 쿼리를 선택한 후 [**미리 보기**]를 선택합니다.

   1. **다음**을 선택합니다.

1. [**패키지 실행**] 페이지에서 [**즉시 실행**]이 선택되어 있는지 확인합니다. **다음**을 선택합니다.

1. [**마법사 완료**] 페이지에서 데이터 내보내기 세부 정보가 예상한 대로인지 확인합니다. [**마침**]을 클릭합니다.

1. [**실행이 성공했습니다.**] 페이지에서 [**닫기**]를 선택합니다.

### SQL Server 스크립트 생성 및 게시 마법사와 bcp 유틸리티
<a name="SQLServer.Procedural.Exporting.SSGPSW"></a>

SQL Server 스크립트 생성 및 게시 마법사를 사용하여 데이터베이스 전체 또는 선택한 개체만을 위한 스크립트를 작성할 수 있습니다. 대상 SQL Server DB 인스턴스에서 이런 스크립트를 실행하여 스크립팅된 객체를 다시 만들 수 있습니다. 그런 다음, bcp 유틸리티를 사용하여 선택한 객체에 대한 데이터를 대상 DB 인스턴스로 대량으로 내보낼 수 있습니다. (테이블 이외의 객체를 포함한) 전체 데이터베이스를 이동하거나 두 SQL Server DB 인스턴스 사이에서 대량의 데이터를 이동하려는 경우에 이 마법사를 선택하는 것이 최선입니다. bcp 명령줄 구문에 대한 전체 설명은 Microsoft SQL Server 문서의 [bcp 유틸리티](http://msdn.microsoft.com/en-us/library/ms162802%28v=sql.110%29.aspx)를 참조하십시오.

SQL Server 스크립트 생성 및 게시 마법사는 Microsoft SQL Server Management Studio의 일부로 제공됩니다. 이 그래픽 SQL Server 클라이언트는 Express Edition을 제외한 모든 Microsoft SQL Server 버전에 포함됩니다. SQL Server Management Studio는 Windows 기반 애플리케이션으로만 사용할 수 있습니다. SQL Server Management Studio Express는 Microsoft에서 [무료 다운로드](http://www.microsoft.com/en-us/search/Results.aspx?q=sql%20server%20management%20studio)로 사용할 수 있습니다.

**SQL Server 스크립트 생성 및 게시 마법사와 bcp 유틸리티를 사용하여 데이터를 내보내려면**

1. SQL Server Management Studio에서 RDS for SQL Server DB 인스턴스에 연결합니다. 이 작업을 수행하는 자세한 방법은 [Microsoft SQL Server DB 인스턴스에 연결](USER_ConnectToMicrosoftSQLServerInstance.md) 단원을 참조하십시오.

1. [**개체 탐색기**]에서 [**데이터베이스**] 노드를 확장하고 스크립팅하려는 데이터베이스를 선택합니다.

1. 스크립트 파일을 만들려면 SQL Server 문서의 [스크립트 생성 및 게시 마법사](http://msdn.microsoft.com/en-us/library/bb895179%28v=sql.110%29.aspx)에 설명되어 있는 지침을 따르십시오.

1. SQL Server Management Studio에서 대상 SQL Server DB 인스턴스에 연결합니다.

1. **객체 탐색기(Object Explorer)**에서 대상 SQL Server DB 인스턴스를 선택한 상태에서 **파일(File)** 메뉴에서 **열기(Open)**를 선택하고, **파일(File)**을 선택한 후 스크립트 파일을 엽니다.

1. 전체 데이터베이스를 스크립팅한 경우 스크립트에서 CREATE DATABASE 문을 검토하십시오. 데이터베이스가 원하는 위치 및 파라미터로 작성되고 있는지 확인하십시오. 자세한 정보는 SQL Server 문서의 [CREATE DATABASE](http://msdn.microsoft.com/en-us/library/ms176061%28v=sql.110%29.aspx)를 참조하십시오.

1. 스크립트에서 데이터베이스 사용자를 만들 경우 대상 DB 인스턴스에 해당 사용자에 대한 서버 로그인이 존재하는지 확인합니다. 존재하지 않을 경우 해당 사용자에 대한 로그인을 만듭니다. 그렇지 않으면, 데이터베이스 사용자를 만들기 위해 스크립팅된 명령이 실패합니다. 자세한 정보는 SQL Server 문서의 [로그인 생성](http://msdn.microsoft.com/en-us/library/aa337562%28v=sql.110%29.aspx)을 참조하십시오.

1. SQL 편집기 메뉴에서 **\$1Execute**를 선택하여 스크립트 파일을 실행하고 데이터베이스 개체를 생성합니다. 스크립트가 완료되면 모든 데이터베이스 개체가 예상한 대로 존재하는지 확인합니다.

1. bcp 유틸리티를 사용하여 RDS for SQL Server DB 인스턴스에서 파일로 데이터를 내보냅니다. 명령 프롬프트를 열고 다음 명령을 입력합니다.

   ```
   bcp database_name.schema_name.table_name out data_file -n -S aws_rds_sql_endpoint -U username -P password
   ```

   앞에 나온 코드에는 다음 옵션이 포함됩니다.
   + *table\$1name*은 대상 데이터베이스에서 다시 만들어 이제 데이터를 채우려는 테이블 중 하나의 이름입니다.
   + *data\$1file*은 만들 데이터 파일의 전체 경로와 이름입니다.
   + `-n`은 대량 복사에서 복사되는 데이터의 기본 데이터 형식을 사용할 것임을 지정합니다.
   + `-S`는 데이터를 내보낼 원본 SQL Server DB 인스턴스를 지정합니다.
   + `-U`는 SQL Server DB 인스턴스에 연결할 때 사용할 사용자 이름을 지정합니다.
   + `-P`는 로 지정된 사용자의 암호를 지정합니다.`-U`

   다음은 명령의 예시입니다.

   ```
   bcp world.dbo.city out C:\Users\JohnDoe\city.dat -n -S sql-jdoe.1234abcd.us-west-2.rds.amazonaws.com,1433 -U JohnDoe -P ClearTextPassword
   ```

   내보낼 모든 테이블에 대한 데이터 파일을 확보할 때까지 이 단계를 반복하십시오.

1. SQL Server 문서의 [대량 데이터 가져오기 준비](http://msdn.microsoft.com/en-us/library/ms189989%28v=sql.110%29.aspx)에 설명되어 있는 지침에 따라 대량 데이터 가져오기를 위해 대상 DB 인스턴스를 준비하십시오.

1. SQL Server 문서의 [대량 가져오기 및 내보내기 작업 정보](http://msdn.microsoft.com/en-us/library/ms187042%28v=sql.105%29.aspx)에 설명되어 있는 성능 및 기타 문제를 고려한 후 사용할 대량 가져오기 방법을 결정하십시오.

1. bcp 유틸리티를 사용하여 생성한 데이터 파일에서 데이터를 대량으로 가져옵니다. 그러려면 11단계에서 결정한 바에 따라, SQL Server 문서의 [bcp 유틸리티를 사용하여 대량 데이터 가져오기 및 내보내기](http://msdn.microsoft.com/en-us/library/aa337544%28v=sql.110%29.aspx) 또는 [BULK INSERT 또는 OPENROWSET(BULK...)를 사용하여 대량 데이터 가져오기](http://msdn.microsoft.com/en-us/library/ms175915%28v=sql.110%29.aspx)에 설명되어 있는 지침에 따르십시오.

# Linux의 BCP 유틸리티를 사용하여 데이터 가져오기 및 내보내기
<a name="SQLServer.Procedural.Importing.BCP.Linux"></a>

Bulk Copy Program(BCP) 유틸리티는 RDS for SQL Server DB 인스턴스와 데이터 파일 간에 대량의 데이터를 전송하는 효율적인 방법을 제공합니다. Linux 환경의 BCP를 사용하여 일괄 데이터 작업을 수행할 수 있으므로 데이터 마이그레이션, ETL 프로세스 및 정기적인 데이터 전송에 유용합니다.

BCP는 파일에서 SQL Server 테이블로 데이터를 가져오고 SQL Server 테이블에서 파일로 데이터를 내보내는 것을 모두 지원합니다. 이는 구분된 텍스트 파일을 포함한 다양한 형식의 정형 데이터를 전송하는 데 특히 효과적입니다.

## 사전 조건
<a name="SQLServer.Procedural.Importing.BCP.Linux.Prerequisites"></a>

Linux에서 RDS for SQL Server DB 인스턴스와 함께 BCP를 사용하기 전에 다음 사항이 있는지 확인합니다.
+ RDS for SQL Server DB 인스턴스에 네트워크로 연결된 Linux 환경
+ 다음을 포함하여 Linux 시스템에 설치된 Microsoft SQL Server 명령줄 도구:
  + sqlcmd - SQL Server 명령줄 쿼리 도구
  + bcp - Bulk Copy Program 유틸리티
+ RDS for SQL Server DB 인스턴스에 유효한 자격 증명
+ SQL Server 포트(일반적으로 1433)에서 연결을 허용하도록 보안 그룹을 통해 구성된 네트워크 액세스
+ 수행하려는 작업에 대한 적절한 데이터베이스 권한

## Linux에 SQL Server 명령줄 도구 설치
<a name="SQLServer.Procedural.Importing.BCP.Linux.Installing"></a>

Linux의 BCP를 사용하려면 Microsoft SQL Server 명령줄 도구를 설치해야 합니다. 특정 Linux 배포에 대한 자세한 설치 지침은 다음 Microsoft 설명서를 참조하세요.
+ [Install sqlcmd and bcp the SQL Server command-line tools on Linux](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools)
+ [bcp utility](https://docs.microsoft.com/en-us/sql/tools/bcp-utility) - BCP 유틸리티에 대한 전체 참조 문서

설치 후 다음을 실행하여 PATH에서 도구를 사용할 수 있는지 확인합니다.

```
bcp -v
sqlcmd -?
```

## RDS for SQL Server에서 데이터 내보내기
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting"></a>

BCP를 사용하여 RDS for SQL Server DB 인스턴스의 데이터를 Linux 시스템의 파일로 내보낼 수 있습니다. 이는 백업 생성, 데이터 분석 또는 마이그레이션을 위한 데이터 준비에 유용합니다.

### 기본 내보내기 구문
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting.Basic"></a>

BCP를 사용하여 데이터를 내보내는 기본 구문은 다음과 같습니다.

```
bcp database.schema.table out output_file -S server_name -U username -P password [options]
```

위치:
+ `database.schema.table` - 정규화된 테이블 이름
+ `output_file` - 출력 파일의 경로 및 이름
+ `server_name` - RDS for SQL Server 엔드포인트
+ `username` - 데이터베이스 사용자 이름
+ `password` - 데이터베이스 암호

### 내보내기 예시
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting.Example"></a>

다음 예시에서는 `sales` 데이터베이스의 `customers` 테이블에서 데이터를 내보냅니다.

```
bcp sales.dbo.customers out /home/user/customers.txt \
    -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \
    -U admin \
    -P mypassword \
    -c \
    -t "|" \
    -r "\n"
```

이 명령은 다음을 수행합니다.
+ `customers` 테이블에서 데이터 내보내기
+ 출력을 `/home/user/customers.txt`에 저장
+ 문자 형식(`-c`) 사용
+ 파이프(\$1)를 필드 구분 기호(`-t "|"`)로 사용
+ 줄 바꿈을 행 구분 기호(`-r "\n"`)로 사용

## RDS for SQL Server로 데이터 가져오기
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing"></a>

BCP를 사용하여 Linux 시스템의 파일에서 RDS for SQL Server DB 인스턴스로 데이터를 가져올 수 있습니다. 이는 데이터 마이그레이션, 테스트 데이터 로드 또는 정기적인 데이터 업데이트에 유용합니다.

### 기본 가져오기 구문
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing.Basic"></a>

BCP를 사용하여 데이터를 가져오는 기본 구문은 다음과 같습니다.

```
bcp database.schema.table in input_file -S server_name -U username -P password [options]
```

위치:
+ `database.schema.table` - 정규화된 대상 테이블 이름
+ `input_file` - 입력 파일의 경로 및 이름
+ `server_name` - RDS for SQL Server 엔드포인트
+ `username` - 데이터베이스 사용자 이름
+ `password` - 데이터베이스 암호

### 가져오기 예시
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing.Example"></a>

다음 예시에서는 파일에서 `customers` 테이블로 데이터를 가져옵니다.

```
bcp sales.dbo.customers in /home/user/customers.txt \
    -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \
    -U admin \
    -P mypassword \
    -c \
    -t "|" \
    -r "\n" \
    -b 1000
```

이 명령은 다음을 수행합니다.
+ 데이터를 `customers` 테이블로 가져오기
+ `/home/user/customers.txt`에서 데이터를 읽습니다.
+ 문자 형식(`-c`) 사용
+ 파이프(\$1)를 필드 구분 기호(`-t "|"`)로 사용
+ 줄 바꿈을 행 구분 기호(`-r "\n"`)로 사용
+ 1,000개 행의 배치로 데이터 처리(`-b 1000`)

## 일반적인 BCP 옵션
<a name="SQLServer.Procedural.Importing.BCP.Linux.Options"></a>

BCP는 데이터 형식 지정 및 전송 동작을 제어하는 다양한 옵션을 제공합니다. 다음 표에 일반적으로 사용되는 옵션이 설명되어 있습니다.


| 옵션 | 설명 | 
| --- | --- | 
| -c | 모든 열에 문자 데이터 유형 사용 | 
| -n | 기본 데이터베이스 데이터 유형 사용 | 
| -t | 필드 구분 기호 지정(기본값은 탭) | 
| -r | 행 구분 기호 지정(기본값은 줄 바꿈) | 
| -b | 일괄 작업의 배치 크기 지정 | 
| -F | 내보내거나 가져올 첫 번째 행 지정 | 
| -L | 내보내거나 가져올 마지막 행 지정 | 
| -e | 거부된 행을 캡처할 오류 파일 지정 | 
| -f | 데이터 형식 지정을 위한 형식 파일 지정 | 
| -q | 객체 이름에 따옴표로 묶인 식별자 사용 | 

## 모범 사례 및 고려 사항
<a name="SQLServer.Procedural.Importing.BCP.Linux.BestPractices"></a>

Linux에서 RDS for SQL Server와 함께 BCP를 사용하는 경우 다음 모범 사례를 고려하세요.
+ **배치 처리 사용** - 대규모 데이터세트의 경우 `-b` 옵션을 사용하여 데이터를 배치로 처리합니다. 이렇게 하면 성능이 개선되고 오류 복구가 개선됩니다.
+ **적절한 오류 처리** - `-e` 옵션을 사용하여 분석을 위해 오류 정보와 거부된 행을 별도의 파일로 캡처합니다.
+ **적절한 데이터 형식 선택** - 교차 플랫폼 호환성을 위해 문자 형식(`-c`)을 사용하거나 소스와 대상이 모두 SQL Server인 경우 더 나은 성능을 위해 기본 형식(`-n`)을 사용합니다.
+ **자격 증명 보호** - 암호를 명령줄에 직접 입력하지 마세요. 적절한 권한이 있는 환경 변수 또는 구성 파일을 사용하는 것이 좋습니다.
+ **작은 데이터세트로 테스트** - 대량의 데이터를 처리하기 전에 작은 데이터세트로 BCP 명령을 테스트하여 형식 지정 및 연결을 확인합니다.
+ **네트워크 연결 모니터링** - 특히 대규모 데이터 전송의 경우 안정적인 네트워크 연결을 보장합니다. 장기 실행 작업에는 `screen` 또는 `tmux`와 같은 도구를 사용하는 것이 좋습니다.
+ **데이터 무결성 검증** - 데이터 전송 후 행 수와 샘플 데이터를 확인하여 작업이 성공적으로 완료되었는지 확인합니다.

## 일반적인 문제 해결
<a name="SQLServer.Procedural.Importing.BCP.Linux.Troubleshooting"></a>

다음 표에는 Linux의 BCP 및 해당 솔루션을 사용할 때 발생할 수 있는 일반적인 문제가 설명되어 있습니다.


| 문제 | Solution | 
| --- | --- | 
| 연결 제한 시간 초과 또는 네트워크 오류 | Amazon RDS 엔드포인트, 보안 그룹 설정 및 네트워크 연결을 확인합니다. Linux 시스템에서 SQL Server 포트(일반적으로 1433)에 액세스할 수 있는지 확인합니다. | 
| 인증 실패 횟수 | 사용자 이름과 암호를 확인합니다. 데이터베이스 사용자에게 수행 중인 작업에 대한 적절한 권한이 있는지 확인합니다. | 
| 데이터 형식 오류 | 필드와 행 구분 기호를 확인합니다. 데이터 형식이 BCP에서 요구하는 것과 일치하는지 확인합니다. 복잡한 데이터 구조에 형식 파일을 사용합니다. | 
| 권한 거부 오류 | 데이터베이스 사용자에게 대상 테이블에 대한 가져오기의 경우 INSERT 권한, 내보내기의 경우 SELECT 권한이 있는지 확인합니다. | 
| 대용량 파일 처리 문제 | -b 옵션과 함께 배치 처리를 사용합니다. 성능 향상 및 오류 복구를 위해 대용량 파일을 더 작은 묶음으로 분할하는 것이 좋습니다. | 
| 문자 인코딩 문제 | 데이터 파일이 호환되는 문자 인코딩을 사용하는지 확인합니다. 문자 형식에 -c 옵션을 사용하거나 적절한 코드 페이지를 지정합니다. | 