[Oracle] 리눅스의 crontab을 이용한 오라클 작업 자동화

·2025년 9월 16일

오라클 관리

목록 보기
149/163

💡 낮이 아닌 밤에 DB 작업을 해야하는 이유

컬럼추가나 삭제작업을 낮에 한참 바쁠 때 하게되면 오라클이 느려지게 돼서
컬럼추가나 삭제작업은 밤에 한가할 때 수행해야함


오라클 인스턴스의 구성
1. SGA - buffer cache, redo log buffer
2. background processor


[문제1] scott 유져에서 사원 테이블에 email 컬럼을 추가하시오. 데이터 길이는 varchar2(100) 으로 하세요.

1. /home/oracle 밑에 아래의 스크립트를 add_email.sql 이라는 이름으로 저장합니다.

# /home/oracle/add_email.sql
alter table emp add email varchar2(100);
exit;

2. add_email.sql 을 수행하는 쉘스크립트를 작성합니다. 쉘스크립트 이름은 run_add_email.sh 로 하세요

/home/oracle 밑에 저장하기

# /home/oracle/run_add_email.sh
#!/bin/bash

export ORACLE_SID=ORA19       # DB SID
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

sqlplus -s scott/tiger <<EOF
@/home/oracle/scripts/add_email.sql
EOF

3. 쉘스크립트를 수행할 수 있는 권한을 부여합니다

$ chmod +x /home/oracle/run_add_email.sh

4. crontab에 위의 스크립트를 등록합니다.

crontab -e

0 22 * * * /home/oracle/run_add_email.sh > /home/oracle/add_email.log 2>&1

[문제2] 다시 emp 테이블에 email 컬럼을 삭제하시오

alter  table  emp
  drop  column  email;

[문제3] 오후 2시 9분에 위의 스크립트가 수행되게하시오

crontab -e

9 14 * * * /home/oracle/run_add_email.sh > /home/oracle/add_email.log 2>&1

--> 매일 오후 2시 9분에 수행됨


7 14 16 9 * /home/oracle/run_add_email.sh > /home/oracle/add_email.log 2>&1

--> 7분 14시 16일 9월

분 시 일 월 요, *은 매분, 매시, 매일, 매월, 매요일을 뜻함


[문제4] email 컬럼 삭제가 2시 15분에 수행되게하시오

[oracle@ora19c ~]$ pwd
/home/oracle
[oracle@ora19c ~]$
[oracle@ora19c ~]$ vi drop_email.sql
[oracle@ora19c ~]$
[oracle@ora19c ~]$ cat drop_email.sql
alter  table  emp
  drop  column  email;

[oracle@ora19c ~]$ pwd
/home/oracle
[oracle@ora19c ~]$ vi run_drop_email.sh
[oracle@ora19c ~]$
[oracle@ora19c ~]$ cat drop_email.sql
alter  table  emp
  drop  column  email;
[oracle@ora19c ~]$ ^C
[oracle@ora19c ~]$ cat run_drop_email.sh
export ORACLE_SID=ORA19
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

sqlplus -s scott/tiger <<EOF
@/home/oracle/drop_email.sql
EOF

[oracle@ora19c ~]$ chmod +x /home/oracle/run_drop_email.sh
[oracle@ora19c ~]$
[oracle@ora19c ~]$ crontab -e
crontab: installing new crontab
[oracle@ora19c ~]$

crontab -e
15 14 * * * /home/oracle/run_drop_email.sh > /home/oracle/drop_email.log 2>&1


[현업 팁!] sh 가 가지고 있는 테이블들에 대해서 통계정보를 수집하시오

exec dbms_stats.gather_schema_stats('SH');

select table_name, num_rows, last_analyzed
 from user_tables;

문제5. sh 계정의 통계정보 수집이 2시 35분에 일어나도록 crontab 을 거시오

[oracle@ora19c ~]$ vi exec_gather_stats_sh.sql
# /home/oracle/exec_gather_stats_sh.sql
begin
 dbms_stats.gather_schema_stats('SH');
end;
/
exit;

[oracle@ora19c ~]$ vi run_exec_stats.sh
# /home/oracle/run_exec_stats.sh
#!/bin/bash

export ORACLE_SID=ORA19
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

sqlplus -s sh/sh <<EOF
@/home/oracle/exec_gather_stats_sh.sql
EOF

[oracle@ora19c ~]$ crontab -e

@reboot /home/oracle/start_listener.sh >> /home/oracle/start_listener.log 2>&1
9 14 * * * /home/oracle/run_add_email.sh > /home/oracle/add_email.log 2>&1
21 14 * * * /home/oracle/run_drop_email.sh > /home/oracle/drop_email.log 2>&1
35 14 * * * /home/oracle/run_exec_stats.sh > /home/oracle/run_exec_stats.log 2>&1

0개의 댓글