대량 복사 작업 수행

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)

OLE DB 드라이버 다운로드

SQL Server 대량 복사 기능은 많은 양의 데이터를 SQL Server 테이블 또는 뷰로 또는 외부로 전송할 수 있습니다. SELECT 문을 지정하여 데이터를 전송할 수도 있습니다. 데이터는 SQL Server와 운영 체제 데이터 파일(예: ASCII 파일) 간에 이동할 수 있습니다. 데이터 파일의 형식은 다를 수 있습니다. 형식은 서식 파일에서 대량 복사하도록 정의됩니다. 필요에 따라 대량 복사 함수 및 메서드를 사용하여 데이터를 프로그램 변수에 로드하고 SQL Server로 전송할 수 있습니다.

이 기능을 보여 주는 샘플 애플리케이션은 IRowsetFastLoad를 사용하여 데이터 대량 복사(OLE DB)를 참조하세요.

애플리케이션은 보통 다음 두 가지 방법 중 하나로 대량 복사를 사용합니다.

  • Transact-SQL 문의 테이블, 뷰 또는 결과 집합에서 데이터가 테이블 또는 뷰와 동일한 형식으로 저장되는 데이터 파일로 대량 복사합니다.

    이를 기본 모드 데이터 파일이라고 합니다.

  • Transact-SQL 문의 테이블, 뷰 또는 결과 집합에서 데이터가 테이블 또는 뷰 중 하나와 다른 형식으로 저장되는 데이터 파일로 대량 복사합니다.

    이 경우 데이터 파일에 저장되는 각 열의 특성(데이터 형식, 위치, 길이, 종결자 등)을 정의하는 별도의 형식 파일이 만들어집니다. 모든 열이 문자 형식으로 변환되는 경우 결과 파일을 문자 모드 데이터 파일이라고 합니다.

  • 데이터 파일에서 테이블 또는 뷰로 대량 복사합니다.

    필요한 경우 서식 파일을 사용하여 데이터 파일의 레이아웃을 확인합니다.

  • 데이터를 프로그램 변수에 로드한 다음 대량 복사 함수를 사용하여 한 번에 행에서 대량 복사를 위해 데이터를 테이블 또는 뷰로 가져옵니다.

대량 복사 함수에서 사용하는 데이터 파일은 다른 대량 복사 프로그램에서 만들 필요가 없습니다. 다른 시스템은 대량 복사 정의에 따라 데이터 파일 및 서식 파일을 생성할 수 있습니다. 그런 다음 SQL Server 대량 복사 프로그램과 함께 이러한 파일을 사용하여 데이터를 SQL Server로 가져올 수 있습니다. 예를 들어 탭으로 구분된 파일의 스프레드시트에서 데이터를 내보내고, 탭으로 구분된 파일을 설명하는 서식 파일을 빌드한 다음, 대량 복사 프로그램을 사용하여 데이터를 SQL Server로 빠르게 가져올 수 있습니다. 대량 복사에서 생성된 데이터 파일을 다른 애플리케이션으로 가져올 수도 있습니다. 예를 들어 대량 복사 함수를 사용하여 테이블 또는 뷰의 데이터를 탭으로 구분된 파일로 내보낸 다음 스프레드시트에 로드할 수 있습니다.

대량 복사 함수를 사용하도록 애플리케이션을 코딩하는 프로그래머는 좋은 대량 복사 성능을 위해 일반적인 규칙을 따라야 합니다. SQL Server에서 대량 복사 작업을 지원하는 방법에 대한 자세한 내용은 데이터 대량 내보내기 및 가져오기(SQL Server)를 참조하세요.

제한 사항

CLR UDT(사용자 정의 형식)는 이진 데이터로 바인딩되어야 합니다. 서식 파일이 SQLCHAR를 대상 UDT 열의 데이터 형식으로 지정하더라도 BCP 유틸리티는 데이터를 이진 파일로 처리합니다.

