최근에 30만건이 넘는 insert Query 를 돌려야 하는 상황이 발생을 했다.
옛날에는 몇천건 되는 sql 파일을 그냥 열고서 F5를 누르고 구동되면서 하염없이 떨어지는 쿼리들을 보곤 했는데..
1004lucifer
아무래도 sql파일을 통채로 돌리는게 있지 않을까 싶어 찾아보니 있었다.
1. 현재의 세션이 autocommit 상태인지 체크를 한다.
- show autocommit; <== 현재의 상태를 체크한다.
- set autocommit off; <== autocommit off 설정
- set autocommit on; <== autocommit on 설정
autocommit on 상태인경우 프로그램이 종료되거나 PC가 종료가 되더라도 롤백이 되지 않지만 속도가 많이 느려진다.
가급적 autocommit off 상태로 작업을 권장한다.
2. @path\scriptfile.sql 형식으로 sql 파일의 경로를 입력 후 실행한다.
1004lucifer
ex) sql 파일이 c드라이브의 test.sql 파일인경우
- @c:\test.sql
ex) 테스트용으로 사용한 test.sql 파일의 내용은 아래와 같다.
====================
select 1 from dual;
select 1 from dual;
select 1 from dual;
commit;
====================
시작 시 autocommit off 로 시작하는 환경에 파일 마지막에 commit; 을 붙여주지 않으면 작업자가 직접 'commit' 버튼을 눌러줘야 한다.
commit 버튼을 누르지 않으면 해당 테이블에 락이 걸리므로 꼭 파일 마지막에 commit; 문자열을 집어넣어준다.
장점
SQL Developer 에서 sql파일을 열어서 F5로 해당 쿼리들을 실행 시 프로그램이 메모리도 많이 잡아먹을 뿐 아니라 점점 시간이 지날수록 작업시간이 느려진다.
위의 방법으로 작업 시 원격의 DB서버에 30만건 이상의 insert 구문을 수행하는데 약 100분 정도가 걸렸다. :)
참고
http://stackoverflow.com/questions/31560367/how-to-run-sql-file-in-oracle-sql-developer-tool-to-import-database
댓글
댓글 쓰기