유닉스에는 정해진 시간에 반복되는 작업을 수행할 수 있는 Cron이라는 기능이 있다. 오라클에도 이런 기능이 있는데 바로 DBMS_JOB과 보다 확장된 DBMS_SCHEDULER 패키지이다.
1. DBMS_JOB
이 패키지를 사용하게 되면 SNP 백그라운드 프로세스가 작업을 수행하게 된다. SNP 백그라운드 포르세스는 선택적인 프로세스이기에 초기화 파라미터 파일에 아래 항목을 설정해주면 된다.
1) job_queue_processes : SNP 프로세스의 개수를 지정한다.
2) job_queue_interval : SNP 프로세스가 Sleep 상태에서 깨어나는 간격을 초로 지정한다.
다음은 job을 사용하는 과정이다.
우선 테스트용 테이블과 sequence, procedure를 생성해준다.
vi를 이용해서 job에 등록할 프로시저를 생성한다.
이 때 5번째 줄의 시간 설정은 다음과 같다.
job을 등록한다. 이 때 JNO는 job 번호이며 랜덤으로 지정된다.
commit 이후부터 job이 수행된다.
job이 수행되고 있는지 확인할 수 있으며 실제 테이블에 데이터가 입력되고 있는지도 확인할 수 있다.
job을 삭제하는 과정이다. JNO를 이용하면 된다.
등록되어 있는 job을 수정하는 과정이다.
우선 새로 등록을 해준다. 새로 등록된 JNO는 4임을 알 수 있다.
change를 통해 수행 시간(interval을 변경해주었으며 정상적으로 바뀌었음을 확인할 수 있다.
2. DBMS_SCHEDULER
Scheduler는 Job보다 확장된 기능들을 제공한다. Job과의 가장 큰 차이점은 Job에서는 불가능하던 외부 스크립트를 실행할 수 있다는 부분이다.
1) 주요 특징
- 오라클에서 생성된 프로시저나 함수 외에도 OS에서 생성된 각종 유틸, 프로그램까지도 실행할 수 있다.
- 다양한 설정을 할 수 있으며 설정할 때 자연어를 사용하여 편하게 설정할 수 있다.
- 데이터베이스 내부 이벤트까지 추적가능하기 때문에 OS나 Job보다 다양하게 작업을 수행할 수 있다.
2) 구성
다음과 같은 모듈 구조로 구성되어 있다.
- Program
dbms_scheduler가 수행할 프로그램이나 프로시저, 스크립트 등에 대한 정보를 저장해서 별도로 생성할 수 있다.
- Schedule
dbms_scheduler가 수행할 job이 실제 수행할 시간이나 실행 주기등을 생성할 수 있다.
- job
새로 생성할 job 부분을 정의한다.
다음은 dbms_scheduler를 사용하는 과정이다.
우선 권한을 주고 scott 계정으로 접속한다.
테이블과 sequence, procedure와 job까지 생성해준다.
job을 줄 단위로 해석해보자면 다음과 같다.
2 : 신규 job을 생성
3 : job 이름
4 : 5줄의 프로그램 타입 (PLSQL_BLOCK, EXECUTABLE, STORED_PROCEDURE 등)
5 : 실제 실행될 프로그램 (pl/sql, 실행파일, 프로시저 등)
6 : job이 처음 시작될 시간 (to_timestamp_tz를 사용해서 특정 시간에 시작하도록 지정할 수 있다.)
7 : 반복할 주기
실행해보면 위와 같이 제대로 실행되고 있음을 알 수 있다.
위와 같이 특정 job을 일시중지, 재시작, 삭제시킬 수 있다.
job과는 가증 크게 다른 외부 스크립트를 실행하는 방법은 다음과 같다.
우선 vi를 이용해서 externaljob.ora 파일을 수정해준다. 가장 아랫줄에 추가해주면 된다.
경로는 다음과 같다. /app/oracle/product/11g/rdbms/admin/externaljob.ora
수정 완료 후 파일의 권한을 640으로 설정해준다.
root로 로그인 해서 extjob 파일의 소유자를 oracle로 변경해준다.
이후 권한을 4750으로 바꾸어주어야 한다.
퍼미션이 -rwsr-x---로 나와야 한다.
이 파일의 경로는 다음과 같다. /app/oracle/product/11g/bin/extjob
만일 하나라도 빠진다면 퍼미션 에러(ORA-27369)가 나니 주의해야한다.
계정에 권한을 준다.
실행에 사용할 스크립트를 작성한다.
실행 권한을 부여받은 후 제대로 작동하는지 테스트해본다.
위 스크립트를 실행할 schedule과 job을 생성한다.
job을 실행시켜 제대로 실행되고 있음을 확인한 후 drop시켜준다.
drop시키지 않으면 10초마다 생성되므로 빠르게 삭제시켜준다.
schedule도 job의 속성을 변경할 수 있다.
set.attribute를 이용해서 interval을 변경시켜주었고 변경되었음을 확인할 수 있다.
'오라클 > 이론 및 실습' 카테고리의 다른 글
Oracle Net Service(2) - listener.ora (0) | 2019.07.10 |
---|---|
Oracle Net Service(1) - Listener (0) | 2019.07.10 |
사용자 관리 (0) | 2019.07.04 |
버전별 메모리 관리 기법 (0) | 2019.07.02 |
Oracle 저장 구조 - Extent와 Segment (0) | 2019.07.02 |