대량 복사 작업에는 SET FMTONLY OFF를 사용하지 마십시오. SET FMTONLY OFF로 인해 대량 복사 작업이 실패하거나 예기치 않은 결과가 발생할 수 있습니다.

SQL Server용 OLE DB 드라이버

OLE DB Driver for SQL Server는 SQL Server 데이터베이스를 사용하여 대량 복사 작업을 수행하기 위한 두 가지 방법을 구현합니다. 첫 번째 메서드는 메모리 기반 대량 복사 작업에 IRowsetFastLoad 인터페이스를 사용하고, 두 번째 방법은 파일 기반 대량 복사 작업에 IBCPSession 인터페이스를 사용하는 것입니다.

메모리 기반 대량 복사 작업 사용

OLE DB Driver for SQL Server는 IRowsetFastLoad 인터페이스를 구현하여 SQL Server 메모리 기반 대량 복사 작업에 대한 지원을 노출합니다. IRowsetFastLoad 인터페이스는 IRowsetFastLoad::CommitIRowsetFastLoad::InsertRow 메서드를 구현합니다.

IRowsetFastLoad에 대한 세션 사용

소비자는 OLE DB Driver for SQL Server 관련 데이터 원본 속성 SSPROP_ENABLEFASTLOAD VARIANT_TRUE 설정하여 대량 복사가 필요하다는 것을 SQL Server용 OLE DB 드라이버에 알깁니다. 소비자는 데이터 원본의 속성 집합을 사용하여 OLE DB Driver for SQL Server 세션을 만듭니다. 새 세션을 사용하면 소비자가 IRowsetFastLoad 인터페이스에 액세스할 수 있습니다.

참고 항목

데이터 원본을 초기화하는 데 IDataInitialize 인터페이스를 사용하는 경우 IOpenRowset::OpenRowset 메서드의 rgPropertySets 매개 변수에서 SSPROP_IRowsetFastLoad 속성을 설정해야 합니다. 그렇지 않으면 OpenRowset 메서드에 대한 호출은 E_NOINTERFACE 반환합니다.

대량 복사에 세션을 사용하면 세션의 인터페이스에 대한 OLE DB Driver for SQL Server 지원이 제한됩니다. 대량 복사 사용 세션은 다음과 같은 인터페이스만 노출합니다.

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

대량 복사 사용 행 집합을 만들지 않고 SQL Server용 OLE DB 드라이버 세션이 표준 처리로 돌아가게 하려면 SSPROP_ENABLEFASTLOAD를 VARIANT_FALSE로 다시 설정합니다.

IRowsetFastLoad 행 집합

OLE DB Driver for SQL Server 대량 복사 행 집합은 쓰기 전용이지만 소비자가 SQL Server 테이블의 구조를 결정할 수 있는 인터페이스를 노출합니다. 다음 인터페이스는 대량 복사 사용 OLE DB Driver for SQL Server 행 집합에 노출됩니다.

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

공급자별 속성은 OLE DB Driver for SQL Server 대량 복사 행 집합의 SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS 및 SSPROP_FASTLOADKEEPIDENTITY 제어 동작을 제어합니다. 속성은 rgPropertySetsIOpenRowset 매개 변수 멤버의 rgProperties 멤버에 지정됩니다.

속성 ID 설명
SSPROP_FASTLOADKEEPIDENTITY 열: 아니요

R/W: 읽기/쓰기

유형: VT_BOOL

Default: VARIANT_FALSE

설명: 소비자가 제공하는 ID 값을 유지 관리합니다.

VARIANT_FALSE: SQL Server 테이블의 ID 열 값은 SQL Server에서 생성됩니다. 열에 바인딩된 모든 값은 OLE DB Driver for SQL Server에서 무시됩니다.

