재우니의 블로그




SQL Server 2008 온라인 설명서(2009년 1월)
대량 가져오기 및 내보내기 작업 정보

업데이트: 2008년 10월 31일

SQL Server에서는 SQL Server 테이블에서 대량의 데이터를 내보내고 SQL Server 테이블이나 분할되지 않은 뷰로 대량의 데이터를 가져올 수 있습니다. 다음과 같은 기본 방법을 사용할 수 있습니다.

방법설명데이터 가져오기데이터 내보내기

bcp 유틸리티

데이터를 대량으로 내보내고 가져오며 서식 파일을 생성하는 명령줄 유틸리티(Bcp.exe)입니다.

BULK INSERT 문

데이터 파일에서 데이터베이스 테이블이나 분할되지 않은 뷰로 직접 데이터를 가져오는 Transact-SQL 문입니다.

아니요

INSERT ... SELECT * FROM OPENROWSET(BULK...) 문

INSERT 문의 데이터를 선택하는 OPENROWSET(BULK…) 함수를 지정하여 대량의 데이터를 SQL Server 테이블로 가져오기 위해 OPENROWSET 대량 행 집합 공급자를 사용하는 Transact-SQL 문입니다.

아니요

SQL Server 대량 가져오기 작업에서는 CSV(쉼표로 구분된 값) 파일의 데이터를 가져오도록 지원하지 않습니다. 그러나 32비트 시스템에서 OPENROWSET을 Jet용 OLE DB 공급자와 함께 사용하면 대량 가져오기 최적화를 수행하지 않아도 CSV 데이터를 SQL Server 테이블로 가져올 수 있습니다. Jet에서는 schema.ini 파일에 정의된 스키마를 사용하여 텍스트 파일을 테이블로 처리합니다. schema.ini 파일은 데이터 원본과 동일한 디렉터리에 있습니다. CSV 데이터의 경우 schema.ini 파일의 매개 변수 중 하나는 "FORMAT=CSVDelimited"입니다. 이 방법을 사용하려면 Jet Test IISAMm의 작동 방식, 즉 연결 문자열 구문, schema.ini 사용법, 레지스트리 설정 옵션 등을 이해해야 합니다. 이에 대한 가장 유용한 정보는 Microsoft Access 도움말 및 KB(기술 자료) 문서에서 제공합니다. 자세한 내용은 텍스트 데이터 원본 드라이버 초기화보안된 Access 데이터베이스에 연결된 서버를 통해 SQL Server 7.0 분산 쿼리를 사용하는 방법방법: Jet OLE DB 공급자 4.0을 사용하여 ISAM 데이터베이스에 연결 및 Jet 공급자의 텍스트 IIsam을 사용하여 구분된 텍스트 파일을 여는 방법을 참조하십시오.



BULK INSERT 문 및 OPENROWSET(BULK) 함수는 SQL Server에서 in-process를 실행하며 동일한 메모리 주소 공간을 공유합니다. 데이터 파일은 SQL Server 프로세스에서 열리므로 데이터는 클라이언트 프로세스와 SQL Server 프로세스 간에 복사되지 않습니다. BULK INSERT 또는 INSERT ... SELECT * FROM OPENROWSET(BULK...)을 사용하여 데이터를 가져올 때 고려해야 할 보안 사항은 BULK INSERT 또는 OPENROWSET(BULK...)를 사용하여 데이터 대량 가져오기를 참조하십시오.

이와는 반대로 bcp 유틸리티는 out-of-process를 실행합니다. 프로세스 메모리 공간에서 데이터를 이동하려면 bcp가 프로세스 간 데이터 마샬링을 사용해야 합니다. 프로세스 간 데이터 마샬링은 메서드 호출 매개 변수를 바이트 스트림으로 변환하는 프로세스입니다. 이 작업을 수행하면 프로세서에 대량의 부하가 추가될 수 있습니다. 그러나 bcp는 클라이언트 프로세스에서 데이터를 구문 분석하여 기본 저장소 형식으로 변환하기 때문에 SQL Server 프로세스에서 구문 분석 및 데이터 변환을 오프로드할 수 있습니다. 따라서 CPU 제약 조건이 있는 경우 BULK INSERT 또는 INSERT ...SELECT * FROM OPENROWSET(BULK)를 사용하는 대신 bcp를 사용하여 둘 이상의 CPU가 있는 컴퓨터나 서로 다른 컴퓨터에서의 대량 가져오기의 성능을 향상시킬 수 있습니다.



