MSSQL -> ORCAL 테이블 정보 이관관련 문의 드립니다. 효율적으로 할 수 있는 방법이 있을까요? 0 3 1,447

by 체로키블루 [SQLServer] 마이그레이션 오픈쿼리 [2018.07.05 15:24:41]


안녕하세요?

MSSQL에 약 9,000,000건의 데이터가 한 테이블에 있습니다. (파티션 없음)

이 정보를 간단하게 오픈쿼리를 사용해서 오라클 테이블로 insert 하는데 시간이 엄청 걸리더라구요.

혹시 데이터 이관작업 시 조금 효율적으로 할 수 있는 방법이 없을까요?

쿼리만 작성하고, 튜닝만 해봤지 이런 작업은 처음이라서 경험많은 선배님들께 조언을 듣고 싶습니다.

(SQL Developer 툴에 보면 마이그레이션 기능이 있어 확인 중 인데, 효율적인지는 모르겠네요..ㅠ)

by 우리집아찌 [2018.07.05 16:01:57]

MS-SQL에서 오라클로 넣으시나요?

SQL을 올려봐주세요.

1:1 로 심플한경우는 SQL*LOADER도 이용가능합니다.

아니면 100만건씩 자를수 있다면

세션 여러개 띄워놓고 따로 작업하는 방법도 있습니다. 서버가 성능이 받쳐주면요..

 

 

 


by 체로키블루 [2018.07.06 09:35:11]

항상 답변해 주셔서 감사합니다.

저도 빨리 답변달 수 있는 실력을 키워 구루비 활성화에 기여하도록 하겠습니다^^

 

SQL Server 테이블에 인덱스/파티션이 없어 오픈쿼리 실행 시 매번 테이블 스캔이 될지 몰라,

인덱스도 만들어 보고, 별도 테이블을 생성하여 일부 데이터만 넣고 진행해도 느리더라구요^^;

 

현재 상황은 아래와 같습니다.

 

--------아래--------

1. SQL Server DB WORK 테이블에 총 3,363,438건 / 일별 약 2,000건씩 데이터가 누적.

2. 이 데이터를 Oracle DB로 동일하게 테이블 생성 후 데이터를 이관필요.

3. 이를 위해 SQL Server에서 Linkdb를 Oracle과 연결.

4. 스크립트를 활용해 Oracle에 Work 테이블을 생성.

5. 이후 오픈쿼리를 사용하여 데이터 이동. 허나, 10분 이상 실행되어 취소.

**쿼리:

INSERT INTO OPENQUERY(DB_LINK_NAME, 'SELECT * FROM WORK')
SELECT * FROM WORK

6. 임시 테이블 생성 후 633,700건만 전송하기 위해 오픈쿼리 재 실행. 8분 이상 실행되어 취소

**쿼리:

INSERT INTO OPENQUERY(DB_LINK_NAME, 'SELECT * FROM WORK')
SELECT * FROM WORK_TEMP --약 633,700건의 데이터를 별도 이동시켜 진행


by 열심열심 [2018.07.06 10:17:55]

오라클 insert 받는 테이블을 nologging 한번 해보세요. 

서버 성능문제면 서버튜닝 해도되고요.(SGA,PGA, redolog 등등)

모두 디폴트 설정시에 대량 insert시 checkpoint not comeplete 엄청 뜨더라구요

 

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