2010-06-07 4 views
3

누구든지 내가 착수 할 경험이 있는지 궁금합니다. 나는 크기가 GB 정도 인 여러 개의 CSV 파일을 가지고 있으며이를 오라클 데이터베이스에로드해야합니다. 로드 후 대부분의 작업은 읽기 전용이지만 수시로 업데이트를로드해야합니다. 기본적으로 난 단지 내 DB까지 한 번에 여러 행의 데이터를로드하기위한 좋은 도구가 필요합니다.많은 양의 데이터를 Oracle SQL 데이터베이스에로드

  1. 내가

  2. 내가 사용할 수 t이 많은 작업을 할 SQL 로더를 사용할 수 있습니다 대량 삽입

  3. 일부 명령 : 여기

    는 내가 지금까지 발견 한 것입니다 배치 삽입의 일종.

어쨌든 준비된 진술을 사용하는 것이 좋습니다. 모든 사람들이이 삽입물을 얻는 가장 빠른 방법이라고 생각하는 것이 궁금합니다. 어떤 팁?

답변

5

SQL*Loader Direct Path Loads을 능가하는 자신의 유틸리티를 롤업 할 수 있다면 매우 놀랄 것입니다. 오라클은 이러한 목적으로이 유틸리티를 구축했습니다.보다 효율적으로 무언가를 구축 할 가능성은 거의 없습니다. Parallel Direct Path Load도 있으며 여러 개의 직접 경로로드 프로세스를 동시에 실행할 수 있습니다. 수동에서

:

대신 바인드 배열 버퍼 을 작성하고 SQL의 INSERT 문 Oracle 데이터베이스 에 전달은 직접 경로로드는 에 직접 경로 API는 전달 사용 서버에있는 부하 엔진에로드 할 데이터. 로드 엔진 은 데이터가 전달 된 의 열 배열 구조를 만듭니다.

직접 경로로드 엔진은 열 배열 구조를 사용하여 오라클 데이터 블록을 포맷하고 인덱스 키를 작성합니다. 새로 포맷 된 데이터베이스 블록은 데이터베이스 (호스트 플랫폼이 비동기 입출력을 지원하는 경우 비동기 쓰기를 사용하는 I/O 요청 당 여러 블록)에 직접 기록됩니다.

내부적으로 여러 버퍼가 형식화 된 블록에 대해 으로 사용됩니다.하나의 버퍼가 채워지는 동안 호스트 플랫폼에서 비동기 I/O를 사용할 수 있으면 하나 이상의 버퍼가 기록됩니다. I/O가있는 중복 계산 은로드 성능을 높입니다.

직접 경로로드 cannot be used 경우가 있습니다.

+0

+1 우수 답변 –

0

데이터 양으로 dbsc 디스크의 여유 공간 인 백업 저장소를 확인하는 것이 좋습니다.

sqlldr은 SQL 스크립트보다 일반적으로 매우 효율적이며 스크립트 드라이브입니다. 내가 궁금해하는 것은 데이터의 크기뿐입니다. 필자는 개인적으로 여러 개의 sqlldr 프로세스를 고려하여 각 프로세스에 데이터의 하위 집합을 할당하고 프로세스를 병렬로 실행합니다.

한 번에 몇 개의 레코드를로드하고 싶다고하셨습니까? 생각보다 오래 걸릴 수 있습니다. 한 번에 몇 개의 파일을 의미 했습니까?

+0

필자는 데이터를 여러 파일로 나눠서 일을 병렬로 처리하려고했습니다. 한 번에 여러 레코드를 파이핑하는 것이 더 빠를 것이라고 생각했습니다. 각 레코드에 대해 서버와 상호 작용하는 오버 헤드가 없어야했기 때문입니다. – James

+1

@James - 고정 너비 파일을 SQL * Loader 또는 외부 테이블과 함께로드 할 수 있습니다. 따라서 파일을 내용별로 분리하십시오. 오라클을 시도하고 생각하지 마십시오. –

0

외부 테이블을 다른 테이블로 선택하여 CSV 파일에 외부 테이블을 만들고로드 할 수 있습니다. 이 방법이 더 빠를 지 확신 할 수 없지만 특히 UPDATE에 대한 기준이있을 때 SQL * 로더가 작동하도록하는 것이 더 쉽습니다.

관련 문제