Azure Portal을 통해 Azure Database Migration Service를 사용하여 SQL Server의 온-프레미스 인스턴스에서 Azure SQL Database(오프라인)로 데이터베이스를 마이그레이션할 수 있습니다.
이 자습서에서는 Database Migration Service를 사용하여 SQL Server의 온-프레미스 인스턴스에서 Azure SQL Database로 샘플 AdventureWorks2022 데이터베이스를 마이그레이션하는 방법을 알아봅니다. 이 자습서에서는 마이그레이션 프로세스 중에 허용되는 가동 중지 시간을 고려하는 오프라인 마이그레이션 모드를 사용합니다.
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- Azure Database Migration Service 인스턴스 만들기
- 마이그레이션을 시작하고 완료될 때까지 진행률 모니터링
중요합니다
현재 Azure SQL Database 대상에 대한 온라인 마이그레이션은 Azure Database Migration Service에서 사용할 수 없습니다. 오프라인 마이그레이션의 경우 마이그레이션을 시작할 때부터 애플리케이션 가동 중지 시간이 시작됩니다. 오프라인 마이그레이션을 테스트하여 가동 중지 시간이 허용되는지 여부를 확인하는 것이 좋습니다.
마이그레이션 옵션
다음 섹션에서는 Azure Portal에서 Azure Database Migration Service를 사용하는 방법을 설명합니다.
필수 조건
자습서를 시작하려면 필요한 것:
Azure Portal에 액세스할 수 있는지 확인합니다.
Microsoft.DataMigration 리소스 공급자가 구독에 등록되어 있는지 확인합니다.
다음 기본 제공 역할 중 하나에 할당된 Azure 계정이 있습니다.
- 대상 Azure SQL Database에 대한 기여자
- 대상 Azure SQL Database를 포함하는 Azure 리소스 그룹에 대한 읽기 권한자 역할
- Azure 구독에 대한 소유자 또는 기여자 역할(Azure Database Migration Service의 새 인스턴스를 만드는 경우 필요)
이러한 기본 제공 역할 중 하나를 사용하는 대신 사용자 지정 역할을 할당할 수 있습니다.
대상 Azure SQL Database를 만듭니다.
원본 SQL Server 인스턴스에 연결하는 SQL Server 로그인이 db_datareader 역할의 구성원이고 대상 SQL Server 인스턴스에 대한 로그인이 db_owner 역할의 구성원인지 확인합니다.
Database Migration Service를 사용하여 원본에서 대상 Azure SQL Database로 데이터베이스 스키마를 마이그레이션하려면 지원되는 최소 SHIR 버전은 5.37 이상입니다.
스키마 마이그레이션의 경우 원본 SQL Server에 대한 최소 사용 권한은 데이터베이스에 액세스하는 db_owner 대상 Azure SQL Database에서 사용자는 다음 표의 모든 서버 수준 역할 의 멤버여야 합니다.
| 역할 | 설명 |
|---|---|
| ##MS_DatabaseManager## |
##MS_DatabaseManager## 고정 서버 역할의 멤버는 데이터베이스를 만들고 삭제할 수 있습니다. 데이터베이스를 만드는 ##MS_DatabaseManager## 역할의 멤버는 해당 데이터베이스의 소유자가 되므로 해당 사용자가 해당 데이터베이스에 dbo 사용자로 연결할 수 있습니다. dbo 사용자는 해당 데이터베이스에서 모든 데이터베이스 사용 권한을 가집니다.
##MS_DatabaseManager## 역할의 멤버가 소유하지 않은 데이터베이스에 액세스할 수 있는 권한이 반드시 있는 것은 아닙니다.
master 데이터베이스에 존재하는 dbmanager 데이터베이스 수준 역할보다 이 서버 역할을 사용하는 것이 권장됩니다. |
| ##MS_DatabaseConnector## | ##MS_DatabaseConnector## 고정 서버 역할의 멤버는 데이터베이스의 사용자 계정을 연결하지 않고도 모든 데이터베이스에 연결할 수 있습니다. |
| ##MS_DefinitionReader## |
##MS_DefinitionReader## 고정 서버 역할의 멤버는 이 역할의 멤버에 사용자 계정이 있는 데이터베이스에서 다루는 VIEW ANY DEFINITION 모든 카탈로그 뷰를 읽을 수 있습니다. |
| ##MS_LoginManager## |
##MS_LoginManager## 고정 서버 역할의 멤버는 로그인을 만들고 삭제할 수 있습니다. 이 서버 역할을 master 데이터베이스에 존재하는 loginmanager 데이터베이스 수준 역할보다 사용하는 것이 좋습니다. |
대상 Azure SQL Database 준비
대상 Azure SQL Database에서 로그인 및 사용자를 만들려면 데이터베이스에서 다음 스크립트를 master 실행합니다.
CREATE LOGIN testuser WITH PASSWORD = '<password>';
ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER [testuser];
GO
ALTER SERVER ROLE ##MS_DatabaseConnector## ADD MEMBER [testuser];
GO
ALTER SERVER ROLE ##MS_DatabaseManager## ADD MEMBER [testuser];
GO
ALTER SERVER ROLE ##MS_LoginManager## ADD MEMBER [testuser];
GO
CREATE USER testuser FOR LOGIN testuser;
EXECUTE sp_addRoleMember 'dbmanager', 'testuser';
EXECUTE sp_addRoleMember 'loginmanager', 'testuser';
이제 Database Migration Service를 사용하여 데이터베이스 스키마와 데이터를 모두 마이그레이션할 수 있습니다. Visual Studio Code의 SQL Database 프로젝트 확장 과 같은 다른 도구를 사용하여 마이그레이션할 테이블 목록을 선택하기 전에 스키마를 마이그레이션할 수도 있습니다.
참고
Azure SQL Database 대상에 테이블이 없거나 마이그레이션을 시작하기 전에 테이블이 선택되지 않은 경우 다음 단추를 사용하여 마이그레이션을 시작할 수 없습니다. 대상에 테이블이 없는 경우 앞으로 이동하려면 스키마 마이그레이션 옵션을 선택해야 합니다.
Database Migration Service 인스턴스 만들기
1단계:Azure Portal에서 Azure Database Migration Service 페이지로 이동합니다. Azure Database Migration Service의 새 인스턴스를 만들거나 이전에 만든 기존 인스턴스를 재사용합니다.
기존 Database Migration Service 인스턴스 사용
기존 Database Migration Service 인스턴스를 사용하려면 다음을 수행합니다.
Azure Portal의 Azure Database Migration Services에서 사용하려는 기존 Database Migration Service 인스턴스를 선택하여 해당 인스턴스가 올바른 리소스 그룹 및 지역에 있는지 확인합니다.
새 Database Migration Service 인스턴스 만들기
새 Database Migration Service 인스턴스를 만들려면 다음을 수행합니다.
Azure Portal의 Azure Database Migration Service에서 만들기를 선택합니다.
마이그레이션 시나리오 및 Database Migration Service 선택에서 원본 및 대상 서버 형식과 같은 원하는 입력을 선택하고 Database Migration Service를 선택한 다음 선택을 선택합니다.
다음 화면에서 Data Migration Service 만들기, 구독 및 리소스 그룹을 선택한 다음 위치를 선택하고 Database Migration Service 이름을 입력합니다. 검토 + 생성를 선택합니다. 그러면 Azure Database Migration Service가 만들어집니다.
SHIR(자체 호스팅 통합 런타임)이 필요한 경우 Database Migration Service 개요 페이지와 설정에서 통합 런타임을 선택하고 다음 단계를 완료합니다.
통합 런타임 구성을 선택하고 통합 런타임 다운로드 및 설치 링크를 선택하여 웹 브라우저에서 다운로드 링크를 엽니다. 통합 런타임을 다운로드한 다음 원본 SQL Server 인스턴스에 연결하기 위한 필수 조건을 충족하는 컴퓨터에 설치합니다. 자세한 내용은 데이터베이스 마이그레이션에 대한 자체 호스팅 통합 런타임을 참조하세요.
설치가 완료되면 Microsoft Integration Runtime Configuration Manager가 자동으로 열리고 등록 프로세스가 시작됩니다.
인증 키 표에서 마법사에 제공된 인증 키 중 하나를 복사하여 Microsoft Integration Runtime Configuration Manager에 붙여넣습니다.
인증 키가 유효하면 Integration Runtime Configuration Manager에 녹색 체크 아이콘이 표시됩니다. 녹색 체크 아이콘은 등록을 계속해도 좋다는 뜻입니다.
자체 호스팅 통합 런타임을 등록한 후에는 Microsoft Integration Runtime Configuration Manager를 닫습니다. Database Migration Service용 Azure Portal의 설정 > 통합 런타임에 노드 세부 정보가 반영되는 데 몇 분 정도 걸릴 수 있습니다.
참고
자체 호스팅 통합 런타임에 대한 자세한 내용은 자체 호스팅 통합 런타임을 만들고 구성하는 방법을 참조하세요.
새 마이그레이션 시작
새 마이그레이션을 시작하려면 Azure Portal에서 Azure Database Migration Service 로 이동하여 +Create 를 사용하여 Database Migration Service의 새 인스턴스를 만들거나 기존 인스턴스를 선택한 다음 Azure Database Migration Service 인스턴스로 이동합니다.
Azure Database Migration Service 인스턴스의 개요 창에서 새 마이그레이션을 선택합니다.
새 마이그레이션 선택 시나리오에서 원본, 대상 서버 형식, 마이그레이션 모드를 선택하고 선택을 선택합니다.
Azure SQL Database 오프라인 마이그레이션 마법사에서 다음 단계를 수행합니다.
원본 세부 정보 탭에서 원본 SQL Server 인스턴스에 대한 세부 정보를 입력한 다음 다음을 선택합니다. 원본 SQL Server에 연결:
원본 SQL Server에 연결 탭에서 연결 세부 정보를 입력한 다음 다음을 선택합니다. 마이그레이션할 데이터베이스를 선택합니다.
마이그레이션할 데이터베이스 선택 탭에서 마이그레이션할 데이터베이스 옆의 확인란을 선택합니다. 데이터베이스 목록을 채우는 데 다소 시간이 걸릴 수 있습니다. 다음을 선택합니다. 대상 Azure SQL Database에 연결합니다.
대상 Azure SQL Database에 연결 탭에서 연결 세부 정보를 입력한 후, 다음: 원본 및 대상 데이터베이스 매핑을 선택합니다.
원본 및 대상 데이터베이스 매핑 탭에서 원본과 대상 간에 데이터베이스를 매핑합니다.
(선택 사항) 누락된 스키마 마이그레이션 옆의 확인란을 선택하여 원본에서 Azure SQL Database 대상으로 누락된 스키마 개체를 배포하여 단일 확인란으로 다음 스키마 개체를 마이그레이션합니다.
- 스키마
- 테이블(선택됨)
- 인덱스
- 조회수
- 저장 프로시저 (Stored Procedures)
- 동의어
- DDL 트리거(DDL Triggers)
- 기본값
- 전체 텍스트 카탈로그(FullTextCatalogs)
- 계획 가이드(플랜 가이드)
- 역할
- 규칙
- 애플리케이션 역할(ApplicationRoles)
- 사용자 정의 집계(UserDefinedAggregates)
- 사용자 정의 데이터 형식(UserDefinedDataTypes)
- 사용자 정의 함수(UserDefinedFunctions)
- 사용자 정의 테이블 형식(UserDefinedTableTypes)
- 사용자 정의 형식(UserDefinedTypes)
- 사용자* (모든 사용자 유형이 아님)
- XmlSchemaCollections
참고
- 누락된 스키마 마이그레이션을 선택하는 경우 데이터베이스 마이그레이션 서비스는 데이터를 마이그레이션하기 전에 스키마 마이그레이션을 수행합니다.
- 테이블 개체에 문제가 없는 한 스키마 마이그레이션에 오류가 발생하더라도 DMS는 데이터 마이그레이션 단계를 진행합니다.
다음으로 모든 테이블을 선택하여 모든 테이블을 마이그레이션하거나 텍스트 입력란을 사용하여 테이블 목록을 필터링하고 마이그레이션할 개별 테이블을 선택합니다. 그런 다음 , 다음: 데이터베이스 마이그레이션 요약을 선택합니다.
데이터베이스 마이그레이션 요약 탭에서 세부 정보를 검토한 다음, 마이그레이션 시작을 선택합니다. 그러면 데이터베이스 마이그레이션이 시작되고 자동으로 데이터베이스 마이그레이션 서비스 대시보드로 돌아갑니다.
참고
오프라인 마이그레이션의 경우 마이그레이션이 시작될 때 애플리케이션 가동 중지 시간이 시작됩니다.
데이터베이스 마이그레이션 모니터링
데이터베이스 마이그레이션을 모니터링하려면 Database Migration Service 인스턴스의 개요 창에서 마이그레이션 모니터링을 선택합니다.
마이그레이션 탭에서 진행 중, 완료 및 실패한 마이그레이션(있는 경우)을 추적하거나 모든 데이터베이스 마이그레이션을 볼 수 있습니다. 메뉴 모음에서 새로 고침을 선택하여 마이그레이션 상태를 업데이트합니다.
Database Migration Service는 마이그레이션 상태를 새로 고칠 때마다 알려진 최신 마이그레이션 상태를 반환합니다. 다음 표에서는 가능한 상태를 설명합니다.
상태 설명 만들기 서비스가 마이그레이션을 시작합니다. 복사 준비 중 서비스가 대상 테이블에서 자동 통계, 트리거 및 인덱스를 사용하지 않도록 설정합니다. 복사 데이터가 원본 데이터베이스에서 대상 데이터베이스로 복사되고 있습니다. 복사 완료 데이터 복사가 완료되었습니다. 서비스가 다른 테이블에서 복사를 완료하고 테이블을 원래 스키마로 반환하는 최종 단계를 시작하기를 기다리고 있습니다. 인덱스 다시 작성 서비스가 대상 테이블에서 인덱스를 다시 작성하고 있습니다. 성공함 모든 데이터가 복사되고 인덱스가 다시 작성됩니다. 원본 이름 아래에서 데이터베이스 이름을 선택하여 테이블 뷰를 엽니다. 이 자세한 보기에는 마이그레이션의 현재 상태, 현재 해당 상태에 있는 테이블 수 및 각 테이블의 자세한 상태가 표시됩니다.
모든 테이블 데이터가 Azure SQL Database 대상으로 마이그레이션되면 Database Migration Service는 마이그레이션 상태를 진행 중에서 성공으로 업데이트합니다.
참고
Database Migration Service는 데이터가 없는(행 0개) 테이블을 건너뛰어 마이그레이션을 최적화합니다. 마이그레이션을 만들 때 테이블을 선택한 경우에도 데이터가 없는 테이블은 목록에 표시되지 않습니다.
Azure SQL Database로의 마이그레이션을 완료했습니다. 마이그레이션 후 일련의 작업을 진행하여 모든 작업이 원활하고 효율적으로 작동하도록 합니다.
제한 사항
Azure SQL Database 오프라인 마이그레이션은 데이터 이동을 위해 ADF(Azure Data Factory) 파이프라인을 활용하므로 ADF 제한 사항을 준수합니다. 해당 ADF가 생성되고 데이터베이스 마이그레이션 서비스도 생성됩니다. 따라서 팩터리 한도는 서비스당 적용됩니다.
- SHIR이 설치된 컴퓨터는 마이그레이션을 위한 컴퓨팅 역할을 합니다. 이 컴퓨터가 데이터 복사의 CPU 및 메모리 로드를 처리할 수 있는지 확인합니다. 자세히 알아보려면 자체 호스팅 통합 런타임 만들기 및 구성을 검토하세요.
- 데이터베이스 한도당 100,000개 테이블
- 서비스당 동시 데이터베이스 마이그레이션 10,000회
- 마이그레이션 속도는 대상 Azure SQL Database SKU 및 자체 호스팅 통합 런타임에 따라 크게 달라집니다.
- Azure SQL Database 마이그레이션은 시작 작업의 ADF 오버헤드로 인해 테이블 수에 따른 확장 성능이 낮습니다. 데이터베이스에 수천 개의 테이블이 있는 경우 각 테이블이 1비트 데이터가 있는 하나의 행으로 구성되어 있어도 각 테이블의 시작 프로세스는 몇 초가 걸릴 수 있습니다.
- 현재 더블바이트 문자가 있는 Azure SQL Database 테이블 이름은 마이그레이션에 지원되지 않습니다. 완화 방법은 마이그레이션 전에 테이블 이름을 바꾸는 것입니다. 마이그레이션에 성공한 후 원래 이름으로 다시 변경할 수 있습니다.
- 대규모 Blob 열이 있는 테이블은 시간 초과로 인해 마이그레이션하지 못할 수 있습니다.
- SQL Server가 예약된 데이터베이스 이름은 현재 지원되지 않습니다.
- 세미콜론이 포함된 데이터베이스 이름은 현재 지원되지 않습니다.
- 계산된 열은 마이그레이션되지 않습니다.
- 기본 제약 조건이 있고 값을 포함하는
NULL원본 데이터베이스의 열은 NULL을 유지하는 대신 대상 Azure SQL 데이터베이스에서 정의된 기본값으로 마이그레이션됩니다.