엑시엄이 보는 DB 세상
DB 작업 자동화 1 1 4,636

by axiom Job Coordinator Job Table Scheduler Resource Plan [2013.04.23]


DBA는 혼자서 하나의 데이터베이스가 아닌 많은 데이터베이스를 관리한다. 그리고 개발자 혹은 시스템 관리자가 주 업무 이외에 DB를 같이 관리하는 회사도 많다.

그렇기 때문에 많은 작업을 자동화해 두지 않으면 업무가 무거워지고 시간에 쫓길 수밖에 없다. 이에 우리는 운영체제의 cron , Windows scheduled tasks 혹은 솔루션을 활용하고 있다.

DB 내의 정기적인 스케줄 작업이 데이터베이스가 운영 중일때뿐만 아니라 운영을 하지 않을 때도 필요한 작업이라면 운영체제나 솔루션의 자동화 기법을 이용하는 것이 맞을 것이다.

하지만 데이터베이스가 운영 중에만 필요하고 작동되는 작업들은 Oracle이 제공하는 기능을 활용하면 높은 보안성과 효율성 그리고 확장성을 가지고 자동화를 이뤄 낼 수 있다.

먼저 Oracle이 어떻게 Scheduler job을 실행하는지 [그림1]을 통해 한번 살펴보자.

  • [그림1] RAC Architecture and the Scheduler
  • RAC_Architecture_and_the_Scheduler

[그림1]은 RAC 환경을 나타낸 것으로, Oracle은 데이터베이스에서 하나의 Job Table을 가지고 있고 Instance별로 각각의 Job Coordinator 프로세스가 하나씩 있다.

각각의 Job coordinator 프로세스들은 서로 정보를 교환한다. Job coordinator는 memory cache에 있는 Job Table을 읽어 수행해야 될 job이 있으면 job slaves를 생성하고 관리한다.

Job slave는 job 실행에 필요한 metadata를 모은 뒤 job 소유자로 session을 열고 트랜잭션을 시작한다. 그리고 Job이 완료되면 commit해서 트랜잭션을 종료한 후 session을 닫는다.

이처럼 일반적으로 우리가 Job Table에 해야 할 일을 등록해두면 스크립트나 config 파일에 비밀번호 같은 보안성 정보를 유출시키지 않을 수 있으며 Oracle이 알아서 세션을 열고 트랜잭션을 수행하고 종료한다. Oracle에게 맡겨두고 우리는 Scheduler관련 Dictionary를 통해 작업 내역만 확인하면 될 것이다.

물론 Job Table에 해야 할 일을 등록하고 해당 작업을 성공적으로 수행하게 하기 위해서는 Scheduler Privileges, Object Privileges를 빠짐없이 부여해야 한다. 그리고 더욱 효율적인 작업을 원한다면 작업에 관여되는 Resource를 직접 관리할 수 있다.

우리는 Scheduler를 이용해 PL/SQL anonymous blocks, PL/SQL stored procedures, java stored procedure 등 이외에도 application, shell script, batch file 등과 같이 실행 가능한 외부 작업을 수행하도록 할 수 있다.

특정 날짜와 시간을 지정하는 방식과 이벤트를 지정하는 방식 그리고 의존적인 방식 세 가지를 사용해 시점을 지정할 수 있다.

11g에서 나온 Scheduler agent를 사용하면 Oracle database가 installation 되지 않은 하나 이상의 remote system에서도 예약 작업을 수행하도록 하는 것이 가능하다(R1은 remote external job을 실행할 수 있고 R2는 remote database job까지 수행할 수 있다).

이렇게 운영자는 Oracle Scheduler를 이용해 원하는 시점에 원하는 작업을 원하는 곳에서 실행하도록 할 수 있다.

많은 데이터베이스들은 동일한 작업이 분명히 반복될 것이다. 그리고 특정 데이터베이스에만 반복되는 작업이 있을 것이다. 단일 작업에 대한 계획은 고민을 많이 하지 않고서도 적용할 수 있다.

하지만 수많은 반복 작업을 Scheduler를 이용해 자동화하기 위해서는 계획을 세우는 것이 가장 어렵고 중요하다.

어떤 작업을 할 것인지 어떻게 그룹을 묶을 것인지 어떻게 시간을 지정할 것이며 Resource를 어떻게 배분할 것인지 등을 결정해야 한다.

계획을 세우는 작업 중 두 가지 Resource Plan과 Window를 살펴보자.

Resource PlanCPU, parallel degree limit, execution time limit, idle time limit 등 자원을 각각의 작업 그룹에 나눠 할당하는 것이며 Window Resource Plan에 스케줄 과 우선순위를 정해주는 것이다.

간단한 예를 [그림 2]와 [그림3]을 통해 살펴보자.

  • [그림2] Simple Resource Plan
  • Simple Resource Plan

[그림 2]는 Resource Plan을 어떻게 적용할 수 있는지를 보여준다.

Daytime이라는 Resource Plan을 만들어 거기에서 CPU의 75%는 OLTP, 15%는 Reporting, 10%는 OTHER_GROUPS consumer group에 할당해 준 그림이다.

  • [그림3]

[그림3]은 Window를 어떻게 적용할 수 있는지를 보여준다.

Window1을 이용해 오전 6시부터 11시까지 Resource Plan A를 적용했고 Window2를 이용해 오후 2시부터 8시까지는 Resource Plan B를 적용한 것이다.

많은 Scheduler object를 활용해 작업을 만들고 계획을 세우고 적용하기까지는 몇 주를 고생해야 하지만 적용된 이후 해당 데이터베이스들을 관리하는 혹은 관리하게 될 사람들은 앞으로 수년간 편안함을 느낄 수 있을 것이다.

어느 회사의 DB 관리를 맡게 되었을 때 이미 누군가가 해당기능을 통해 작업을 체계화해 스케줄 작업이 잘 적용되고 있다면 고마운 마음을 가지도록 하자.

그리고 적용되어 있지 않다면 고마운 마음을 받는 사람이 되도록 하자.

Oracle Scheduler에 대한 내용만 담은 책이 있을 정도로 이와 관련된 내용은 방대하고 활용할 수 있는 기능이 많다. 반복적인 업무에 시달리고 있는 많은 사람들이 Scheduler를 익혀 여유로움을 가질 수 있기를 바란다.

- 강좌 URL : http://www.gurubee.net/lecture/2264

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 초록짱 [2013.04.23 17:02:04]
유용한 정보 잘 보았습니다.^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입