Oracle DB 인스턴스에 대한 공통 스케줄링 작업 수행 - Amazon Relational Database Service

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의 프로시저를 사용합니다. 이 패키지에서 몇 가지 파라미터는 프로시저에 공통됩니다. 이 패키지에는 다음과 같은 공통 파라미터가 있습니다.

파라미터 이름 데이터 형식 유효한 값 기본값 필수 설명

name

varchar2

'SYS.BSLN_MAINTAIN_STATS_JOB','SYS.CLEANUP_ONLINE_IND_BUILD'

수정할 작업의 이름입니다.

참고

현재, SYS.CLEANUP_ONLINE_IND_BUILDSYS.BSLN_MAINTAIN_STATS_JOB 작업만 수정할 수 있습니다.

attribute

varchar2

'REPEAT_INTERVAL','SCHEDULE_NAME'

수정할 속성입니다.

작업에 대한 반복 간격을 수정하려면 'REPEAT_INTERVAL'을 지정합니다.

작업에 대한 일정 이름을 수정하려면 'SCHEDULE_NAME'을 지정합니다.

value

varchar2

사용하는 속성에 따라 유효한 일정 간격 또는 일정 이름입니다.

속성의 새로운 값입니다.

DBMS_SCHEDULER 작업 변경

Oracle Scheduler의 특정 구성 요소를 수정하려면 Oracle 프로시저 dbms_scheduler.set_attribute를 사용합니다. 자세한 내용은 Oracle 문서의 DBMS_SCHEDULERSET_ATTRIBUTE Procedure 단원을 참조하세요.

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을 사용하는 경우 이 설정을 사용하면 데이터베이스 리소스 관리자 계획이 활성화되지 않습니다.

유지 관리 기간 설정을 수정하려면
  1. Oracle SQL 클라이언트를 사용하여 데이터베이스에 연결합니다.

  2. 스케줄러 기간에 대한 현재 구성을 쿼리합니다.

    다음 예에서는 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
  3. 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_SCHEDULERSET_SCHEDULER_ATTRIBUTE를 참조하세요.

현재 시간대 설정을 수정하려면
  1. SQL Developer와 같은 클라이언트를 사용하여 데이터베이스에 연결합니다. 자세한 내용은 Oracle SQL Developer를 사용하여 DB 인스턴스에 연결 섹션을 참조하세요.

  2. 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