Oracle에서 대량 데이터를 복사할 때 OracleBulkCopy를 사용할 수 있는데요, 결과를 보니 30,000개만 인서트가 된 것을 확인하였습니다.
그리하여 BatchSize를 60,000으로 설정하여 한 번에 많은 양의 데이터를 처리할 수 있도록 추가해 보았어요.
예시 코드
using (OracleBulkCopy bulkCopy = new OracleBulkCopy(oracleCommand.Connection))
{
bulkCopy.DestinationTableName = "TABLE_NAME"; // 대상 테이블 이름 설정
bulkCopy.BulkCopyTimeout = 600; // 타임아웃 설정 (초 단위)
bulkCopy.BatchSize = 60000; // 배치 사이즈 설정 (한 번에 60,000개 레코드 처리)
bulkCopy.NotifyAfter = 10000; // 10,000개 레코드마다 알림
bulkCopy.OracleRowsCopied += (sender, e) =>
{
Console.WriteLine($"{e.RowsCopied} rows copied so far.");
};
bulkCopy.WriteToServer(dataTable); // 데이터테이블을 서버로 복사
}
코드 설명
BatchSize: 배치 사이즈를60000으로 설정하여 한 번에 처리할 데이터를 확장합니다. 이 값은 테스트 후 시스템 리소스에 맞게 조정하는 것이 좋아요.BulkCopyTimeout: 타임아웃을 600초로 설정하여, 대량 데이터를 처리하는 동안 타임아웃 에러가 발생하지 않도록 합니다. 대량 데이터 처리 시 시간이 오래 걸릴 수 있으므로, 적절한 타임아웃 값을 설정하는 것이 중요해요.NotifyAfter: 이 설정을 통해 지정된 레코드 수(예: 10,000개)가 복사될 때마다 알림을 받을 수 있습니다. 이를 통해 진행 상황을 모니터링할 수 있습니다. 로그를 통해 복사 과정이 얼마나 진행되었는지 확인할 수 있어요.- 이벤트 핸들러 (
OracleRowsCopied): 복사된 행의 수를 출력하는 이벤트 핸들러를 추가하여 복사 진행 상황을 모니터링할 수 있습니다. 이를 통해 중간에 문제가 발생하는 경우 빠르게 파악할 수 있어요.
