728x90
# SCHEDULER
l 특정 스크립트를 특정시간에 돌아가도록 자동화 하는 방법
1. 리눅스에 crontap 기능
2. dmbs_job 패키지를 사용(9i 버전)
3. dbms_scheduler 패키지를 사용(10g) 버전
l 스케줄을 사용해서 작업을 편하게 할 수 있게 하려면
l 스케줄 사용방법
1. 시간 기준
2. 이벤트 기준
-- 프로시져 생성 SQL> connect /as sysdba SQL> create or replace procedure gather_me is begin dbms_stats.gather_database_stats; end; / - DB에에 있는 모든 테이블들에 대해서 통계정보를 수집하는 명령어를 수행하는 프로시져 -- 프로그램 생성 SQL> exec dbms_scheduler.create_program(- program_name =>'scott_full2', - program_action => 'gather_me', - program_type => 'STORED_PROCEDURE', - enabled => true ); -- JOB 생성 SQL> exec dbms_scheduler.create_job (job_name=>'stat_scott2', - program_name =>'scott_full2', - start_Date => systimestamp, - repeat_interval=> 'FREQ=DAILY;BYHOUR=1',- enabled => true ); - start_date = systimestamp : 지금부터 시작하겠다는 의미 - repeat_interval : 매일 새벽 1시에 수행되도록 해라 - 마이너스의 의미는 다음라인에 쓰고싶을 때 연결된다 |
1. job 활성화
- SQL> exec dbms_scheduler.enable('stat_scott2');
2. job 시작
- SQL> exec dbms_scheduler.run_job('stat_scott2');
3. job의 동작여부 확인
- SQL> select log_date, owner, job_name, status
from user_scheduler_job_run_details
where job_name='STAT_SCOTT2'
order by log_date desc;
1. 프로시저를 만든다. CREATE OR REPLACE PROCEDURE tblused_extend IS BEGIN ... END; / 2. job을 생성한다. BEGIN dbms_scheduler.create_job ( job_name => 'ex_job', job_type => 'STORED_PROCEDURE', job_action => ' tblused_extend ', start_date => systimestamp, repeat_interval => 'FREQ=SECONDLY; INTERVAL=30', end_date => systimestamp + interval '30' day ); END; / - 'FREQ=SECONDLY; INTERVAL=30' : 30초마다 수행한다는 의미 - end_date => systimestamp + interval '30' day : 오늘부터 30일 후에 종료한다 ※ Schedule 타입 내가 저장한 프로시저일 경우 : STORED_PROCEDURE 으로 설정 PL/SQL Block일 경우 : PLSQL_BLOCK 으로 설정 실행 프로그램일 경우 : EXECUTABLE 으로 설정 ※ Schedule 수행 간격 FREQ : 기간 HOURLY : x시간 마다 MINUTELY : x분 마다 SECONDLY : x초 마다 WEEKLY : x주 마다 MONTHLY : 매월 마다 YEARLY: 매년 마다 INTERVAL : 간격 위의 x 값을 의미 ※ 이외에도 BY옵션과 INCLUDE 옵션이 있습니다. 3. job 활성화 exec dbms_scheduler.enable('ex_job'); exec dbms_scheduler.disable('ex_job'); 4. job 시작 exec dbms_scheduler.run_job('ex_job'); 5. job 동작여부 조회 select log_date, owner, job_name, status from user_scheduler_job_run_details where job_name = 'EX_JOB' order by log_date desc; |
마지막문제. 테이블 스패이스의 사용량이 90% 이상 되는 테이블 스패이스는 자동으로 테이블 스패이스의 공간이 늘어나도록 자동화 시키시오. 그리고 TS600 테이블 스패이스를 하나 만들어서 사이즈 100M로 만들고 해당 테이블 스패이스에 data를 90% 이상 입력했을 때 공간추가 명령어 alert log file 에서 수행을 확인하시오
CREATE OR REPLACE PROCEDURE tblused_extend IS imsi VARCHAR2(200); CURSOR table_cursor IS SELECT u.tablespace_name SPACE, sum(nvl(u.bytes,0)) / 1024000 large, (sum(nvl(u.bytes,0)) - sum(nvl(f.bytes,0))) / 1024000 used, (sum(nvl(f.bytes,0))) / 1024000 unused, trunc((sum(nvl(f.bytes,0)) / sum(nvl(u.bytes,0))) * 100,2) unused_percent, 100 - trunc((sum(nvl(f.bytes,0)) / sum(nvl(u.bytes,0))) * 100,2) used_percent FROM DBA_DATA_FILES u , DBA_FREE_SPACE f WHERE u.file_id = f.file_id(+) GROUP BY u.tablespace_name ORDER BY u.tablespace_name; BEGIN FOR table_record IN table_cursor LOOP SELECT '/u01/app/oracle/oradata/dbdb/' ||LOWER(SUBSTR(tablespace_name,1,length(tablespace_name)-NVL(LENGTH(TRANSLATE(tablespace_name, '0123456789' ||tablespace_name, '0123456789')),0))) || TO_CHAR(TRANSLATE(SUBSTR(file_name,-20), '0123456789' ||file_name, '0123456789')+1) || '.dbf' INTO imsi FROM DBA_DATA_FILES WHERE file_id in (SELECT MAX(file_id) OVER(PARTITION BY tablespace_name) FROM dba_data_files) AND tablespace_name=table_record.space; IF table_record.used_percent >= 90 THEN execute IMMEDIATE 'alter tablespace ' || TABLE_RECORD.SPACE || ' add datafile '''|| imsi ||''' size 50m'; END IF; END LOOP; END; / |
SQL> BEGIN dbms_scheduler.create_job ( job_name => 'ex_job', job_type => 'STORED_PROCEDURE', job_action => ' tblused_extend ', start_date => systimestamp, repeat_interval => 'FREQ=SECONDLY; INTERVAL=30', end_date => systimestamp + interval '30' day ); END; / SQL> exec dbms_scheduler.enable('ex_job'); SQL> select log_date, owner, job_name, status from user_scheduler_job_run_details where job_name = 'EX_JOB' order by log_date desc; LOG_DATE OWNER JOB_NAME STATUS 25-JUL-14 05.38.28.374866 PM +09:00 SYS EX_JOB SUCCEEDED 25-JUL-14 05.37.58.364721 PM +09:00 SYS EX_JOB SUCCEEDED 25-JUL-14 05.37.28.364122 PM +09:00 SYS EX_JOB SUCCEEDED |
# alert log …………………………………………………….. alter tablespace TS600 add datafile '/u01/app/oracle/oradata/dbdb/ts601.dbf' size 50m Completed: alter tablespace TS600 add datafile '/u01/app/oracle/oradata/dbdb/ts601.dbf' size 50m |
'빅데이터과정 > WORKSHOP 2 ' 카테고리의 다른 글
#35_140801_TUNING_SUBQUERY TUNING (0) | 2014.08.01 |
---|---|
#31_140725_WSHOP2_RESOURCE MANAGER (0) | 2014.07.25 |
#31_140725_WSHOP2_RESUMABLE SPACE ALLOCATION (0) | 2014.07.25 |
#31_140725_WSHOP2_DB REORG (0) | 2014.07.25 |
#31_140725_WSHOP2_DATABASE REPLAY (0) | 2014.07.25 |