XML 대량 로드 소개(SQLXML 4.0)
적용 대상: SQL Server Azure SQL Database
XML 대량 로드는 반구조화된 XML 데이터를 Microsoft SQL Server 테이블에 로드할 수 있는 독립 실행형 COM 개체입니다.
INSERT 문 및 OPENXML 함수를 사용하여 SQL Server 데이터베이스에 XML 데이터를 삽입할 수 있습니다. 그러나 대량의 XML 데이터를 삽입해야 하는 경우 대량 로드 유틸리티는 더 나은 성능을 제공합니다.
XML 대량 로드 개체 모델의 Execute 메서드는 다음 두 매개 변수를 사용합니다.
주석이 추가된 XSD(XML 스키마 정의) 또는 XDR(XML 데이터 축소) 스키마입니다. XML 대량 로드 유틸리티는 이 매핑 스키마와 스키마에 지정된 주석을 해석하여 XML 데이터를 삽입할 SQL Server 테이블을 식별합니다.
XML 문서 또는 문서 조각(문서 조각은 단일 최상위 요소가 없는 문서임). XML 대량 로드를 읽을 수 있는 파일 이름 또는 스트림을 지정할 수 있습니다.
XML 대량 로드는 매핑 스키마를 해석하고 XML 데이터를 삽입할 테이블을 식별합니다.
다음과 같은 SQL Server 기능을 잘 알고 있다고 가정합니다.
주석이 추가된 XSD 및 XDR 스키마. 주석이 추가된 XSD 스키마에 대한 자세한 내용은 주석이 추가된 XSD 스키마 소개(SQLXML 4.0)를 참조하세요. 주석이 추가된 XDR 스키마 에 대한 자세한 내용은 주석이 추가된 XDR 스키마(SQLXML 4.0에서는 사용되지 않음)를 참조하세요.
Transact-SQL BULK INSERT 문 및 bcp 유틸리티와 같은 SQL Server 대량 삽입 메커니즘 자세한 내용은 BULK INSERT(Transact-SQL) 및 bcp 유틸리티를 참조하세요.
XML 데이터 스트리밍
원본 XML 문서가 클 수 있으므로 대량 로드 처리를 위해 전체 문서를 메모리로 읽어 오지는 않습니다. 대신 XML 대량 로드에서 XML 데이터를 스트림으로 해석하고 읽습니다. 유틸리티는 데이터를 읽을 때 데이터베이스 테이블을 식별하고 XML 데이터 원본에서 적절한 레코드를 생성한 다음 삽입을 위해 레코드를 SQL Server로 보냅니다.
예를 들어 다음 원본 XML 문서는 Customer> 요소와 <Order> 자식 요소로 구성됩니다.<
<Customer ...>
<Order.../>
<Order .../>
...
</Customer>
...
XML 대량 로드는 <Customer> 요소를 읽을 때 Customertable에 대한 레코드를 생성합니다. /Customer> 엔드 태그를 <읽는 경우 XML 대량 로드는 해당 레코드를 SQL Server의 테이블에 삽입합니다. 마찬가지로 Order> 요소를 읽을< 때 XML 대량 로드는 Ordertable에 대한 레코드를 생성한 다음 /Order> 끝 태그를 읽을 <때 해당 레코드를 SQL Server 테이블에 삽입합니다.
Transacted 및 Nontransacted XML 대량 로드 작업
XML 대량 로드는 트랜잭션 모드 또는 비트랜잭션 모드에서 작동할 수 있습니다. 트랜잭션되지 않은 모드에서 대량 로드하는 경우 성능이 일반적으로 최적입니다. 즉, Transaction 속성이 FALSE로 설정되고 다음 조건 중 하나가 true입니다.
데이터를 대량 로드되는 테이블이 인덱스 없이 비어 있습니다.
테이블에 데이터와 고유한 인덱스가 있습니다.
트랜잭션이 아닌 방법을 사용하면 대량 로드 프로세스에서 문제가 발생할 경우 부분 롤백은 발생할 수 있어도 롤백이 보장되지 않습니다. 트랜잭션이 아닌 대량 로드는 데이터베이스가 비어 있을 때 적합합니다. 따라서 문제가 발생하면 데이터베이스를 정리하고 XML 대량 로드를 다시 시작할 수 있습니다.
참고 항목
변환되지 않은 모드에서 XML 대량 로드는 기본 내부 트랜잭션을 사용하여 커밋합니다. Transaction 속성이 TRUE로 설정된 경우 XML 대량 로드는 이 트랜잭션에 대한 커밋을 호출하지 않습니다.
Transaction 속성이 TRUE로 설정된 경우 XML 대량 로드는 매핑 스키마에서 식별되는 각 테이블에 대해 하나씩 임시 파일을 만듭니다. XML 대량 로드는 먼저 원본 XML 문서의 레코드를 이러한 임시 파일에 저장합니다. 그런 다음 Transact-SQL BULK INSERT 문은 파일에서 이러한 레코드를 검색하고 해당 테이블에 저장합니다. TempFilePath 속성을 사용하여 이러한 임시 파일의 위치를 지정할 수 있습니다. XML 대량 로드와 함께 사용되는 SQL Server 계정에 이 경로에 대한 액세스 권한이 있는지 확인해야 합니다. TempFilePath 속성을 지정하지 않으면 TEMP 환경 변수에 지정된 기본 파일 경로가 임시 파일을 만드는 데 사용됩니다.
Transaction 속성이 FALSE(기본 설정)로 설정된 경우 XML 대량 로드는 OLE DB 인터페이스 IRowsetFastLoad를 사용하여 데이터를 대량 로드합니다.
ConnectionString 속성이 연결 문자열 설정하고 Transaction 속성이 TRUE로 설정된 경우 XML 대량 로드는 자체 트랜잭션 컨텍스트에서 작동합니다. 예를 들어 XML 대량 로드는 자체 트랜잭션을 시작하고 적절하게 커밋하거나 롤백합니다.
ConnectionCommand 속성이 기존 연결 개체와의 연결을 설정하고 Transaction 속성이 TRUE로 설정된 경우 XML 대량 로드는 성공 또는 실패 시 COMMIT 또는 ROLLBACK 문을 실행하지 않습니다. 오류가 있으면 XML 대량 로드는 해당 오류 메시지를 반환합니다. COMMIT 또는 ROLLBACK 문을 발급하는 결정은 대량 로드를 시작한 클라이언트에 맡깁니다. XML 대량 로드에 사용되는 연결 개체는 ICommand 형식이거나 ADO 명령 개체여야 합니다.
SQLXML 4.0에서는 Transaction 속성이 FALSE로 설정된 상태에서 ConnectionObject를 사용할 수 없습니다. 전달된 세션에서 둘 이상의 IRowsetFastLoad 인터페이스를 열 수 없으므로 전송되지 않은 모드는 ConnectionObject에서 지원되지 않습니다.