automating tasks with scheduler - dbguide.net · 2005-07-27 · automating tasks with scheduler 1...

32
Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록 김선욱 한국오라클 () 제품지원실 Getting the most out of MetaLink Automating Tasks with Scheduler 이번 세미나에서는 10g의 New Feature중 하나인 Scheduler의 개념과 사용법에 대해서 살펴보도록 하겠습니다. 이 세미나의 목적은 SCHEDULER를 사용하여 DBA업무를 간소화 하는데 있습니다.

Upload: others

Post on 20-Mar-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 1

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

김선욱

한국오라클 (주) 제품지원실

Getting the most out of MetaLink

Automating Taskswith Scheduler

이번 세미나에서는 10g의 New Feature중 하나인 Scheduler의 개념과 사용법에 대해서 살펴보도록

하겠습니다.

이 세미나의 목적은 SCHEDULER를 사용하여 DBA업무를 간소화 하는데 있습니다.

Page 2: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 2

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

1. Introduction to Scheduler2. Scheduler - Jobs3. Scheduler - Programs4. Scheduler – Schedules5. Scheduler – Job Classes 6. Scheduler – Windows7. Managing Scheduler Components8. How to Retrieve the Info of Scheduler9. Summary

INDEX

오늘 진행할 세미나의 목차는 다음과 같습니다.

1. Introduction to Scheduler2. Scheduler 의 Jobs3. Scheduler 의 Programs4. Scheduler 의 Schedules5. Scheduler 의 Job Classes 6. Scheduler 의 Windows7. Managing Scheduler Components8. How to Retieve the info of Scheduler9. Summary

Page 3: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 3

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Introduction to SchedulerScheduling Needs

Compute table & indexstatistics twice a day

Run daily jobto backup database

Create month-endReport on the last day

Of each Month

Check for queuedEvents every 10 min.

Start the batch load at 4AM

Generate daily reportOn invalid serverAccess attempts

Replicate table datavia materialized view

refreshes

• Oracle Scheduler의 소개.

왜 scheduler가 필요할까요?

일상적인 DB관리업무 혹은 APPLICATION LOGIC은 “특정 작업을 일정한 간격으로 실행함” 을 필요로 합니다.

예를 들어 어떤 BUSINESS행사기간에 평상시보다 많은 리소스지원을 가지고 최우선 처리되어야 할 작업이 존재할 수있습니다. 이를 위해 DBA는 특정 시간대에 DB관리업무를 지원할 수 있어야 하는데, 이러한 작업들은 보통 복잡하고 오랜작업시간을 요구합니다.

이런 측면에서 ORACLE 10g는 DATABASE SCHEDULER를 통해서, 이전 제품보다 뛰어난 성능의 스케쥴링 기능을지원합니다.

이 기능은 DBMS_SCHEDULER 패키지를 통해서 제공되며, 기존의 DMBS_JOB 패키지보다 더 많은 기능을 포함하고있습니다

Page 4: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 4

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Introduction to Scheduler (Cont’d)Scheduler Concepts

Program Job Schedule

Job Class Window

ResourceConsumer Group

ResourcePlan

WindowGroup

Arguments Arguments

• Scheduler의 개념과 구조

Scheduler는 oracle환경에서 작업을 관리하기 위해 모듈화 된 접근방법을 제공합니다. 하나의 업무를 시간/위치/객체 등의모듈로 나누어 관리측면에서 보다 쉽게 접근할 수 있습니다. 각각의 이름은 DB내에서 Unique해야 합니다.

Scheduler의 기본 Component 객체는 Program, Job, Schedule 과 같이 3가지의 객체로 구성이 됩니다.

• PROGRAM

수행 가능한 파일, 스크립트나 프로시져들에 대한 META DATA의 집합입니다. 즉, 이 객체를 통해서 사용자는 “무엇”을수행할 것인지 결정합니다.

• SCHEDULE

“언제” 그리고 “얼마나 자주” JOB을 수행할 것인가를 결정합니다. 사용자는 생성된 SCHEDULE을 JOB과 별도로 생성한 뒤, 하나 혹은 여러 개의 JOB에서 사용할 수 있습니다.

• JOB

PROGRAM과 SCHEDULE을 통해 “무엇”을 “언제” 실행할 것인가를 정의합니다. 여기서 “무엇”은 PL/SQL 프로시져, BINARY 실행화일, JAVA APPLICATION, SHELL SCRPT등 이 될 수 있습니다. 사용자는 이 부분에서 미리 생성된 PROGRAM과SCHEDULE을 사용할 수 있습니다. 혹은 직접 ARGUMENT를 직접 입력 함으로서 CUSTOMIZED된 JOB을 생성할 수도있습니다.

Page 5: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 5

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Introduction to Scheduler (Cont’d)Scheduler Concepts

Program Job Schedule

Job Class Window

ResourceConsumer Group

ResourcePlan

WindowGroup

Arguments Arguments

• 고급 component의 종류

JOB CLASS는 JOB들의 모임, 즉 동일한 RESOURCE를 요구하는 JOB의 모임을 정의합니다. 하나의 JOB은 하나의 JOB CLASS에 속할 수 있으며, 이 JOB CLASS는 유사한 JOB들을 하나의 그룹으로 관리합니다.

RESOURCE CONSUMER GROUP은 하나 혹은 다수의 JOB CLASS와 짝지어질 수 있습니다. RESOURCE CONSUMER GROUP은 공통된 RESOURCE를 요구하는 USER SESSION의 그룹을 지정하는데, JOB CLASS는 반드시 하나의RESOURCE CONSUMER GROUP에 속해야 합니다. 다시 말해 JOB CLASS와 연관된 RESOURCE CONSUMER GROUP은JOB 혹은 JOB CLASS에 할당되는 RESOURCE를 결정합니다.

RESOURCE PLAN은 RESOURCE CONSUMER GROUP에게 얼만큼의 RESOURCE를 부여할 것인가를 결정합니다. RESOURCE CONSUMER GROUP과 RESOURCE PLAN은 사실 ORACLE에서 제공되는 별도의 CONFIGURATION 내용이므로 이 두 COMPONENT들은 본 세미나에서 자세히 다루지 않습니다. 추가 자료를 원하시는 경우라면METALINK에서 관련문서를 검색하시기 바랍니다.

