오라클 프로시저 성능 문제 0 1 3,015

by sw5716 [PL/SQL] Bulk insert [2017.05.11 14:48:32]


암호화function 을 사용하여 insert해야 합니다

컬럼을 읽지못하고 오로지 데이터만 읽어서

Fn.get(컬럼) --> 안됨

Fn.ger('1234567891234') --> 됨

커서로 SELECT 'INSERT INTO 를 만들어서 르로시져로 돌렸는데

속도가 너무 느리네요 

BULK로도 해봤지만

FOR CURSOR_C IN(SELECT .......)

LOOP 

BEGIN

        SQLI := 'INSERT '|| CURSOR_C.TT

COMMIT;

.

.

.

이거랑 속도 차이가 없는데 제가 코딩을 잘 못한건지 

전체 건수는 5백만건정도인데 분당 900건정도 들어갑니다

방법이 없을까요....

 

by 신이만든짝퉁 [2017.05.12 10:59:18]

데이터를 넣는 계정(select 하는 테이블을 소유한 계정)과 암호화 함수(fn)의 소유계정이 서로 다른계정인가요?

만약 그렇다면 암호화 함수 소유 계정에 데이터를 select하는 계정의 테이블(fn.get(컬럼)을 하는 테이블)을 select할 수 있도록 권한을 부여해 보십시오.

fn.get(컬럼명)이 가능해질 것으로 보입니다.

질문자님처럼 데이터를 넣을 때 다이나믹 sql을 사용하게 되면, 500만개의 insert 문이 생기므로 성능이 나빠지게 됩니다.

우선 앞서 설명처럼 컬럼을 조회할 수 있도록 권한을 부여하고

insert into 입력테이블(컬럼명) select fn.get(컬럼명) from 조회테이블;

이렇게 입력해 보시기 바랍니다.

가능하다면 해당 테이블의 인덱스를 제거하고, 테이블을 nologging 모드로 바꾼 뒤에 넣으면 더 효율적입니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입