VARIANT_TRUE: 소비자는 SQL Server ID 열에 대한 값을 제공하는 접근자를 바인딩합니다. ID 속성은 NULL을 허용하는 열에서 사용할 수 없으므로 소비자는 각 IRowsetFastLoad::Insert 호출에 고유한 값을 제공합니다.
SSPROP_FASTLOADKEEPNULLS 열: 아니요

R/W: 읽기/쓰기

유형: VT_BOOL

Default: VARIANT_FALSE

설명: DEFAULT 제약 조건이 있는 열에 대해 NULL을 유지 관리합니다. NULL을 허용하고 DEFAULT 제약 조건이 적용된 SQL Server 열에만 영향을 줍니다.

VARIANT_FALSE: SQL Server용 OLE DB 드라이버 소비자가 열에 대해 NULL이 포함된 행을 삽입할 때 SQL Server에서 열의 기본값을 삽입합니다.

VARIANT_TRUE: SQL Server용 OLE DB 드라이버 소비자가 열에 대해 NULL이 포함된 행을 삽입할 때 SQL Server에서 열 값에 대해 NULL을 삽입합니다.
SSPROP_FASTLOADOPTIONS 열: 아니요

R/W: 읽기/쓰기

유형: VT_BSTR

기본값: 없음

설명: 이 속성은 bcp 유틸리티의 -h "hint[,...n]" 옵션과 같습니다. 테이블에 데이터를 대량 복사할 때 다음 문자열을 옵션으로 사용할 수 있습니다.

ORDER(column[ASC | DESC][,...n]): 데이터 파일에 있는 데이터의 순서를 정렬합니다. 로드되는 데이터 파일이 테이블의 클러스터형 인덱스별로 정렬되면 대량 복사 성능이 향상됩니다.

= ROWS_PER_BATCH bb: 일괄 처리당 데이터 행 수(bb)입니다. 서버는 값 bb에 따라 대량 로드를 최적화합니다. 기본적으로 ROWS_PER_BATCH는 알 수 없습니다.

= KILOBYTES_PER_BATCH cc: 일괄 처리당 데이터의 KB(KB) 수입니다(참조). 기본적으로 KILOBYTES_PER_BATCH 알 수 없습니다.

TABLOCK: 대량 복사 작업 기간 동안 테이블 수준 잠금을 획득합니다. 이 옵션은 대량 복사 작업 기간 동안만 잠금을 유지하면 테이블에 대한 잠금 경합이 줄어들기 때문에 성능이 크게 향상됩니다. 테이블에 인덱스가 없고 TABLOCK 이 지정된 경우 여러 클라이언트에서 동시에 테이블을 로드할 수 있습니다. 기본적으로 잠금 동작은 대량 로드에 대한 테이블 옵션 테이블 잠금에 의해 결정됩니다.

CHECK_CONSTRAINTS: 대량 복사 작업 중에 table_name 제약 조건이 검사. 기본적으로 제약 조건은 무시됩니다.

FIRE_TRIGGER: SQL Server는 트리거에 행 버전 지정을 사용하고 tempdb의 버전 저장소에 행 버전을 저장합니다. 따라서 트리거를 사용하도록 설정한 경우에도 대량 로깅 최적화를 사용할 수 있습니다. 트리거가 활성화된 많은 수의 행이 있는 일괄 처리를 대량으로 가져오기 전에 tempdb크기를 확장해야 할 수 있습니다.

파일 기반 대량 복사 작업 사용

OLE DB Driver for SQL Server는 SQL Server 파일 기반 대량 복사 작업에 대한 지원을 노출하는 IBCPSession 인터페이스를 구현합니다. IBCPSession 인터페이스는 IBCPSession::BCPColFmt, IBCPSession::BCPColumns를 구현합니다. IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmtIBCPSession::BCPWriteFmt 메서드.

참고 항목

SQL Server 기능용 OLE DB 드라이버
데이터 원본 속성(OLE DB)
데이터 대량 가져오기 및 내보내기(SQL Server)
IRowsetFastLoad(OLE DB)
IBCPSession(OLE DB)