데이터 대량 가져오기 작업 시의 트리거 실행 제어

트리거는 사용자가 테이블 또는 뷰에서 데이터를 수정할 때 자동으로 실행되는 특수한 형태의 저장 프로시저입니다. 트리거를 실행하면 대량 가져오기 작업의 성능이 저하될 수 있습니다. 예를 들어 레코드를 가져올 때마다 전자 메일 메시지를 보내는 트리거는 대량 가져오기 작업의 속도를 저하시키고 전자 메일 문제를 발생시킵니다.

데이터를 대량으로 가져오는 작업으로 인해 트리거가 실행(발생)되는지 여부를 제어할 수 있습니다. 대량 가져오기 작업의 경우 다중 행 삽입을 지원하는 INSERT 및 INSTEAD OF 트리거가 있는 테이블에만 트리거를 실행해야 합니다. 이러한 트리거에 대한 자세한 내용은 DML 트리거를 참조하십시오.

중요 정보중요

트리거가 비활성화되어 있을 때는 스키마 수정 잠금이 사용되어 메타데이터를 업데이트할 수 있습니다. 이 경우 다른 명령(예: 온라인 인덱스 작성) 또는 트랜잭션을 방해할 수 있습니다. 예를 들어 동시 DDL 변경으로 인해 대상 테이블에 액세스하는 스냅숏 격리 트랜잭션이 실패할 수 있습니다.

트리거는 활성화되면 일괄 처리당 한 번씩 실행됩니다.

대량 가져오기 작업 중 동작은 해당 작업에 사용된 명령에 따라 달라집니다. 기본적으로 bcp 명령 및 BULK INSERT(Transact-SQL) 문은 트리거를 비활성화합니다. 반대로 INSERT ... SELECT * FROM OPENROWSET(BULK...) 문의 경우에는 트리거를 실행하는 것이 기본값입니다.

다음 표에서는 기본 동작을 요약합니다.

대량 가져오기 명령

기본 동작

bcp

트리거 비활성화

BULK INSERT

트리거 비활성화

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

트리거 실행

각 대량 가져오기 명령은 다음 섹션에 설명된 바와 같이 트리거가 처리되는 방법을 변경할 수 있는 한정자를 제공합니다.

bcp 또는 BULK INSERT로 트리거 실행

기본적으로 bcp 명령 및 BULK INSERT 문은 트리거를 실행하지 않습니다. 그러나 다음 한정자를 사용하여 트리거를 활성화할 수 있습니다.

명령

한정자

한정자 유형

bcp

-h"FIRE_TRIGGERS"

힌트

BULK INSERT

FIRE_TRIGGERS

인수

FIRE_TRIGGERS가 대량 가져오기 작업에 지정되어 있으면 테이블에 삽입된 모든 행에 대해 테이블에 정의되어 있는 INSERT 및 INSTEAD OF 트리거를 실행합니다.

자세한 내용은 bcp 유틸리티BULK INSERT(Transact-SQL)를 참조하십시오.

INSERT ... SELECT * FROM OPENROWSET(BULK...)에서 트리거 비활성화

기본적으로 OPENROWSET 대량 행 집합 공급자는 트리거를 실행합니다. 다음 한정자를 사용하여 트리거를 비활성화할 수 있습니다.

명령

한정자

한정자 유형

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

WITH(IGNORE_TRIGGERS)

테이블 힌트

이 힌트가 지정되면 OPENROWSET 대량 행 집합 공급자에서 트리거를 실행하지 않습니다. IGNORE_TRIGGERS 힌트에 대한 자세한 내용은 테이블 힌트(Transact-SQL)를 참조하십시오.

트리거가 설정된 상태에서 큰 배치 가져오기

SQL Server 2005 이상 버전에서는 트리거에 대해 행 버전 관리를 사용하고 tempdb의 버전 저장소에 행 버전을 저장합니다. 트리거를 사용하여 큰 데이터 레코드 일괄 처리를 대량 가져오려면 먼저 트리거로 인한 버전 저장소의 영향을 수용하도록 tempdb의 크기를 확장해야 할 수 있습니다. 자세한 내용은 행 버전 관리 리소스 사용을 참조하십시오.