bcp 유틸리티, BULK INSERT 및 INSERT ... SELECT * FROM OPENROWSET(BULK...)은 데이터 파일의 각 필드에 대한 서식 정보를 저장하는 서식 파일이라는 특수 파일을 사용하도록 지원합니다. 또한 서식 파일에는 해당 SQL Server 테이블에 대한 정보가 포함되어 있습니다. 서식 파일을 사용하여 SQL Server 인스턴스로 데이터를 대량으로 내보내거나 SQL Server 인스턴스에서 데이터를 대량으로 가져올 때 필요한 모든 서식 정보를 제공할 수 있습니다.

서식 파일을 사용하면 가져오기 작업 중 데이터 파일에 있는 데이터의 해석뿐만 아니라 내보내기 작업 중 데이터 파일에 있는 데이터의 서식을 지정할 수 있습니다. 이와 같이 융통성이 있기 때문에 SQL Server 또는 외부 응용 프로그램에 대한 특정 요구 사항에 따라 데이터를 해석하거나 데이터의 서식을 다시 지정하기 위해 특수한 목적의 코드를 작성할 필요가 없습니다. 예를 들어 대량으로 내보낸 데이터를 쉼표로 값을 구분해야 하는 응용 프로그램으로 로드해야 할 경우 서식 파일을 사용하여 내보낸 데이터에서 쉼표를 필드 종결자로 삽입할 수 있습니다.

SQL Server 2005 이상 버전에서는 두 종류의 서식 파일, 즉 XML 서식 파일 및 비 XML 서식 파일을 지원합니다. 비 XML 서식 파일은 SQL Server의 이전 버전에서 지원됩니다. XML 서식 파일은 SQL Server 2005의 새로운 기능입니다.

서식 파일을 생성할 수 있는 유일한 도구는 bcp 유틸리티입니다. 자세한 내용은 서식 파일 만들기를 참조하십시오. 서식 파일에 대한 자세한 내용은 데이터를 가져오거나 내보내기 위한 서식 파일을 참조하십시오.

ms187042.note(ko-kr,SQL.100).gif참고:
대량 내보내기 또는 가져오기 작업 동안 서식 파일이 제공되지 않는 경우 사용자는 명령줄에서 기본 서식 지정을 무시하도록 선택할 수 있습니다.

SQL Server의 인스턴스로 데이터를 대량으로 가져오려면 bcp 유틸리티, BULK INSERT 문 및 INSERT ... SELECT * FROM OPENROWSET(BULK...) 문이 쿼리 프로세서와 함께 작동합니다.

3가지 방법을 모두 사용하여 OLE DB 행 집합으로 데이터 파일의 데이터를 변환할 수 있지만 변환 방법은 다음과 같이 서로 다릅니다.

  • bcp 유틸리티는 데이터 파일을 읽고, 데이터를 OLE DB 행 집합으로 변환하는 SQL Server의 BCP(대량 복사 프로그램) API로 TDS 스트림을 보냅니다. 
  • BULK INSERT 및 OPENROWSET 대량 행 집합 공급자는 모두 파일 데이터를 OLE DB 행 집합으로 직접 변환합니다. 

OLE DB 행 집합은 각 작업을 계획하고 최적화하는 쿼리 프로세서를 통해 대상 테이블에 삽입됩니다.

성능 고려 사항은 대량의 데이터를 가져올 때도 중요합니다. 어떤 경우에는 대량 가져오기나 대량 내보내기 작업에서 다음 중 하나 이상의 작업을 처리하는 방법을 변경하여 성능을 향상시킬 수 있습니다.

  • 일괄 처리 스위치
  • CHECK 제약 조건의 제약 조건 검사
  • 대량 트랜잭션이 기록되는 방식. 이는 일반적으로 전체 복구 모델을 사용하는 데이터베이스에 관련된 것입니다.
  • 내보낸 데이터 순서 지정
  • 병렬 데이터 가져오기
  • 테이블 잠금
  • 트리거 실행

자세한 내용은 대량 가져오기 성능 최적화를 참조하십시오.

ms187042.note(ko-kr,SQL.100).gif참고:
대량 내보내기 작업에 사용할 수 있는 특별한 최적화 기술은 없습니다. 이러한 작업은 단순히 SELECT 문을 사용하여 원본 테이블에서 데이터를 선택합니다.