[Oracle] bulk copy count 30000 해결 방법?

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);                    // 데이터테이블을 서버로 복사
}

코드 설명

  1. BatchSize: 배치 사이즈를 60000으로 설정하여 한 번에 처리할 데이터를 확장합니다. 이 값은 테스트 후 시스템 리소스에 맞게 조정하는 것이 좋아요.
  2. BulkCopyTimeout: 타임아웃을 600초로 설정하여, 대량 데이터를 처리하는 동안 타임아웃 에러가 발생하지 않도록 합니다. 대량 데이터 처리 시 시간이 오래 걸릴 수 있으므로, 적절한 타임아웃 값을 설정하는 것이 중요해요.
  3. NotifyAfter: 이 설정을 통해 지정된 레코드 수(예: 10,000개)가 복사될 때마다 알림을 받을 수 있습니다. 이를 통해 진행 상황을 모니터링할 수 있습니다. 로그를 통해 복사 과정이 얼마나 진행되었는지 확인할 수 있어요.
  4. 이벤트 핸들러 (OracleRowsCopied): 복사된 행의 수를 출력하는 이벤트 핸들러를 추가하여 복사 진행 상황을 모니터링할 수 있습니다. 이를 통해 중간에 문제가 발생하는 경우 빠르게 파악할 수 있어요.
이전최근
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