영업: 1-800-867-1380

방법: bcp를 사용하여 Windows Azure SQL 데이터베이스로 데이터베이스 마이그레이션

업데이트 날짜: 2014년 4월

SQL Server 데이터베이스를 Microsoft Azure SQL 데이터베이스로 마이그레이션할 때 고성능 데이터 이동용으로 SQL Server bcp 유틸리티를 사용할 수 있습니다. 먼저 bcp를 사용하여 원본 테이블의 데이터를 데이터 파일로 복사합니다. 그런 다음 이 유틸리티를 다시 실행하여 데이터 파일의 데이터를 대상 테이블로 복사합니다. bcp는 데이터만 이동하므로 데이터베이스 스키마 마이그레이션을 위한 다른 프로세스와 함께 사용해야 합니다.

저자: Shaun Tinline-Jones

bcp 유틸리티는 SQL Server 또는 Microsoft Azure SQL 데이터베이스로의 고성능 대량 업로드용으로 디자인된 명령줄 유틸리티로, 마이그레이션 도구가 아닙니다. 이 유틸리티는 스키마를 추출하거나 생성하지 않습니다. 먼저 스크립트 생성 마법사와 같은 스키마 마이그레이션 도구 중 하나를 사용하거나 DAC(데이터 계층 응용 프로그램) 패키지를 추출하고 배포하여 스키마를 Microsoft Azure SQL 데이터베이스로 전송해야 합니다. 스키마 마이그레이션 프로세스 식별에 대한 도움말은 Azure SQL 데이터베이스로 데이터베이스를 마이그레이션하는 도구 선택를 참조하십시오.

bcp 유틸리티는 SQL Server API(응용 프로그래밍 인터페이스)에도 표시되는 SQL Server 대량 복사 기능을 호출합니다. Microsoft Azure SQL 데이터베이스 마이그레이션 마법사와 DAC BACPAC 등 일부 마이그레이션 도구에서는 대량 복사 기능을 사용하여 데이터를 전송할 수도 있습니다.

대량 복사와 관련된 최선의 구현 방법을 사용하여 데이터를 큰 대상 테이블로 복사할 때 성능을 향상시킵니다. 예를 들면 다음과 같습니다.

  • 데이터 형식 변환이 필요 없도록 –N 옵션을 사용하여 기본 모드에서 데이터를 전송합니다.

  • –b 옵션을 사용하여 일괄 처리 크기를 지정합니다. 각 일괄 처리는 별도의 트랜잭션으로 가져오고 기록됩니다. 기본적으로 데이터 파일의 모든 행은 하나의 일괄 처리로 가져옵니다. 트랜잭션이 실패하면 현재 일괄 처리에서 삽입한 내용만 롤백됩니다. 최상의 일괄 처리 크기를 찾아서 사용하면 데이터 마이그레이션 중에 Microsoft Azure SQL 데이터베이스와의 연결이 끊기는 것을 줄일 수 있습니다.

  • bcp 힌트를 사용합니다.

    • 가져오기에 –h “TABLOCK” 힌트를 사용하여 대량 로드 작업 기간 동안 대량 업데이트 테이블 수준 잠금을 사용하도록 지정합니다. 이렇게 하면 각 행에 대해 잠금 대신에 단일 테이블 잠금을 사용하여 잠금 오버헤드를 줄일 수 있습니다.

    • 내보내기에는 –h “ORDER(…)” 힌트를 사용하여 데이터 파일을 정렬합니다. 가져올 데이터를 테이블의 클러스터형 인덱스에 따라 정렬하면 대량 가져오기 성능이 향상됩니다.

  • 큰 테이블의 경우 가져오기 복사를 동시에 실행할 수 있는 여러 스트림을 분할합니다. 원본 테이블의 데이터를 단일 데이터 파일로 대량 복사한 경우 -F firstrow 및 –L lastrow 매개 변수를 사용하여 각각의 bcp 실행을 통해 처리되는 데이터 파일의 부분을 지정합니다.

대량 복사와 관련된 최선의 구현 방법에 대한 자세한 내용은 대량 가져오기 성능 최적화를 참조하십시오.

IDENTITY를 사용하여 테이블에 기본 키를 생성하려는 경우 bcp –E 매개 변수를 사용하여 원본 데이터베이스에서 생성된 키를 보존합니다. 가져오기를 실행하는 동안 테이블에 대한 다른 업데이트가 발생하지 않는 경우 -E를 통해 가져오기 중 외래 키 위반을 방지해야 합니다. 데이터베이스를 읽기 전용 모드로 설정하는 등 다른 업데이트가 불가능하도록 해야 합니다.

