Oracle DB 인스턴스에 대한 공통 스케줄링 작업 수행
일부 SYS
소유 스케줄러 작업이 일반 데이터베이스 작업을 방해할 수 있습니다. Oracle Support에서는 이러한 작업을 비활성화하거나 일정을 수정할 것을 권장합니다. SYS
소유 Oracle Scheduler 작업을 위한 태스크를 수행하려면 Amazon RDS 패키지 rdsadmin.rdsadmin_dbms_scheduler
를 사용합니다.
rdsadmin.rdsadmin_dbms_scheduler
프로시저는 다음 Amazon RDS for Oracle DB 엔진 버전에서 지원됩니다.
-
Oracle Database 21c(21.0.0)
-
Oracle Database 19c
Oracle Scheduler 프로시저용 공통 파라미터
Oracle Scheduler를 사용하여 작업을 수행하려면 Amazon RDS 패키지 rdsadmin.rdsadmin_dbms_scheduler
의 프로시저를 사용합니다. 이 패키지에서 몇 가지 파라미터는 프로시저에 공통됩니다. 이 패키지에는 다음과 같은 공통 파라미터가 있습니다.
파라미터 이름 | 데이터 형식 | 유효한 값 | 기본값 | 필수 | 설명 |
---|---|---|---|---|---|
|
varchar2 |
|
— |
예 |
수정할 작업의 이름입니다. 참고현재, |
|
varchar2 |
|
– |
예 |
수정할 속성입니다. 작업에 대한 반복 간격을 수정하려면 작업에 대한 일정 이름을 수정하려면 |
|
varchar2 |
사용하는 속성에 따라 유효한 일정 간격 또는 일정 이름입니다. |
– |
예 |
속성의 새로운 값입니다. |
DBMS_SCHEDULER 작업 변경
Oracle Scheduler의 특정 구성 요소를 수정하려면 Oracle 프로시저 dbms_scheduler.set_attribute
를 사용합니다. 자세한 내용은 Oracle 문서의 DBMS_SCHEDULER
Amazon RDS DB 인스턴스를 작업할 때는, 스키마 이름 SYS
를 객체 이름 앞에 붙이십시오. 다음은 월요일 창 객체에 자원 계획 속성을 설정하는 예제입니다.
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE( name => '
SYS.MONDAY_WINDOW
', attribute => 'RESOURCE_PLAN
', value => 'resource_plan_1
'); END; /
AutoTask 유지 관리 기간 수정
Amazon RDS for Oracle 인스턴스는 유지 관리 기간에 대한 기본 설정을 사용하여 생성됩니다. 이러한 기간 동안 옵티마이저 통계 수집과 같은 자동화된 유지 관리 태스크가 실행됩니다. 기본적으로 유지 관리 기간은 Oracle 데이터베이스 리소스 관리자를 활성화합니다.
이 기간을 수정하려면 DBMS_SCHEDULER
패키지를 사용합니다. 다음과 같은 이유로 유지 관리 기간 설정을 수정해야 할 수 있습니다.
-
유지 관리 작업을 다른 시간에 실행하거나, 다른 설정으로 실행하거나, 전혀 실행하지 않고자 할 수 있습니다. 예를 들어 이 기간의 지속 시간을 수정하거나, 반복 시간 및 간격을 변경할 수 있습니다.
-
유지 관리 중에 리소스 관리자를 사용하도록 활성화할 경우 성능에 미치는 영향을 피하고자 할 수 있습니다. 예를 들어 기본 유지 관리 계획이 지정되어 있고 데이터베이스의 부하가 클 때 유지 관리 기간이 시작되면
resmgr:cpu quantum
과 같은 대기 이벤트가 발생할 수 있습니다. 이 대기 이벤트는 데이터베이스 리소스 관리자와 관련이 있습니다. 다음과 같은 옵션이 있습니다:-
DB 인스턴스의 사용량이 적은 시간 동안 유지 관리 기간이 활성화되는지 확인합니다.
-
resource_plan
속성을 빈 문자열로 설정하여 기본 유지 관리 계획을 비활성화합니다. -
파라미터 그룹에서
resource_manager_plan
파라미터를FORCE:
로 설정합니다. 인스턴스가 Enterprise Edition을 사용하는 경우 이 설정을 사용하면 데이터베이스 리소스 관리자 계획이 활성화되지 않습니다.
-
유지 관리 기간 설정을 수정하려면
-
Oracle SQL 클라이언트를 사용하여 데이터베이스에 연결합니다.
-
스케줄러 기간에 대한 현재 구성을 쿼리합니다.
다음 예에서는
MONDAY_WINDOW
의 구성을 쿼리합니다.SELECT ENABLED, RESOURCE_PLAN, DURATION, REPEAT_INTERVAL FROM DBA_SCHEDULER_WINDOWS WHERE WINDOW_NAME='MONDAY_WINDOW';
다음 출력은 이 기간이 기본값을 사용하고 있음을 보여줍니다.
ENABLED RESOURCE_PLAN DURATION REPEAT_INTERVAL --------------- ------------------------------ ---------------- ------------------------------ TRUE DEFAULT_MAINTENANCE_PLAN +000 04:00:00 freq=daily;byday=MON;byhour=22 ;byminute=0; bysecond=0
-
DBMS_SCHEDULER
패키지를 사용하여 이 기간을 수정합니다.다음 예에서는 리소스 관리자가 유지 관리 기간 동안 실행되지 않도록 리소스 계획을 null로 설정합니다.
BEGIN -- disable the window to make changes DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); -- specify the empty string to use no plan DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'RESOURCE_PLAN', value=>''); -- re-enable the window DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /
다음 예는 이 기간의 최대 지속 시간을 2시간으로 설정합니다.
BEGIN DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'DURATION', value=>'0 2:00:00'); DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /
다음 예는 반복 간격을 매주 월요일 오전 10시로 설정합니다.
BEGIN DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'REPEAT_INTERVAL', value=>'freq=daily;byday=MON;byhour=10;byminute=0;bysecond=0'); DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /
Oracle Scheduler 작업의 시간대 설정
Oracle Scheduler의 시간대를 수정하려면 Oracle 프로시저 dbms_scheduler.set_scheduler_attribute
를 사용할 수 있습니다. dbms_scheduler
패키지에 대한 자세한 내용은 Oracle 설명서의 DBMS_SCHEDULER
현재 시간대 설정을 수정하려면
-
SQL Developer와 같은 클라이언트를 사용하여 데이터베이스에 연결합니다. 자세한 내용은 Oracle SQL Developer를 사용하여 DB 인스턴스에 연결 섹션을 참조하세요.
-
의 시간대를 대체하여 기본 시간대를 다음과 같이 설정합니다.time_zone_name
BEGIN DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE( attribute => 'default_timezone', value => '
time_zone_name
' ); END; /
다음 예제에서는 시간대를 아시아/상하이로 변경합니다.
다음과 같이 현재 시간대를 쿼리하여 시작합니다.
SELECT VALUE FROM DBA_SCHEDULER_GLOBAL_ATTRIBUTE WHERE ATTRIBUTE_NAME='DEFAULT_TIMEZONE';
출력은 현재 시간대가 ETC/UTC임을 보여줍니다.
VALUE ------- Etc/UTC
그런 다음 시간대를 아시아/상하이로 설정합니다.
BEGIN DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE( attribute => 'default_timezone', value => 'Asia/Shanghai' ); END; /
시스템 시간대 변경에 대한 자세한 내용은 Oracle 시간대 단원을 참조하세요.
SYS가 소유한 Oracle Scheduler 작업 해제
SYS 사용자가 소유한 Oracle Scheduler 작업을 비활성화하려면 rdsadmin.rdsadmin_dbms_scheduler.disable
프로시저를 사용해야 합니다.
이 프로시저는 Oracle Scheduler 작업에 name
공통 파라미터를 사용합니다. 자세한 내용은 Oracle Scheduler 프로시저용 공통 파라미터 섹션을 참조하세요.
다음 예제는 SYS.CLEANUP_ONLINE_IND_BUILD
Oracle Scheduler 작업을 비활성화합니다.
BEGIN rdsadmin.rdsadmin_dbms_scheduler.disable('SYS.CLEANUP_ONLINE_IND_BUILD'); END; /
SYS가 소유한 Oracle Scheduler 작업 켜기
SYS 소유 Oracle Scheduler 작업을 활성화하려면 rdsadmin.rdsadmin_dbms_scheduler.enable
프로시저를 사용해야 합니다.
이 프로시저는 Oracle Scheduler 작업에 name
공통 파라미터를 사용합니다. 자세한 내용은 Oracle Scheduler 프로시저용 공통 파라미터 섹션을 참조하세요.
다음 예제는 SYS.CLEANUP_ONLINE_IND_BUILD
Oracle Scheduler 작업을 활성화합니다.
BEGIN rdsadmin.rdsadmin_dbms_scheduler.enable('SYS.CLEANUP_ONLINE_IND_BUILD'); END; /
CALENDAR 형식 작업에 대한 Oracle Scheduler 반복 간격 수정
CALENDAR
형식의 SYS 소유 Oracle Scheduler 작업을 수정하는 반복 간격을 수정하려면 rdsadmin.rdsadmin_dbms_scheduler.disable
프로시저를 사용합니다.
이 프로시저에서는 Oracle Scheduler 작업을 위해 다음과 같은 공통 파라미터를 사용합니다.
-
name
-
attribute
-
value
자세한 내용은 Oracle Scheduler 프로시저용 공통 파라미터 섹션을 참조하세요.
다음 예제는 SYS.CLEANUP_ONLINE_IND_BUILD
Oracle Scheduler 작업의 반복 간격을 수정합니다.
BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_attribute( name => 'SYS.CLEANUP_ONLINE_IND_BUILD', attribute => 'repeat_interval', value => 'freq=daily;byday=FRI,SAT;byhour=20;byminute=0;bysecond=0'); END; /
NAMED 형식 작업에 대한 Oracle Scheduler 반복 간격 수정
일부 Oracle Scheduler 작업은 간격 대신 일정 이름을 사용합니다. 이 유형의 작업에서는 마스터 사용자 스키마에서 이름이 지정된 새 일정을 생성해야 합니다. 이렇게 하려면 표준 Oracle sys.dbms_scheduler.create_schedule
프로시저를 사용합니다. 또한 rdsadmin.rdsadmin_dbms_scheduler.set_attribute
procedure
를 사용하여 새 명명된 일정을 할당합니다.
이 프로시저에서는 Oracle Scheduler 작업을 위해 다음과 같은 공통 파라미터를 사용합니다.
-
name
-
attribute
-
value
자세한 내용은 Oracle Scheduler 프로시저용 공통 파라미터 섹션을 참조하세요.
다음 예제는 SYS.BSLN_MAINTAIN_STATS_JOB
Oracle Scheduler 작업의 반복 간격을 수정합니다.
BEGIN DBMS_SCHEDULER.CREATE_SCHEDULE ( schedule_name => 'rds_master_user.new_schedule', start_date => SYSTIMESTAMP, repeat_interval => 'freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=0;byminute=0;bysecond=0', end_date => NULL, comments => 'Repeats daily forever'); END; / BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_attribute ( name => 'SYS.BSLN_MAINTAIN_STATS_JOB', attribute => 'schedule_name', value => 'rds_master_user.new_schedule'); END; /
Oracle Scheduler 작업 생성을 위한 자동 커밋 해제
DBMS_SCHEDULER.CREATE_JOB
에서 Oracle Scheduler 작업을 생성하면, 작업이 즉시 생성되고 변경 사항이 커밋됩니다. 다음을 수행하려면 Oracle Scheduler 작업 생성을 사용자 트랜잭션에 통합해야 할 수 있습니다.
-
사용자 트랜잭션이 롤백될 때 Oracle Schedule 작업을 롤백합니다.
-
기본 사용자 트랜잭션이 커밋될 때 Oracle Scheduler 작업을 생성합니다.
프로시저 rdsadmin.rdsadmin_dbms_scheduler.set_no_commit_flag
를 사용하여 이 동작을 설정할 수 있습니다. 이 프로시저에는 파라미터가 없습니다. 이 절차는 다음 RDS for Oracle 릴리스에서 사용할 수 있습니다.
-
21.0.0.0.ru-2022-07.rur-2022-07.r1 이상
-
19.0.0.0.ru-2022-07.rur-2022-07.r1 이상
다음 예에서는 Oracle Scheduler의 자동 커밋을 해제하고 Oracle Scheduler 작업을 생성한 다음 트랜잭션을 롤백합니다. 자동 커밋이 해제된 상태이기 때문에 데이터베이스는 Oracle Scheduler 작업 생성을 롤백합니다.
BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_no_commit_flag; DBMS_SCHEDULER.CREATE_JOB(job_name => 'EMPTY_JOB', job_type => 'PLSQL_BLOCK', job_action => 'begin null; end;', auto_drop => false); ROLLBACK; END; / PL/SQL procedure successfully completed. SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME='EMPTY_JOB'; no rows selected