WINDOW는 시작과 종료시간으로 정의되는 “특별한 시간의 구역”안에서 다른 RESOURCE PLAN을 할당하게 합니다. 예를들자면 대학의 수강신청 기간 동안에는 다른 업무보다 수강신청에 대한 업무가 가장 우선되어야 할 것입니다. 사용자는WINDOW의 주기를 설정하기 위해 SCHEDULE을 사용할 수도 있습니다.

WINDOW GROUP은 WINDOW의 모임을 나타냅니다. 예를 들어 평상시보다 많은 RESOURCE를 가지고 매일 야간, 그리고매주 주말에 BACKUP을 수행하고 한다면, NIGHT WINDOW와 WEEKEND WINDOW….. 2개의 WINDOW를 사용하여MAINTENANCE WINDOW GROUP을 만들고 BACKUP JOB을 수행하게 하는 것입니다.

Page 6: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 6

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Introduction to Scheduler (Cont’d)Privileges for Scheduler Components

CREATE [ANY] JOBEXECUTE ANY PROGRAMEXECUTE ANY CLASSMANAGE SCHEDULER

EXECUTE ON<program or class>ALTER ON<job, program, or schedule>ALL ON<job, program, schedule, or class>

CREATE JOBCREATE ANY JOBEXECUTE ANY PROGRAMEXECUTE ANY CLASSMANAGE SCHEDULER

System and Object privileges SCHEDULER_ADMIN role

• SCHEDULER COMPONENT를 사용하기 위한 권한

첫번째. 사용자의 SCHEMA에 기본 COMPONENT인 JOB, PROGRAM, SCHEDULE을 생성하기 위해서는 CREATE JOB권한이 필요합니다. 고급 사항인 WINDOW, JOB CLASS, WINDOW GROUP등을 생성하기 위해서는 MANAGE SCHEDULER 권한이 필요로 합니다.

두번째. 다른 사용자로 하여금, 나의 SCHEDULER 객체를 사용하게 허용한다면 EXECUTE 권한을, 혹은 변경하는작업까지 허락한다면 ALTER 권한까지 부여합니다.

여기서 주의할 사항이 있는데요, 실제로 사용자가 JOB, PROGRAM, SCHEDULE을 만들게 되면 이 COMPONENT는사용자의 SCHEMA에 저장되지만, JOB CLASS, WINDOW, WINDOW GROUP등은 자동으로 SYS SCHEMA에 위치하게됩니다.

세번째. SCHEDULER 관리자로서

- JOB CLASS, WINDOW, WINDOW GROUP등을 CREATE, ALTER, DROP하거나,

- JOB을 STOP (FORCE OPTION 사용도 가능)하고,

- WINDOW를 예정에 앞서 START하거나 STOP 할 수 있는 역할을 원한다면 MANAGE SCHEDULER 권한 하나로 방금

언급한 모든 작업을 대신할 수 있습니다.

권한외에 SCHEDULER_ADMIN 이라는 이름을 가진 ROLE도 SCHEDULER의 설정에 연관되어 있는데, 이 ROLE은 앞서언급한 모든 권한을 “WITH ADMIN OPTION 절로 포함하고 있습니다. 이 ROLE은 기본적으로 DBA ROLE에 포함되어있습니다.

Page 7: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 7

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler - JobsThere are many ways to create a Job

– Specifying the components in-line as part of the CREATE_JOB procedure

– Specifying the task directly and using a saved schedule– Calling a saved program and a saved schedule– Calling a saved program and specifying the schedule directly

• COMPONENT의 사용법

앞서 말씀 드린 바와 같이 Job을 만드는 방법에는 크게 2가지 방법이 있습니다.

SCHEDULE과 PROGRAM이라는 2개의 객체에 대해서 기존에 생성된 SCHEDULE과 PROGRAM을 사용하거나, 각

항목을 KEY-IN형식으로 입력하는 방법이 있습니다.

따라서 이 2가지 방법을 조합하면 크게 4가지 방법으로 job을 생성할 수 있습니다.

즉,

1. Program과 schedule 모두 job생성시 직접 입력해주는 방법.

2. “무엇”을 할 것인가를 직접 입력하고, 기존에 생성해둔 schedule을 사용하는 방법.

3. 생성해 둔 program과 schedule을 사용하여 job을 생성하는 방법.

4. 생성해 둔 program을 사용하고, “언제”/”얼마나 자주” 를 직접 입력하는 방법

등이 있습니다.

Page 8: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 8

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – Jobs (Cont’d)Creating a Job• A job defined entirely by the CREATE_JOB procedure

BEGIN

DBMS_SCHEDULER.create_job (job_name => 'test_self_contained_job',job_type => 'PLSQL_BLOCK',job_action => 'BEGIN DBMS_STATS.gather_schema_stats(''JOHN''); END;',start_date => SYSTIMESTAMP,repeat_interval => 'freq=hourly; byminute=0',comments => 'Job created using the CREATE JOB procedure.');End;/

Create a job that calls DBMS_STATS.gather_schema_stats() every hour

• JOB 의 생성

CREATE_JOB()프로시져를 통해, PROGRAM과 SCHEDULE 내용 모두를 직접 입력하여 JOB을 생성해보도록

하겠습니다.

프로시져안의 PARAMETER는 그 이름만으로도 내용을 짐작할 수 있을 만큼 직관적이므로, 이해하는데 큰 어려움은

없을 것입니다. 이 예제를 본다면 JOB의 이름을 지정하는 JOB_NAME 파라미터, JOB이 시작되는 시일을 지시하는

START_DATE, 반복간격을 지시하는 REPEAT_INTERVAL 등 쉽게 이해할 수 있도록 디자인 되었습니다.

다만 이 경우는 JOB_TYPE의 내용이 모호할 듯 한데, 이 PARAMETER는 다음과 같이 3가지 값 중에서 하나를

가집니다.

1. PLSQL_BLOCK: 누구나 수행할 수 있는 PL/SQL블록을 의미합니다.

2. STORED_PROCEDURE: 유효한 이름으로 명명된 PL/SQL, JAVA, 혹은 외부 프로시져를 사용할 때 지정합니다.

3. EXECUTABLE: COMMAND LINE에서 수행 가능한 COMMAND를 나타냅니다.

그럼 화면의 예제를 좀 더 자세히 살펴보겠습니다. 이 JOB은 JOB_NAME 파라미터에 언급된 것 과 같이

TEST_SELF_CONTAINED_JOB이라는 이름을 가지고 있습니다. 그리고 JOB_TYPE 파라미터에서 PROGRAM 내용이