note참고
bcp는 원본 데이터베이스에서 데이터를 추출할 때 여러 테이블 간의 트랜잭션 무결성을 유지하지 않습니다. 내보내기 중에 원본 데이터베이스를 단일 사용자나 읽기 전용 모드로 설정하여 이 문제를 해결할 수 있습니다.

[맨 위로 이동]

대량 복사 가져오기를 수행하려면 대상 데이터베이스의 테이블이 비어 있어야 합니다. 이전 대량 복사에서 삽입된 모든 행을 자르거나 삭제하는 경우가 아니면 동일한 테이블에 대한 여러 번의 대량 복사 가져오기를 수행할 수 없습니다.

[맨 위로 이동]

bcp는 SQL Server와 함께 제공됩니다. SQL Server의 SQL Server 2008 R2 이상 버전에 포함된 클라이언트 유틸리티를 설치하여 Microsoft Azure SQL 데이터베이스용으로 지원되는 bcp 버전을 가져옵니다.

[맨 위로 이동]

bcp를 사용하여 원본 데이터베이스에 있는 테이블 데이터를 대상 데이터베이스에 있는 해당 테이블의 복사본으로 이동하는 작업은 5단계로 이루어집니다.

  1. 스키마 마이그레이션

    스크립트 생성 마법사나 DAC BACPAC 등 스키마 전송 메커니즘을 사용하여 Microsoft Azure SQL 데이터베이스에 데이터베이스 복사본을 만듭니다. 프로세스가 끝날 때 모든 테이블이 Azure SQL 데이터베이스데이터베이스에 만들어지지만, 데이터는 들어 있지 않습니다.

  2. 데이터 파일로 데이터 내보내기

    원본 SQL Server 데이터베이스의 각 테이블에 대해 bcp out 작업을 실행하여 테이블의 데이터를 데이터 파일로 복사합니다. 다음은 한 테이블의 데이터를 데이터 파일로 내보내는 예제입니다.

    bcp tableName out C:\filePath\exportFileName.dat –S serverName –T –n -q
    
    out 매개 변수는 SQL Server에서 데이터를 복사함을 나타냅니다. -n 매개 변수는 데이터의 기본 데이터베이스 데이터 형식을 사용하여 대량 복사 작업을 수행합니다. -q 매개 변수는 bcp 유틸리티와 데이터베이스 엔진 인스턴스 간 연결에서 SET QUOTED_IDENTIFIERS ON 문을 실행합니다.

  3. 대량 복사 최적화 수행

    비클러스터형 인덱스, 트리거 및 제약 조건을 해제하는 등 데이터를 큰 테이블로 복사할 때 성능을 높이는 데 필요한 대상 데이터베이스 스키마 변경을 수행합니다.

  4. 데이터 파일을 Azure SQL 데이터베이스

    Microsoft Azure SQL 데이터베이스 대상 데이터베이스에 있는 각 테이블에 대해 bcp 유틸리티를 실행하여 내보내기 데이터 파일의 데이터를 해당 테이블로 복사합니다. 이 예제에서는 bcp를 세 번 실행하여 약 300,000개 행을 포함하는 데이터 파일에서 단일 테이블로 데이터를 복사합니다. 각 실행마다 약 100,000개 행이 복사됩니다.

    Bcp tableName in c:\filePath\exportFileName.dat –n –U userName@serverName –S tcp:serverName.database.windows.net –P password –b 200 –L 99999 –h”TABLOCK”
    
    Bcp tableName in c:\filePath\exportFileName.dat –n –U userName@serverName –S tcp:serverName.database.windows.net –P password –b 200 –F 100000 –L 199999 –h”TABLOCK”
    
    Bcp tableName in c:\filePath\exportFileName.dat –n –U userName@serverName –S tcp:serverName.database.windows.net –P password –b 200 –F 200000 –h”TABLOCK”
    
    in 매개 변수는 데이터를 Microsoft Azure SQL 데이터베이스로 복사함을 나타냅니다. –b 매개 변수는 가져온 데이터의 일괄 처리당 행 수를 지정합니다. –L lastrow 및 –F firstrow 매개 변수는 각 실행에서 처리되는 데이터 파일의 부분을 지정하는 데 사용됩니다.

  5. 스키마 최적화 제거

    대량 삽입을 최적화하기 위해 제거된 스키마 항목을 모두 복원합니다. 예를 들어, 3단계에서 사용하지 않도록 설정된 비클러스터형 인덱스, 트리거 또는 제한 조건을 모두 사용하도록 설정합니다.

[맨 위로 이동]

이 정보가 도움이 되었습니까?
(1500자 남음)
의견을 주셔서 감사합니다.
표시:
© 2014 Microsoft