행위

동일 테이블에 병렬로 입력 하는 방법

DB CAFE

thumb_up 추천메뉴 바로가기


동일 테이블에 병렬로 입력 하는 방법[편집]

  1. Oracle에서 파티션 테이블을 이용하여 데이터를 병렬로 입력하는 방법
  2. 파티션 테이블은 데이터를 물리적 또는 논리적 파티션으로 분할한 테이블입니다.
  3. 아래 예시에서 INSERT INTO ... SELECT 문을 사용하여 병렬로 데이터를 입력하는 방법을 보여줍니다.
-- 파티션 테이블 생성
CREATE TABLE sales (
    sale_id NUMBER,
    sale_date DATE,
    product_id NUMBER,
    quantity NUMBER
)
PARTITION BY RANGE (sale_date) (
    PARTITION sales_202301 VALUES LESS THAN (TO_DATE('2023-02-01', 'YYYY-MM-DD')),
    PARTITION sales_202302 VALUES LESS THAN (TO_DATE('2023-03-01', 'YYYY-MM-DD'))
);

-- 병렬로 데이터 입력
-- 세션 1에서 데이터 입력 
ALTER SESSION ENABLE PARALLEL DML;
INSERT /*+ APPEND PARALLEL(sales, 4) */ INTO sales
SELECT sale_id, TO_DATE('2023-01-15', 'YYYY-MM-DD'), product_id, quantity FROM sales_data_january;
commit; -- 커밋을 해야 다른세션에서도 커밋이 가능하다 


-- 세션 2에서 데이터 입력 
ALTER SESSION ENABLE PARALLEL DML;
INSERT /*+ APPEND PARALLEL(sales, 4) */ INTO sales
SELECT sale_id, TO_DATE('2023-02-15', 'YYYY-MM-DD'), product_id, quantity FROM sales_data_february;
commit;
  • ORA-12838 : 병렬로 수정한 후 객체를 읽거나 수정할 수 없습니다. 오류 발생시 커밋 여부를 확인할것. 같은 세션에서도 커밋하지 않으면 조회도 불가능하다.


  1. ALTER SESSION ENABLE PARALLEL DML 문을 사용하여 세션을 병렬 DML 모드로 변경합니다.
  2. INSERT 문에 /*+ APPEND PARALLEL(table_name, degree_of_parallelism) */ 힌트를 추가하여 병렬로 데이터를 입력하도록 지시합니다.
    table_name은 파티션 테이블의 이름이며 degree_of_parallelism은 병렬로 실행될 프로세스 수를 나타냅니다.
  3. 각 세션은 다른 데이터 범위(월)에 대한 입력을 수행합니다. 이렇게 하면 데이터가 서로 충돌하지 않고 병렬로 처리됩니다.
  • 반드시 데이터 입력 작업을 테스트하고 성능 튜닝을 위해 적절한 병렬 처리 수를 설정해야 합니다.