PL/SQL BLOCK임을 명시한 뒤, JOB_ACTION에서 수행할 PL/SQL CODE를 입력합니다.

START_TIME 파라미터의 값이 SYSTIMESTAMP이므로 JOB최초 실행시 바로 작업이 수행되며, REPEAT_INTERVAL의

값과 같이 매시간마다 반복해서 위 작업을 수행합니다. END_DATE 파라미터가 설정되어 있지 않으므로 위 작업은

유효 기간 없이 최초 수행 후, 매 1시간마다 수행되게 됩니다. COMMENTS 파라미터는 COMPONENT에 대한 설명을

언급하는 부분입니다.

Page 9: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 9

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – Jobs (Cont’d)Creating a Job• A job defined entirely by an existing program and schedule

BEGIN

DBMS_SCHEDULER.create_job (job_name => 'test_program_schedule_job',program_name => 'test_plsql_block_program',schedule_name => 'TEST_SCHEDULE',comments => 'Job created using an existing program and schedule.');

End;/

• 이미 생성된 PROGRAM과 SCHEDULE을 이용한 JOB 생성

이 예제에서의 JOB은 JOB_NAME 파라미터에서 설정한 바와 같이 TEST_PROGRM_SCHEDULE_JOB이라는 이름을가집니다.

PROGRAM_NAME에서는 이미 생성된 ‘TEST_PLSQL_BLOCK_PROGRAM’이라는 PROGRAM을 , 같은 방식으로TEST_SCHEDULE이라는 SCHEDULE을 SCHEDULE_NAME 파라미터에서 참조하고 있습니다.

Page 10: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 10

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – Jobs (Cont’d)Setting the repeat Interval for a job• Using a calendaring expression

• Using a datetime expression

repeat_interval=> ’FREQ=HOURLY; INTERVAL=4’repeat_interval=> ’FREQ=DAILY’repeat_interval=> ’FREQ=MINUTELY; INTERVAL=15’repeat_interval=> ’FREQ=YEARLY; BYMONTH=MAR,JUN,SEP,DEC;

BYMONTHDAY=15’

repeat_interval=> ’SYSDATE + 1’repeat_interval=> ’SYSDATE + 15/(1440)’

• JOB에서 작업 수행간격을 지정하는 방법

이 항목은 엄밀히 말하면 SCHEDULE COMPONENT에 대한 내용입니다만, JOB에서 SCHEDULE 내용을 직접 입력할 수있으므로, JOB COMPONENT와 함께 살펴보겠습니다.

JOB에 이 파라미터를 직접 입력하는 경우라면, REPEAT_INTERVAL값으로 화면에 보이는 바와 같이 CALEDNDARING EXPRESSION과 DATETIME EXPRESSION 2가지 표현형식을 사용할 수 있습니다.

그러나 SCHEDULE COMPONENT를 생성할 때라면 CALENDARING EXPRESSION만 사용이 가능하므로, 간단히DATETIME EXPRESSION대신 CALENDARING EXRESSION만 생각해두셔도 좋습니다. 한가지 더, REPEAT_INTERVAL이언급되지 않았다면 이 JOB은 1회성 JOB임을 나타냅니다.

먼저 CALENDARING EXPRESSION을 살펴보면,

repeat_interval=> ’FREQ=HOURLY; INTERVAL=4’ (매 4시간 간격을 나타냅니다.)

repeat_interval=> ’FREQ=DAILY’ (매일을 실행됨을 나타내는데, 실제 수행시간은 최초로

SCHEDULE이 시작된 시간이 적용되게 됩니다. )

repeat_interval=> ’FREQ=MINUTELY; INTERVAL=15’ (매 15분의 간격을 나타냅니다.)

repeat_interval=> ’FREQ=YEARLY; BYMONTH=MAR,JUN,SEP,DEC; BYMONTHDAY=15’(매 분기 마지막 달의 15일 수행됨을 나타냅니다.)

이어서, DATETIME EXPRESSION을 살펴보도록 하겠습니다.

repeat_interval=> ’SYSDATE + 1’ (FREQ=DAILY와 같은 내용으로 다음날 수행됨을 지정합니다.)

repeat_interval=> ’SYSDATE + 15/1440’ (여기서 1440은 24시간을 다시 60분으로 곱한 값이므로,

결과적으로 15분 후 재실행을 의미합니다. )

CALENDARING EXPRESSION을 사용하는 경우에는 작업 사이의 시간 간격을 언급하는 반면, DATETIME EXPRESSION 에서는 다음 실행시간을 언급합니다.

Page 11: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 11

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – Jobs (Cont’d)Calendaring Expressions

BYMONTHBYWEEKNOBYYEARDAYBYMONTHDAYBYDAYBYHOURNYMINUTEBYSECOND

YEARLYMONTHLYWEEKLYDAILYHOURLYMINUTELYSECONDLY

INTERVAL(1~999)

Frequency Interval Specifiers

• Calendaring Expression

Scheduler에서는 이 calendaring expression을 기본적으로 사용합니다. 그럼 이 calendaring expression에 대해서

조금 더 살펴보도록 하겠습니다.

Calendaring expression은 크게 3부분으로 구성되어 있습니다.

1. Frequency (mandatory)

2. Repeat Interval

3. Specifiers

Frequency를 기준으로 Repeat Interval과 Specifies항목을 조합하여, 주/일/시/분/초 단위로 job실행을 지정합니다.

간단한 예를 들어보면

• 격 주 : FREQ=WEEKLY; INTERVAL=2

• 매5분 : FREQ=MINUTELY; INTERVAL=5

• 매 초 : FREQ=SECONDLY 가 됩니다.

좀 더 복잡한 설정을 원하시는 경우라면 Specifiers의 BY* 절을 사용하시기 바랍니다. BY*절을 사용하면 “4주 마다

화요일”, “매주 화요일 6:24AM” 등의 설정이 가능해집니다.

“4주째 화요일”의 경우는 FREQ=YEARLY; BYWEENO=4,8,12,16,20,24,28,32,36,40,44,48,52 BYDAY=TUE;

“매주 화요일 아침 6:24”의 경우는 FREQ=WEEKLY;BYDAY=TUE; BYHOUR=6;BYMINUTE=24;

Page 12: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 12

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – ProgramsCreating a Program

BEGIN

