

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# DMS Schema Conversion의 메타데이터 모델
<a name="sc-metadata-model"></a>

DMS Schema Conversion으로 작업하는 경우 서비스는 데이터베이스 스키마를 계층적 트리로 나타냅니다. 이 트리를 *메타데이터 트리*라고 하며 소스 스키마와 대상 스키마 모두에 적용됩니다. 루트 요소(“서버”)를 포함하여 트리의 각 요소는 메타데이터 모델입니다.

메타데이터 트리에는 두 가지 종류의 요소가 포함되어 있습니다.
+ **객체 **- 테이블, 함수, 뷰, 시퀀스 및 인덱스와 같은 실제 데이터베이스 객체를 나타냅니다. [DescribeMetadataModel](https://docs.aws.amazon.com/dms/latest/APIReference/API_DescribeMetadataModel.html) 요청을 사용하여 객체의 SQL 정의를 검색할 수 있습니다.
+ **범주** - "Schemas", "Tables", "Functions" 및 "Indexes"와 같은 가상 그룹화 컨테이너입니다. 범주는 탐색을 위해 트리에 객체를 구성하지만 SQL 정의 자체는 없습니다.

메타데이터 트리는 사용자가 요청할 때만 데이터를 로드합니다. 이 접근 방식을 온디맨드 로드(느린 로드라고도 함)라고 합니다. 즉, DMS Schema Conversion은 필요한 경우에만 데이터베이스에서 데이터를 검색합니다. 가져오기 작업을 사용하여 특정 메타데이터 모델을 새로 고치거나 한 번에 전체 하위 트리를 가져와 메타데이터를 로드합니다. 평가 및 변환과 같은 작업도 메타데이터 트리를 자동으로 로드합니다.

## 메타데이터 모델의 작동 방식
<a name="sc-metadata-model-how-it-works"></a>

DMS Schema Conversion의 메타데이터 모델은 작업 수명 주기를 따릅니다. 메타데이터 트리를 수정하는 작업(예: 가져오기 및 변환)은 비동기식입니다. 이러한 작업에 대한 요청을 시작하면 백그라운드에서 실행됩니다. 해당 설명 API를 호출하여 요청 상태를 확인합니다. 트리를 읽는 작업(예: 하위 항목 또는 정의 설명)은 동기식입니다.

**참고**  
DMS Schema Conversion에서는 *작업* 및 *요청*이라는 용어가 상호 교환적으로 사용됩니다.

일반적인 워크플로에는 다음 단계가 포함됩니다.

1. **가져오기** - 소스 또는 대상 데이터베이스의 메타데이터를 메타데이터 트리에 로드합니다. 초기 메타데이터 모델을 로드하거나 데이터베이스에서 기존 모델을 다시 로드할 수 있습니다. 자세한 내용은 [트리 탐색](#sc-metadata-model-navigating) 단원을 참조하십시오. API 참조는 [StartMetadataModelImport](https://docs.aws.amazon.com/dms/latest/APIReference/API_StartMetadataModelImport.html)를 참조하세요.

1. **평가** - 선택한 소스 메타데이터 모델을 분석하여 변환 복잡성과 잠재적 문제를 식별합니다. 자세한 내용은 [DMS Schema Conversion을 사용하여 데이터베이스 마이그레이션 평가 보고서 생성](assessment-reports.md) 단원을 참조하십시오.

1. **변환** - 선택한 소스 메타데이터 모델을 대상 호환 형식으로 변환합니다. 변환된 정의는 대상 메타데이터 트리의 일부로 저장됩니다. 자세한 내용은 [DMS Schema Conversion에서 데이터베이스 스키마 변환: step-by-step 가이드](schema-conversion-convert.md) 단원을 참조하십시오.

1. **내보내기** - 메타데이터 정의를 저장합니다. 소스 메타데이터와 대상 메타데이터를 모두 SQL 스크립트로 Amazon S3 버킷으로 내보낼 수 있습니다. 가상이 아닌 대상의 경우 변환된 객체를 대상 데이터베이스에 직접 적용할 수도 있습니다. 가상 대상에 대한 자세한 내용은 섹션을 참조하세요[가상 데이터 공급자](virtual-data-provider.md). 변환된 객체 적용에 대한 자세한 내용은 섹션을 참조하세요[변환된 코드 적용](schema-conversion-save-apply.md#schema-conversion-apply).

소스 메타데이터 모델을 평가하거나 변환한 후 평가 보고서를 생성하여 결과를 검토할 수 있습니다. 자세한 내용은 [DMS Schema Conversion을 사용하여 데이터베이스 마이그레이션 평가 보고서 생성](assessment-reports.md) 단원을 참조하십시오.

지원되는 마이그레이션 페어의 경우 [StartMetadataModelCreation](https://docs.aws.amazon.com/dms/latest/APIReference/API_StartMetadataModelCreation.html)을 사용하여 SQL 정의에서 사용자 지정 문 메타데이터 모델을 생성할 수도 있습니다. 자세한 내용은 [문 모델 생성](#sc-metadata-model-creation) 단원을 참조하십시오.

## 메타데이터 모델 트리 탐색
<a name="sc-metadata-model-navigating"></a>

다음 API 요청을 사용하여 메타데이터 트리를 탐색할 수 있습니다.
+ [DescribeMetadataModelChildren](https://docs.aws.amazon.com/dms/latest/APIReference/API_DescribeMetadataModelChildren.html) - 지정된 메타데이터 모델의 하위 요소를 반환합니다. 각 하위 항목에는 심층 분석을 위해 다음 호출에 전달할 수 있는 선택 규칙(특정 메타데이터 모델을 식별하는 필터)이 포함되어 있습니다.
+ [DescribeMetadataModel](https://docs.aws.amazon.com/dms/latest/APIReference/API_DescribeMetadataModel.html) - 특정 메타데이터 모델의 이름, 유형 및 SQL 정의를 반환합니다.

두 요청 모두 `Origin` 파라미터(`SOURCE` 또는 `TARGET`)가 필요하며 선택 규칙을 사용하여 메타데이터 모델을 식별합니다. 탐색 패턴은 소스 트리와 대상 트리 모두에서 동일합니다. 선택 규칙 형식에 대한 자세한 내용은 섹션을 참조하세요[DMS Schema Conversion의 선택 규칙](sc-selection-rules.md).

원하는 인터페이스를 선택하여 탐색 지침을 봅니다.

------
#### [ AWS Management Console ]

스키마 변환 프로젝트를 연 후 소스 메타데이터 트리와 대상 메타데이터 트리를 모두 찾아볼 수 있습니다. 프로젝트 열기에 대한 자세한 내용은 섹션을 참조하세요[DMS Schema Conversion에서 데이터베이스 스키마 변환: step-by-step 가이드](schema-conversion-convert.md).

콘솔에는 왼쪽에 소스 트리, 오른쪽에 대상 트리라는 두 개의 트리 패널이 표시됩니다. 각 패널은 데이터베이스 엔진, 작업 메뉴 및 메타데이터 트리 자체를 보여주는 헤더로 구성됩니다.

작업 메뉴는 컨텍스트에 따라 다릅니다. 모든 메타데이터 모델에 사용 가능한 모든 작업이 있는 것은 아닙니다. 소스 트리와 대상 트리의 작업 목록은 다릅니다.

메타데이터 모델의 SQL 정의 및 속성을 보려면 트리에서 선택합니다. 중앙 패널에는 정의가 있는 소스 SQL 및 대상 SQL 탭과 메타데이터 속성이 있는 속성 탭이 표시됩니다. 테이블 및 뷰의 열 또는 루틴의 파라미터와 같은 메타데이터 모델 유형에 따라 추가 탭이 나타날 수 있습니다.

메타데이터 모델의 하위 요소를 확장하려면 옆에 있는 확장 아이콘(검은색 삼각형)을 선택합니다. 확장 아이콘 또는 메타데이터 모델 이름을 선택하여 하위 항목을 자동으로 로드합니다.

변환된 소스 메타데이터 모델을 선택하면 대상 트리 패널에서 해당 대상 메타데이터 모델이 자동으로 선택됩니다.

다음 연습에서는 메타데이터 트리를 탐색하고 메타데이터 모델 정의를 보는 방법을 보여줍니다.

1. 트리 패널에서 서버 옆의 확장 아이콘을 선택하여 데이터베이스 엔진에 따라 **데이터베이스** 또는 **스키마**와 같은 최상위 범주를 표시합니다.

1. 범주를 계속 확장하여 탐색하려는 메타데이터 모델로 이동합니다. 예를 들어 **데이터베이스를** 확장한 다음 특정 데이터베이스를 확장한 다음 **스키마**를 확장하고 스키마 이름을 확장한 다음 **테이블**, **뷰** 또는 **프로**시저와 같은 범주를 확장합니다. 일부 데이터베이스 엔진에는 **데이터베이스** 수준이 없습니다.이 경우 **스키마를** 직접 확장합니다.

1. 메타데이터 모델을 선택하여 중앙 패널에서 해당 SQL 정의를 봅니다. **소스 SQL** 탭에는 소스 정의가 표시되고, 메타데이터 모델이 변환된 경우 **대상 SQL** 탭에는 변환된 정의가 표시됩니다.

------
#### [ AWS CLI ]

메타데이터 트리를 찾아보려면 반복 패턴을 따릅니다. 즉, 수준에서 메타데이터를 가져온 다음 해당 수준의 하위 항목을 설명합니다. 이 프로세스를 반복하여 트리를 자세히 살펴봅니다.

먼저 최상위 메타데이터 모델을 식별하는 선택 규칙을 사용하여 [start-metadata-model-import](https://docs.aws.amazon.com/cli/latest/reference/dms/start-metadata-model-import.html)를 호출합니다. 에 `server-name` 및 최상위`category-name`(데이터베이스 엔진에 `Schemas`따라 `Databases` 또는 )를 포함합니다`object-locator`. 선택 규칙 구조에 대한 자세한 내용은 섹션을 참조하세요[DMS Schema Conversion의 선택 규칙](sc-selection-rules.md).

```
aws dms start-metadata-model-import \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --refresh \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{"server-name":"{{my-server}}","category-name":"{{top-level-category}}"},"rule-action":"explicit"}]}'
```

가져오기 요청은 비동기식입니다. [describe-metadata-model-imports](https://docs.aws.amazon.com/cli/latest/reference/dms/describe-metadata-model-imports.html)를 사용하여 검색 전에 상태를 확인합니다. 에서 반환한 `RequestIdentifier` 값과 함께 `request-id` 필터를 사용하여 특정 가져오기를 `start-metadata-model-import` 찾습니다.

```
aws dms describe-metadata-model-imports \
    --migration-project-identifier "{{my-migration-project}}" \
    --filters Name=request-id,Values={{request-identifier}}
```

가져오기가 완료되면 [describe-metadata-model-children](https://docs.aws.amazon.com/cli/latest/reference/dms/describe-metadata-model-children.html)을 호출하여 해당 수준에서 하위 항목을 검색합니다.

```
aws dms describe-metadata-model-children \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{"server-name":"{{my-server}}"},
      "rule-action":"explicit"}]}'
```

응답의 각 하위 항목에는 `SelectionRules` 필드가 포함됩니다. 다음 가져오기에 이러한 선택 규칙을 전달하고 심층 분석을 위한 호출을 설명합니다.

```
{
    "MetadataModelChildren": [
        {
            "MetadataModelName": "Schemas",
            "SelectionRules": "{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"1\",\"rule-name\":\"1\",\"object-locator\":{\"server-name\":\"src-database-server\",\"category-name\":\"Schemas\"},\"rule-action\":\"explicit\"}]}"
        }
    ]
}
```

다음 수준으로 드릴하려면 이전 `describe-metadata-model-children` 호출에서 반환된 선택 규칙을 사용하여 해당 수준에서를 가져온 다음 하위 항목을 설명합니다.

```
aws dms start-metadata-model-import \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --refresh \
    --selection-rules '{{selection-rules-from-previous-response}}'
```

하위 항목을 설명하기 전에를 사용하여 상태를 확인하여 가져오기가 완료되었는지 확인합니다`describe-metadata-model-imports`. 그런 `describe-metadata-model-children`다음를 호출합니다.

```
aws dms describe-metadata-model-children \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{{selection-rules-from-previous-response}}'
```

응답은 각각 고유한 선택 규칙이 있는 해당 수준의 하위 항목을 반환합니다. 이러한 선택 규칙을 다음 가져오기에 전달하고 호출을 설명하여 트리에 대한 심층 분석을 계속합니다.

```
{
    "MetadataModelChildren": [
        {
            "MetadataModelName": "{{child-name}}",
            "SelectionRules": "{{selection-rules-JSON-string}}"
        }
    ]
}
```

**사용 - 전체 가져오기와 비교하여 새로 고침**

`--refresh`를 사용하여 데이터베이스에서 특정 메타데이터 모델을 다시 로드합니다. 또한 직접 하위 항목의 이름도 로드됩니다. 를 사용하여 이러한 하위 항목을 나열할 수 `describe-metadata-model-children`있지만 더 자세히 설명하거나 찾아보려면 하위 수준에서 다른 가져오기를 실행해야 합니다.

전체 하위 트리(예: 스키마, 데이터베이스 또는 테이블 또는 프로시저와 같은 특정 범주의 모든 객체)를 로드하려면 `--refresh` 플래그를 생략하고 선택 규칙`include`에서를 `rule-action`로 변경합니다.

```
aws dms start-metadata-model-import \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{{{...}}},
      "rule-action":"include"}]}'
```

전체 하위 트리를 로드하는 데는 큰 스키마에 몇 분 또는 몇 시간이 걸릴 수 있으며 데이터베이스에 로드를 배치합니다. 대화형 탐색을 위해 `--refresh`를 사용하고 필요에 따라 특정 브랜치로 드릴합니다.

메타데이터 모델의 SQL 정의를 검색하려면 [describe-metadata-model](https://docs.aws.amazon.com/cli/latest/reference/dms/describe-metadata-model.html)을 사용합니다. 이전 `describe-metadata-model-children` 응답에서 특정 메타데이터 모델을 식별하는 선택 규칙을 전달합니다.

```
aws dms describe-metadata-model \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{{selection-rules-for-target-object}}'
```

응답에는 메타데이터 모델 이름, 유형 및 SQL 정의가 포함됩니다.

```
{
    "MetadataModelName": "employees",
    "MetadataModelType": "table",
    "Definition": "CREATE TABLE hr.employees(\n    id integer NOT NULL,\n    name varchar(100),\n    department_id integer\n);"
}
```

**참고**  
스키마 및 범주와 같은 일부 메타데이터 모델의 경우 `Definition` 필드가 채워지지 않을 수 있습니다.

소스 메타데이터 모델을 변환한 후에는 변환된 정의를 대상 트리에서 사용할 수 있습니다. 세 가지 방법으로 검색할 수 있습니다.

**소스 응답에서 대상 선택 규칙 사용**

변환 후 소스 메타데이터 모델을 설명할 때 응답에는 대상 선택 규칙이 있는 `TargetMetadataModels` 필드가 포함됩니다.

```
{
    "MetadataModelName": "employees",
    "MetadataModelType": "table",
    "TargetMetadataModels": [
        {
            "MetadataModelName": "employees",
            "SelectionRules": "{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"1\",\"rule-name\":\"1\",\"object-locator\":{\"server-name\":\"tgt-database-server\",\"schema-name\":\"hr\",\"table-name\":\"employees\",\"table-type\":\"table\"},\"rule-action\":\"explicit\"}]}"
        }
    ],
    "Definition": "CREATE TABLE hr.employees(\n    id integer NOT NULL,\n    name varchar(100),\n    department_id integer\n);"
}
```

를 사용하여에서 `TargetMetadataModels``describe-metadata-model`로 선택 규칙을 전달합니다`--origin TARGET`.

```
aws dms describe-metadata-model \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin TARGET \
    --selection-rules '{{selection-rules-from-TargetMetadataModels}}'
```

응답에는 대상 엔진 구문에 변환된 SQL 정의가 포함됩니다.

```
{
    "MetadataModelName": "employees",
    "MetadataModelType": "table",
    "Definition": "CREATE TABLE hr.employees (\nid INT NOT NULL,\nname VARCHAR(100) DEFAULT NULL,\ndepartment_id INT DEFAULT NULL,\nPRIMARY KEY (id)\n);"
}
```

**get-target-selection-rules 사용**

[get-target-selection-rules](https://docs.aws.amazon.com/cli/latest/reference/dms/get-target-selection-rules.html)를 사용하면 소스`describe-metadata-model`에서를 먼저 호출하지 않고도 소스 선택 규칙을 대상 규칙으로 직접 변환할 수 있습니다.

```
aws dms get-target-selection-rules \
    --migration-project-identifier "{{my-migration-project}}" \
    --selection-rules '{{source-selection-rules}}'
```

**대상 트리 직접 탐색**

를 사용하여 소스 트리와 동일한 방식으로 대상 트리를 찾아볼 수도 있습니다`--origin TARGET`. 이는 소스에서 시작하지 않고 변환된 모든 객체를 탐색하려는 경우에 유용합니다.

------

## 문 메타데이터 모델 생성
<a name="sc-metadata-model-creation"></a>

**참고**  
문 생성은 현재 SQL Server에서 Aurora PostgreSQL로 또는 SQL Server에서 Amazon RDS for PostgreSQL로의 지침만 지원합니다.

[StartMetadataModelCreation](https://docs.aws.amazon.com/dms/latest/APIReference/API_StartMetadataModelCreation.html)을 사용하여 SQL 정의에서 문 메타데이터 모델을 생성할 수 있습니다. 이는 애플리케이션 쿼리 또는 임시 SQL 코드와 같이 소스 데이터베이스에 객체로 존재하지 않는 SQL 문을 변환하려는 경우에 유용합니다.

------
#### [ AWS Management Console ]

명령문 메타데이터 모델 생성은 관리 콘솔에서 사용할 수 AWS 없습니다. 대신 AWS CLI 또는 AWS SDK를 사용합니다.

------
#### [ AWS CLI ]

문 메타데이터 모델을 생성하려면 [start-metadata-model-creation](https://docs.aws.amazon.com/cli/latest/reference/dms/start-metadata-model-creation.html)을 사용합니다. 선택 규칙은 소스 데이터베이스에 존재하는 스키마를 지정해야 합니다. 생성된 메타데이터 모델은 해당 스키마 내의 `Statements` 범주 아래에 나타납니다.

```
aws dms start-metadata-model-creation \
    --migration-project-identifier "{{my-migration-project}}" \
    --metadata-model-name "{{GetAllEmployees}}" \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{"server-name":"{{my-server}}",
      "database-name":"{{my_database}}","schema-name":"{{dbo}}"},
      "rule-action":"explicit"}]}' \
    --properties '{"StatementProperties":{"Definition":"SELECT * FROM dbo.Employees;"}}'
```

생성 후 범주 아래의 트리에서 메타데이터 모델을 찾아 `Statements` 설명할 수 있습니다.

```
{
    "MetadataModelName": "GetAllEmployees",
    "MetadataModelType": "statement",
    "Definition": "SELECT * FROM dbo.Employees;"
}
```

생성 후 평가, 변환 또는 내보내기와 같이 문 메타데이터 모델에서 지원되는 모든 작업을 실행할 수 있습니다.

------