> 데이터 베이스 > Oracle > Oracle에서 저장 프로시저를 정기적으로 실행하는 방법

Oracle에서 저장 프로시저를 정기적으로 실행하는 방법

PHPz
풀어 주다: 2023-04-18 15:17:24
원래의
4216명이 탐색했습니다.

엔터프라이즈 수준 애플리케이션에서는 필요한 기능을 달성하기 위해 사용자가 수동 작업을 수행하는 것에 의존할 수 없습니다. 따라서 예약된 작업은 필수적이며, 이는 백그라운드 처리 및 데이터 로딩을 수행하는 데 특히 유용합니다. Oracle 데이터베이스는 개발자와 관리자의 작업을 단순화하기 위해 저장 프로시저와 예약된 작업을 제공합니다. 이 기사에서는 Oracle 예약 작업을 사용하여 저장 프로시저를 정기적으로 실행하는 방법에 중점을 둘 것입니다.

Oracle 예약 작업

Oracle 데이터베이스의 예약 작업은 DBMS_SCHEDULER 패키지를 사용하여 생성할 수 있습니다. 이 패키지를 사용하면 복잡한 일정 요구 사항이 있는 작업을 만들 수 있습니다. 매시간, 매일, 매주, 매월, 매년 등 다양한 빈도를 지원할 수 있습니다. 예약된 작업은 특정 날짜와 시간에 실행될 수도 있고 다른 시간대에서도 실행될 수도 있습니다. DBMS_SCHEDULER 패키지를 사용하여 다음 유형의 객체를 생성할 수 있습니다.

  • Job: DBMS_SCHEDULER.CREATE_JOB 함수 실행 시 생성되는 작업 단위로 스케줄러에 의해 정기적으로 또는 요청 시 스케줄링됩니다.
  • 직업 클래스: 동일한 자원 소비 제한 규칙을 공유하는 관련 작업 그룹입니다.
  • 리소스 소비 제한: 작업 및 직업 클래스를 제어하는 ​​데 사용되는 리소스 소비 규칙입니다.
  • 체인: 한 작업이 완료되면 다른 작업이 실행되는 일련의 작업입니다.
  • 세션: 작업 실행과 관련된 프로세스입니다. 작업 실행을 이해하기 위해 세션을 기록하고 모니터링할 수 있습니다.

이 기사에서는 DBMS_SCHEDULER를 사용하여 작업을 생성하고 이를 실행하려는 저장 프로시저에 바인딩하는 방법에 중점을 둘 것입니다.

저장 프로시저 만들기

먼저 완료하려는 작업 작업을 수행하기 위한 저장 프로시저를 만들어야 합니다. 다음은 현재 시간을 테이블에 삽입하는 저장 프로시저의 간단한 예입니다.

CREATE OR REPLACE PROCEDURE INSERT_TIME
AS 
BEGIN
  INSERT INTO TIME_LOG (LOG_TIME) VALUES (SYSDATE);
  COMMIT;
END INSERT_TIME;
로그인 후 복사

Create Job

저장 프로시저가 준비되면 다음으로 작업 실행을 예약할 작업을 생성해야 합니다. 우리가 만들 작업은 매일 아침 6시에 현재 시간을 삽입합니다. 다음은 DBMS_SCHEDULER.CREATE_JOB 함수를 사용하여 이 작업을 생성하는 예입니다.

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
          job_name        => 'INSERT_TIME_JOB',
          job_type        => 'STORED_PROCEDURE',
          job_action      => 'INSERT_TIME',
          start_date      => SYSTIMESTAMP,
          repeat_interval => 'FREQ=DAILY; BYHOUR=6;',
          enabled         => TRUE,
          comments        => 'Insert current time every day at 6 AM');
END;
로그인 후 복사

CREATE_JOB 함수를 사용하여 작업을 생성하는 경우 다음 매개변수 설명을 따라야 합니다.

  • job_name: 작업 이름이며 고유해야 합니다.
  • job_type: 작업 유형, 일반적으로 "STORED_PROCEDURE"입니다.
  • job_action: 작업에 의해 실행될 저장 프로시저, 패키지 또는 실행 파일의 이름입니다.
  • start_date: 작업 시작 시간으로, 날짜 또는 타임스탬프일 수 있습니다. 지정하지 않으면 기본값은 현재 시간입니다.
  • repeat_interval: 작업의 실행 빈도와 시간 간격을 지정합니다. 이 예에서 "FREQ=DAILY; BYHOUR=6;"은 매일 아침 6시에 실행된다는 의미입니다. 다른 옵션에는 시간별, 주별, 월별, 연간 등이 포함됩니다. 또한 이 매개변수를 사용하여 매주 월요일, 화요일, 목요일과 같이 작업을 실행해야 하는 요일을 지정할 수도 있습니다.
  • enabled: 작업이 활성화되었는지 여부를 나타냅니다.
  • 댓글: 과제에 대한 간단한 설명입니다.

작업을 저장 프로시저에 바인딩

위의 예에서는 작업을 생성하고 해당 작업 실행을 위한 저장 프로시저를 지정했습니다. 이제 지정된 시간에 작업을 실행하도록 이 작업을 저장 프로시저에 바인딩해야 합니다. 이 작업을 수행하려면 DBMS_SCHEDULER.SET_ATTRIBUTE 함수를 사용할 수 있습니다.

BEGIN
  DBMS_SCHEDULER.SET_ATTRIBUTE (
          name => 'INSERT_TIME_JOB',
          attribute => 'program_action',
          value => 'INSERT_TIME;');
END;
로그인 후 복사

이 예에서는 SET_ATTRIBUTE 함수를 사용하여 "INSERT_TIME_JOB" 작업의 "program_action" 속성을 "INSERT_TIME"으로 설정합니다. 이는 특정 시간에 INSERT_TIME 저장 프로시저를 호출하도록 DBMS_SCHEDULER에 지시합니다.

DBMS_SCHEDULER 패키지를 사용하여 예약된 작업을 생성하고 저장 프로시저에서 작업을 바인딩하는 방법을 배웠습니다. 이제 예약된 작업이 실행될 때까지 기다렸다가 TIME_LOG 테이블의 기록을 볼 수 있습니다.

결론

오라클 데이터베이스의 예약된 작업 기능을 사용하면 백그라운드 처리 작업을 쉽게 수행하는 데 도움이 됩니다. DBMS_SCHEDULER 패키지는 반복 실행, 병렬 실행, 오류 복구 등과 같은 특정 애플리케이션 요구 사항을 충족하기 위한 다양한 옵션을 제공합니다. 또한 다양한 시간대, 날짜, 주, 월 등에 걸쳐 작업을 실행할 수 있어 예약된 작업을 매우 유연하게 수행할 수 있습니다. 이 기사에서는 Oracle의 예약된 작업을 사용하여 저장 프로시저를 정기적으로 실행하는 방법에 중점을 둡니다. 이 글이 여러분에게 유용한 지침을 제공하고 Oracle 데이터베이스 기반의 예약된 작업의 사용 및 운영 원칙을 더 잘 이해하는 데 도움이 되기를 바랍니다.

위 내용은 Oracle에서 저장 프로시저를 정기적으로 실행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