DBMS_SCHEDULER.create_program (program_name => 'test_schema_program',program_type => ‘stored_procedure',program_action => ‘HR.UPDATE_SCHEMA_STATS',comments => ‘ A program using a stored procedure');

END;/

• PROGRAM COMPONENT

PROGRAM은 JOB을 구성하는 데 있어서 “무엇”에 해당하는 COMPONENT입니다.

이 예제에서 보시는 바와 같이, PROGRAM을 생성할 때에는 CREATE_PROGRAM() 프로시져를 사용합니다.

PROGRAM_NAME 파라미터를 이용하여 TEST_SCHEMA_PROGRAM이라는 PROGRAM이름을 지정하였으며, 3가지PROGRAM_TYPE 중에서 STORED_PROCEDURE를 사용하고 있습니다.

PROGRAM_ACTION에서는 실제로 수행될 HR스카마에 위치한 UPDATE_SCHEMA_STATS프로시져의 이름을지정하였습니다.

Page 13: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 13

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – ProgramsCreating a Program Using EM

이 화면은 EM을 사용하여 PROGRAM을 생성하는 화면을 보여주고 있습니다. EM을 사용하면 SCHEDULER에 대한 모든작업을 GUI환경에서 편리하게 설정할 수 있습니다.

보시는 화면은 바로 앞 슬라이드에서 수행했던 PROGRAM COMPONENT 생성 작업을, EM에서 동일하게 실행하는 위치를보여주고 있습니다.

EM의 HOME화면에서 “관리탭>스케쥴러영역에서 프로그램항목 선택하고, 생성 버튼을 클릭”합니다.

CREATE_PROGRAM()프로시져에서 입력하는 PARAMETER 값을 각 TEXT FILED혹은 FULL-DOWN MENU를 통해서입력할 수 있습니다.

Page 14: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 14

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – SchedulesSpecifying Schedules for a Job

Example schedules• Wednesday, December 26, 2003, at 2PM• Every Monday at 8AM, starting on Jan 29, ending Mar 31

Schedule One Time Job

Repeating Job

EndTime

StartTime

• SCHEDULE COMPONENT

Schedule은 CREATE_SCHECULE()프로시져를 사용하여 생성합니다. 이렇게 생성된 schedule은 다수의 job 혹은window에서 참조사용이 가능합니다.

Schedule을 생성할 때에는 몇 가지 주의사항이 있다.

1. Start time과 end time을 언급할때, 사용할 때 사용하는 시간은 TIMESTAMP WITH TIME ZONE 데이터타입을

사용합니다.

2. Repeat_interval설정에는 calendaring exression만 사용합니다. (Job에서 COMPONENT 직접 생성시 Calendaring

expression 외에 Datetime exression했던 것과 다릅니다.)

위 diagram에서 옅은 녹색은 기본 parameter이고, 진한 청녹색은 추가 parameter라고 생각하시면 됩니다.

repeat_interval 설정을 하지 않으면 1회성 작업으로 인식합니다. Repeat설정을 하게 될 경우라면 Start Time을

명시해야 합니다.

End Time을 설정하지 않는 경우라면 주어진 interval을 기준으로 계속해서 실행되지만 End Time을 설정하게 되면,

End Time 이후에는 schedule 자체가 비활성화 됩니다.

TIME STAMP WITH TIME ZONE은 시간대 정보를 저장할 수 있으므로, 특히 지리적으로 서로 떨어져 있는 곳의

날짜정보를 수집/조정을 거쳐 기록해야 하는 경우 적합합니다.

Page 15: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 15

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – Schedules (Cont’d)Creating a Schedule

BEGINDBMS_SCHEDULER.CREATE_SCHEDULE( -schedule_name => ‘stats_schedule’, -start_date => SYSTIMESTAMP, end_date => SYSTIMESTAMP + 30, -repeat_interval => ’FREQ=HOURLY;INTERVAL=4’,-comments => ’Every 4 hours’);/

• Schedule의 생성

Job 생성시 실행시간을 직접 입력하는 것 대신 이렇게 schedule을 따로 생성해두면, 일정이 변경되었을 때 이

schedule을 사용하는 모든 job의 attribute을 변경하는 것이 아니라 하나의 schedule만을 수정하는 것으로 해결이

가능하게 됩니다.

이 schedule은 SCHEDULE_NAME에서 stats_schedule 이름을 지정하였으며 START_DATE과 END_DATE에 명시한

바와 같이 오늘부터 30일간만 활성화됩니다. REPEAT_INTERVAL 파라미터를 살펴보면, FREQ=HOURLY

INTERVAL=4로 지정되어 있는데 이는 4시간 마다 해당 JOB을 수행함을 나타냅니다.

Page 16: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 16

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – Schedules (Cont’d)Creating a Schedule using EM

보시는 화면은 EM에서 SCHEDULE COMPONENT를 생성하는 화면을 보여주고 있습니다.

EM의 HOME화면에서 “관리 탭 > 스케쥴러 영역에서 일정항목 선택하고, 생성 버튼을 클릭”하면 SCHEDULE 생성화면을 볼수 있습니다.

Page 17: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 17

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – Job Classes

ResourceConsumer Group Service Logging Level Logging History

JOB CLASSJOB CLASS

EXECUTE DBMS_SCHEDULER.CREATE_JOB_CLASS( -job_class_name => ’ADMIN_JOBS’, -resource_consumer_group => ’DAYTIME_JOBS’, -logging_level => DBMS_SCHEDULER.LOGGING_RUNS, -Log_history => 30);

이제까지는 Scheduler를 사용하는데 필요한 기본적인 component들에 대해서 살펴보았습니다만, 이번 페이지부터는 다른상위개념 component들에 대해서 설명 드리도록 하겠습니다.

JOB을 생성한 후 명시적으로 Resource 할당을 할 필요가 있을 때, 일일이 모든 JOB에 대해서 설정해야 한다면 상당히비효율적일 것입니다.

이를 위해서 scheduler는 job들간의 resource할당을 관리하게 위해서 job class개념을 제공합니다. 하나의 job class에Resource Consumer Group을 매핑하여 이러한 관리를 가능하게 하는 원리인데, 이 resource_consumer_group 파라미터는 job class생성시 언급해주거나, 추후에 SET_ATTRIBUTE() 프로시져를 사용하여 지정할 수 있습니다.

이 resource_consumer_group 파라미터를 생략한다면, job class는 DEFAULT_CONSUMER_GROUP이라는 기본 resource consumer group에 속하게 됩니다. RESOURCE CONSUMER GROUP은 SCHEDULER와 다른CONFIGURATION영역이므로 자세한 내용은 시간 관계상 본 세미나에서 설명하지 않습니다.

추가 자료를 원하는 고객께서는 메타링크를 참조하시기 바랍니다.

그림에서 4개의 조그만 원은 job class를 생성할 때 사용하는 parameter를 의미하며, 자세한 내용은 다음 슬라이드에서언급하도록 하겠습니다.

슬라이드 아래에 위치한 예제는, 간단한 JOB CLASS생성방법을 보여주고 있습니다. JOB_CLASS_NAME파라미터를이용하여 ADMIN_JOBS라는 이름을 지정해주었으며, RESOURCE_CONSUMER_GROUP 파라미터에 DAYTIME_JOBS라는RESOURCE_CONSUMER_GROUP을 지정해주었습니다.

LOGGING_LEVEL 은 이 JOB CLASS에 속하는 JOB에 대해 log를 기록하는 정보수위를 나타냅니다.

여기서는 LOGGING_RUNS로 설정되어 있으므로 JOB이 수행될 때에만 기록됩니다. 마지막 줄의 LOG_HISTORY 파라미터는 LOG정보를 30일 동안 보관한다는 것을 의미합니다. 이 30일 값은 default값입니다.

Page 18: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 18

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – Job Classes (Cont’d)Creating a Job Class Using EM

화면의 그림과 같이 job class의 생성도 EM에서 가능합니다. 이 그림에 대한 설명과 함께, 앞 slide에서 보여드렸던

parameter중 나머지 항목에 대해 말씀 드리겠습니다.

먼저 Logging level은 3가지 type으로 설정할 수 있습니다.

1. LOGGING_OFF: 이 값은 아무런 LOG도 남기지 않게 합니다.

2. LOGGING_RUNS: JOB CLASS안에서 각기 수행되는 JOB에 대해서만 LOG를 기록합니다.

3. LOGGING_FULL: JOB이 실행되는 순간뿐만 아니라, JOB에 관련된 모든 작업에 대해서 기록합니다. 예를 들어 JOB의생성, 변경, 활성화 혹은 비활성화 등의 내용에 대해서도 기록합니다.

EM에서 “로그 보존기간” 항목은, 프로시져 사용 시 LOG_HISTORY 파라미터의 내용과 동일합니다. 즉, LOG가 얼마나

오랫동안 기록되어 있을 것인지를 결정합니다.

SERVICE NAME은 RAC(Real Application Clusters)환경에서 load balancing과 성능향상을 위해서 설정할 수

있습니다. SERVICE NAME이 설정되어 있을 경우 이 JOB CLASS내의 JOB은, 이 SERVICE NAME에 속한 모든

INSTANCE들에 걸쳐 수행됩니다. 설정하지 않을 경우에는 RAC환경내의 한 INSTANCE상에서만 수행될 것입니다.

단, 주의할 사항은 RESOURCE CONSUMER GROUP과 SERVICE NAME은 상호 배타적이라는 점입니다. 이 두

파라미터 중에서 하나가 설정된다면, 나머지 하나는 NULL값을 가져야 합니다.

Page 19: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 19

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – WindowsCreating a window• Create a window for the month of December that uses the END_OF_YEAR

resource plan and is active every night from 6:00 p.m. to 6:00 a.m. Eastern Standard Time (EST).

BEGINDBMS_SCHEDULER.CREATE_WINDOW(window_name => ’DEC_NIGHTS’,resource_plan => ’END_OF_YEAR’,start_date => ’01-DEC-05 06.00.00 PM EST’,repeat_interval => ’FREQ=DAILY; BYHOUR=18’,duration => ’0 12:00:00’,end_date => ’31-DEC-05 06.00.00 AM EST’,comments => ’Every day at 6:00 PM’);END;/

• Window

야간에 DATAWARE HOUSING JOB을 수행하는 경우와 같이 Business 정책상 특정 시간동안 평상시와는 다른 RESOURCE PLAN으로 JOB을 수행해야 할 때가 있습니다.

이 작업들은 야간에 조금 더 높은 RESOURCE점유율을 필요로 할 텐데, 이렇게 특정시간동안 RESOURCE PLAN을바꿔주기 위해서 WINDOW가 사용됩니다.

WINDOW를 생성하는데, 이를 위해서는 MANAGE SCHEDULER 권한이 먼저 확보되어야 합니다.

그럼, 예제를 살펴 보겠습니다.

이 WINDOW는 START_DATE에 설정한 바와 같이 2005년 12월 1일 저녁 6시에 최초 활성화되고, RESOURCE_PLAN에지정된 END_OF_YEAR라는 RESOURCE PLAN을 참조합니다.

REPEAT_INTERVAL은 다음 WINDOW가 다시 열릴 간격을 가르치는데 FREQ=DAILY, BYHOUR=18은 매일 저녁 6시에OPEN됨을 나타냅니다.

DURATION이 18시간이므로 한번 OPEN된 WINDOW는 18시간 후에 CLOSE되며, END_DATE에 따라 2005년 12월 31일아침 6시에 비활성화 됩니다.

Page 20: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 20

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Scheduler – Windows (Cont’d)Prioritizing Jobs within a window

Specifying the Job Priority

ADMIN_JOBS APPL_JOBS

DAYTIME WINDOW

Job 1 Job 2Job 4 Job 5

EXEC DBMS_SCHEDULER.SET_ATTRIBUTE( -NAME => ‘JOB3’, ATTRIBUTE => ‘JOB_PRIORITY’, -VALUE => 2); END;/

Job 3

OTHER

이 장에서는 job에 우선순위를 부여하는 개념에 대해서 알아보도록 하겠습니다.

먼저 JOB CLASS는 앞서 배운 바와 같이 하나의 RESOURCE CONSUMER GROUP에 대응됩니다.

그런데 현재 활성화 상태인 RESOURCE PLAN이 각 RESOURCE CONSUMER GROUP에 할당되는 RESOURCE를결정하므로, 결과적으로 각각의 JOB CLASS도 RESOURCE PLAN의 영향을 받는다고 생각할 수 있습니다.

이렇듯 1차적으로 JOB CLASS에 부여된 RESOURCE PLAN에 의해, BUSINESS 요구사항에 따른 우선순위를 부여하는것이 가능합니다. 그러나 JOB CLASS내부에서도 복수의 JOB이 경합을 벌일 수 있는 가능성이 남아있습니다. 이럴 때이차적으로 부여할 수 있는 설정이 JOB_PRIORITY입니다.

예를 들어 첫번째 그림과 같이 하나의 window가 열려있는 동안, 여러 개의 서로 다른 JOB CLASS와 그에 속하는 여러개의 JOB이 활성화되어 있는 경우를 생각해봅니다.

JOB CLASS 에서 우선순위는 이미 RESOURCE PLAN의 영향을 받고있는 사항이므로, JOB에 설정된 JOB_PRIORITY값은다른 JOB CLASS간에는 영향을 미치지 않습니다.

화면 아래의 예제는 JOB3라는 이름의 JOB에게 2라는 우선순위를 부여하는 작업을 보여주고 있습니다.

SET_ATTRIBUTE()프로시져는 이미 생성된 COMPONENT의 파라미터값을 변경할 때 사용하는 프로시져로서 세미나후반에서 다시 다루도록 하겠습니다. 이 예제에서는 이 JOB_PRIORITY의 값을 2로 설정해주고 있는데, JOB생성할 때 이값을 설정하지 않으면 기본값으로 3이 설정됩니다.

Page 21: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 21

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Managing Scheduler Components

Managing scheduler components using EM

지금까지 우리는 component의 개념에 대해서 알아보았습니다, 이어서 이를 관리하는 방법에 대해서 알아보도록하겠습니다.

SCHEDULER COMPONENT의 관리작업을 하는 프로시져는 각 COMPONENT의 구성 PARAMETER가 다른 것과 같이 각각조금씩 다릅니다. 이 세미나에서는 시간관계상의 이유로 JOB, PROGRAM, SCHDULE에 대해서만 간략히 살펴보기로합니다.

COMPONENT를 올바르게 생성할 수 있다면, 편집/수정작업은 그리 어려운 내용은 아닐 것입니다.

혹시라도 프로시져 사용에 익숙하지 않거나 GUI환경을 선호하는 사용자라면, EM을 사용하여 모든 관리작업을 수행할 수도있습니다.

그림과 같이 EM의 메인 화면의 관리탭을 선택한 후, 스케쥴러 영역에 위치한-각COMPONENT이름을 선택합니다.

이 경우는 작업 즉, JOB을 선택해보았습니다. 오른쪽의 큰 화면은 일단 JOB 화면을 보여주고 있는데요, 여기서 편집버튼을누르면 됩니다.

Page 22: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 22

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Managing Scheduler Components (Cont’d)

Enabling & Disabling Scheduler Components• Enabling the CALC_STATS2 program

• Disable the GET_STATS job

EXEC DBMS_SCHEDULER.ENABLE(‘HR.CALC_STATS2’);

EXEC DBMS_SCHEDULER.DISABLE(‘HR.GET_STATS’);

그럼 본격적으로 DBMS_SCHEDULER패키지의 다양한 프로시져를 사용하여 SCHEDULER COMPONENT를 관리하는요령을 익혀보겠습니다.

먼저 component를 활성화 또는 비 활성화하는 방법입니다. 이는 PROGRAM, JOB, WINDOW 와 같은 Component를관리하는 데 있어서 가장 기본적인 내용이라고 볼 수 있습니다.

화면에 보이는 예제와 같이 활성화는 ENABLE()프로시져를, 비활성화는 DISABLE()프로시져를 사용하여 설정합니다.

첫번째 예제는 ENABLE()프로시져를 사용하여 HR스키마 내의 CALC_STATS2 프로그램을 활성화하는 과정을,

두번째 예제는 DISABLE()프로시져를 사용하여 HR스키마 내의 GET_STATS라는 JOB을 비활성화하는 과정을

보여주고 있습니다.

Page 23: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 23

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Managing Scheduler Components (Cont’d)

Managing an attribute for a job• Change an attribute for a job

• Remove a program comment by setting it to NULL

DBMS_SCHEDULER.SET_ATTRIBUTE(name => ’HR.GET_STATS’, -attribute => ’MAX_FAILURES’,value => 3)

DBMS_SCHEDULER.SET_ATTRIBUTE_NULL('HR.CALC_STATS', -'COMMENTS');

SCHEDULER를 사용하다 보면, 갑자기 SCHEDULE의 REPEAT_INTERVAL을 조정하거나 JOB에 참조된 PROGRAM을바꿔야 하는 등의 변경작업이 이루어집니다. 이를 위해 기존의 COMPONENT를 DROP하고 다시 CREATE하는 것은 상당히비효율적일 것 입니다. 이럴 때 사용하는 프로시져가 바로 SET_ATTRIBUTE()프로시져 입니다.

WINDOW COMPONENT의 PARAMETER가 JOB COMPONENT의 PARAMETER와 다른 것처럼, 올바른 변경작업을위해서는 ARGUMENT에 적절한 PARAMETER를 언급해줘야 합니다.

SET_ATTRIBUTE()프로시져를 사용할 때는 COMPONENET의 이름을 NAME 파라미터에, 바꾸고자 하는 PARAMETER의이름을 ATTIRIBUTE라는 파라미터에, 그리고 그 값을 VALUE 파라미터에 지정합니다.

이 사용법을 숙지한 상태에서, 화면에서의 예제들을 살펴봅니다.

첫번째 예제는 HR유저가 소유한 GET_STATS JOB의 MAX_FAILURES 파라미터의 값을 3으로 변경하고 있습니다.

두번째 예제는 PROGRAM COMPONENT에 설정해둔 설명,즉 COMMENTS 파라미터의 내용을을 CLEAR하기 위해서COMMENTS PARAMETER를 NULL로 재설정하고 있습니다. PARAMETER의 값을 NULL, 즉 UNSET 값으로 설정해야 할경우엔 이처럼 SET_ATTRIBUTE_NULL()프로시져를 사용할 수도 있습니다.

변경되는 COMPONENT가 현재 ENABLE상태라면, SET_ATTRIBUTE()프로시져가 수행되는 순간 DISABLE 상태로 바뀐 뒤PARAMETER가 변경됩니다. 그리고 변경작업이 완료되자마자 자동으로 ENABLE상태로 되돌아옵니다. 만약 어떠한사정으로 인하여 ENABLE상태로 전환할 수 없다면, ERROR메시지와 함께 이 COMPONENT는 계속해서 DISABLE상태로남아있게 됩니다.

Page 24: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 24

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Managing Scheduler Components (Cont’d)

Managing Jobs• Run a job

• Stop a Job

• Drop a job

DBMS_SCHEDULER.RUN_JOB(‘HR.JOB1’);

DBMS_SCHEDULER.STOP_JOB(JOB_NAME=‘HR.JOB1’, -FORCE=TRUE);

DBMS_SCHEDULER.DROP_JOB(‘HR.JOB1’);

그럼 JOB COMPONENT를 다루는 방법에 대해 계속해서 살펴보도록 하겠습니다.

JOB은 일단 생성되면 현재 SESSION에서 RUN_JOB()프로시져를 사용하여 언제든지 바로 실행시킬 수 있습니다. 그리고현재 실행중인 JOB은 STOP_JOB()프로시져를 사용하여 바로 멈출 수 있습니다. DROP_JOB()프로시져는 JOB을 DROP할때 사용합니다.

JOB_RUN()프로시져가 JOB_NAME을 기본 ARGUMENT로 가지는 것과 달리, DROP_JOB와 STOP_JOB()프로시져는JOB_NAME 이외에도 FORCE 라는 ARGUMENT를 가집니다. FORCE의 경우 기본값은 FALSE입니다.

STOP_JOB()프로지셔의 경우 FORCE=TRUE로 설정하게 되면, STOP을 시도할 경우 JOB이 실행 중이더라도 바로 JOB SLAVE를 KILL하게 됩니다.

DROP_JOB()프로시져의 경우 FORCE=TRUE로 설정하게 되면, 현재 JOB이 실행 중이더라도 바로 STOP한 후DROP해버립니다.

Page 25: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 25

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Managing Scheduler Components (Cont’d)

Managing Programs• Enable a program

• Disable a program

• Drop a program

DBMS_SCHEDULER.ENABLE(‘HR.PROG1’);

DBMS_SCHEDULER.DISABLE(‘HR.PROG1’);

DBMS_SCHEDULER.DROP_PROGRAM( -PROGRAM_NAME=‘HR.PROG1’, FORCE=TRUE);

이번에는 PROGRAM을 관리하는 방법을 알아보겠습니다.

프로그램 COMPONENT를 활성화 혹은 비활성화하는 방법은 앞서 알려드린 바와 동일하게 ENABLE()프로시져, 혹은DISALBE()프로시져를 사용하시면 됩니다.

맨 아래 예제는 DROP_PROGRAM()프로시져를 소개하고 있는데, PROGRAM이 JOB에 대해 참조중일 때라면 기본적으로에러를 나타내며 DROP작업은 수행되지 않습니다. 그러나 FORCE=TRUE설정한다면 DROP이 시도될 때 프로그램을참조하고 있는 모든 JOB이 비활성 되고,PROGRM을 DROP시킵니다.

Page 26: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 26

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

Managing Scheduler Components (Cont’d)

Managing Schedules• Alter a schedule

• Drop a schedule

DBMS_SCHEDULER.SET_ATTRIBUTE( -name => 'HR.STATS_SCHEDULE', -attribute =>'START_DATE', value => '01-JAN-2004 9:00:00 US/Pacific')

DBMS_SCHEDULER.DROP_SCHEDULE( -schedule_name => ’HR.STATS_SCHEDULE’, force => TRUE);

그럼, SCHEDULER의 기본 COMPONENT중에서 마지막인 SCHEDULE를 살펴보도록 하겠습니다.

SCHEDULE은 시간에 대한 정보를 기록하고 있는 OBJECT일뿐이므로, 관리측면에서 변경과 삭제 작업만 제공됩니다.

첫번째 예제는 SET_ATTRIBUTE()프로시져를 사용하여 START_DATE PARAMETER값을 변경하는 작업을,

두번째 예제는 DROP_SCHEDULE()프로시져를 사용하여 SCHEDULE 객체를 DROP하는 작업을 보여주고 있습니다.

기본적으로 SCHEDULE이 JOB이나 WINDOW에서 사용하고 있다면, DROP_SCHEDULE()프로시져는 ERROR를 나타내며수행되지 못합니다.

그러나 다른 DROP ACTIOIN과 마찬가지로 FORCE 값이 TRUE로 설정된 경우라면 이를 사용하고 잇는 JOB이나WINDOW가 모두 비활성화 되고, 이 SCHEDULE은 DROP됩니다.

Page 27: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 27

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

How to retrieve the info of Scheduler

Data Dictionary Views

[DBA | ALL | USER]_SCHEDULER_JOBS[DBA | ALL | USER]_SCHEDULER_JOB_ARGS[DBA | ALL | USER]_SCHEDULER_RUNNING_JOBS[DBA | ALL | USER]_SCHEDULER_JOB_LOG[DBA | ALL | USER]_SCHEDULER_JOB_RUN_DETAILS[DBA | ALL | USER]_SCHEDULER_PROGRAMS[DBA | ALL | USER]_SCHEDULER_PROGRAM_ARGS[DBA | ALL | USER]_SCHEDULER_SCHEDULES[DBA | ALL]_SCHEDULER_JOB_CLASSES[DBA | ALL ]_SCHEDULER_WINDOWS[DBA | ALL ]_SCHEDULER_WINDOW_DETAILS[DBA | ALL ]_SCHEDULER_WINDOW_LOG

APPENDIX

• SCHEDULER에 관련된 DICTIONARY VIEW에 대한 LIST와 그 QUERY에 대한 예제

이번 장에서는 scheduler를 운영함에 있어 필요한 정보를 QUERY할 때 사용되는 STATIC DATADICTIONARY VIEW들을알아보겠습니다..

화면에 보이는 STATIC DATADICTIONARY VIEW들은 모두 SCHEDULER의 활동에 관련된 VIEW들입니다.

JOB CLASS와 WINDOW OBJECT는 SYS SCHEMA에 위치하기 때문에 USER_ 접두어로 시작하는 VIEW가 없다는사실정도만 체크해 두시면 됩니다. VIEW가 포함하는 COLUMN에 대해 구체적인 정의나 정보를 알고 싶으신 경우라면, 10g DATABASE REFERENCE MANUAL을 참고하시기 바랍니다.

그럼 다음 슬라이드에서 이 VIEW들을 QUERY하는 예제를 살펴보도록 하겠습니다.

Page 28: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 28

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

How to retrieve the info of Scheduler (Cont’d)

Retrieve attribute values for the JOB_TEST job created by HRSQL> CONN HR/HR연결되었습니다.SQL> EXEC DBMS_SCHEDULER.CREATE_JOB( -> job_name => 'HR.JOB_TEST',program_name => 'HR.PROGRAM_TEST', schedule_name => 'SCHEDULE_TEST');PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> CONN /AS SYSDBA연결되었습니다.SQL> SELECT JOB_CREATOR, JOB_PRIORITY, LOGGING_LEVEL2 FROM DBA_SCHEDULER_JOBS3 WHERE JOB_NAME = 'JOB_TEST';

JOB_CREATOR JOB_PRIORITY LOGG------------------------------ ---------------------- ---------HR 3 RUNS

• DBA_SCHEDULER_JOBS를 통해 JOB의 구체적인 정보의 확인

COMPONENT를 생성하시고 나면, 실제로 그 COMPNENT가 어떠한 특성을 가지고 있는지 확인할 필요가 있습니다. 앞서배운 SET_ATTRIBUTE()프로시져를 사용할 때도 기존에 어떤 값이 설정되어 있는가 확인이 선행되어야 할 것입니다.

JOB이라면

USER_SCHEDULER_JOBS

ALL_SCHEDULER_JOBS

DBA_SCHEDULER_JOBS을,

PROGRAM 이라면

USER_SCHEDULER_PROGRAMS ,

ALL_SCHEDULER_PROGRAMS,

DBA_SCHEDULER_PROGRAMS 와 같은 형식으로 명명된 VIEW를 QUERY하시면 됩니다.

자, 그럼 예제를 살펴보겠습니다.

HR유저로 접속한 후, CREATE_JOB()를 사용하여 JOB_TEST라를 JOB를 생성하였습니다.

그리고, SYSDBA로 접속한 상태에서 DBA_SCHEDULER_JOBS VIEW를 조회하여 JOB_TEST라는 JOB을 누가 만들었는지, 그리고 우선순위는 얼마인지, LOGGING LEVEL을 어떻게 설정되어 있는지 확인하고 있습니다.

Page 29: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 29

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

How to retrieve the info of Scheduler (Cont’d)

Viewing the Job Execution DetailsSQL> SELECT JOB_NAME, STATUS, ERROR#, RUN_DURATION2 FROM DBA_SCHEDULER_JOB_RUN_DETAILS;

JOB_NAME STATUS ERROR# RUN_DURATION------------------ ------------------ --------------- ------------------------PURGE_LOG SUCCEEDED 0 +000 00:00:05

.................후략...................

20 개의 행이 선택되었습니다.

• DBA_SCHEDULER_JOB_RUN_DETAILS를 통해 JOB의 성공적인 수행여부 확인

SCHEDULER를 사용하다 보면, JOB이 성공적으로 수행되었는지 그렇지 못했다면 어떤 문제가 있었는지 확인해야 할경우가 있습니다.

이 QUERY는 JOB 에 대한 수행정보를 담고 있는 DBA_SCHEDULER_JOB_RUN_DETAILS view로 부터 정보를질의해냅니다. SELECT의 결과로 보이는 이 PURGE_LOG JOB 은 LOG_HISTORY에 기록된 LOG중 유효기간이 지난내용을 지워내는 역할을 합니다.

이 결과를 살펴보면, PURGE_LOG JOB이 아무런 에러도 만나지 않고 5초 동안 성공적으로 수행되었음을 나타냅니다.

Page 30: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 30

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

How to retrieve the info of Scheduler (Cont’d)

Viewing Jog Logs• The DBA_SCHEDULER_JOB_LOG view has a row for each

job operation or modification.SQL> SELECT JOB_NAME, LOG_DATE, OPERATION, STATUS2 FROM DBA_SCHEDULER_JOB_LOG;

JOB_NAME------------------------------LOG_DATE-------------------------------------------------------OPERATION STATUS------------------------------ ------------------------PURGE_LOG05/02/28 09:08:07.758000 +09:00RUN SUCCEEDED

• JOB의 LOG가 기록되는 DBA_SCHEDULER_JOB_LOB의 확인

JOB CLASS를 만들 때 LOGGING_LEVEL과 LOG_HISTORY를 설정했던 것을 기억하신다면, JOB LOG를 어디에 저장하며어떻게 살펴봐야 할까? 라는 의문이 생기게 됩니다.

DBA_SCHEDULER_JOB_LOG가 바로 그 해답으로, 사용자는 이 VIEW를 QUERY함으로서 원하는 LOG정보를 찾아볼 수있습니다.

화면에서는 DBA_SCHEDULER_JOB_LOG를 QUERY했을 때의 결과 중 일 부분을 보여주고 있습니다.

현재 이 PURGE_LOG라는 JOB이 속해있는 DEFAULT_JOB_CLASS는 LOGGING_LEVEL이 RUNS로 설정되어 있기 때문에, 실행된 JOB에 대해서만 기록하고 있고 OPERATION 컬럼의 값은 RUN만 보여줍니다.

LOG_DATE컬럼은 LOG기록시간을 나타내며 2005년 2월 28일 오전 8시 8분 7초 (GMT +9타임존) 시간에 정상적으로수행되었음을 나타냅니다.

Page 31: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 31

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

SummaryIn this Seminar, you should have learned how to• Simplify management tasks by using the Scheduler• Create a job, program, schedule, and window• Reuse the Scheduler components for similar tasks• View information about job executions and job instances

ORALCE 10g는 기존 ORALCE 제품에 비해 다양한 NEW FEATURE를 선보이고 있습니다.

오늘 iSeminar는 이 중 하나인 SCHEDULER의 기본활용법에 대해서 알려드렸습니다.

SCHEDULER를 사용하여 관리작업을 단순화시키실 수 있으며, JOB, PROGRAM, SCHEDULE, 그리고 WINDOW의

생성방법을 배우셨습니다. 더불어 유사한 업무에 대해서는 기존에 만들어 놓은 COMPONENT를 사용할 수 있습니다.

Page 32: Automating Tasks with Scheduler - DBGuide.net · 2005-07-27 · Automating Tasks with Scheduler 1 Automating Tasks with Scheduler 기술적인질문은채팅으로등록 김선욱

Automating Tasks with Scheduler 32

Automating Tasks with Scheduler 기술적인 질문은 채팅으로 등록

References

Note: 270256.1– How to create a Job using new 10g Scheduling feature

Note: 268795.1– 10g scheduling features

본 세미나에 대해 추가로 확인하고 싶은 사항이 있으실 경우, METALINK에서 위의 두가지 문서를 참고하시기 바랍니다.