10g 中新推出的SCHEDULER可能确实会让很多初接触的朋友感觉晕头晕脑,相比之前的jobs,SCHEDULER中新增的概念太多。比如说jobs,仍然可以理解成之前版本中的jobs,不过功能更加强大(注意10g中也仍然可以使用普通jobs,这是废话,相信看本篇文章的朋友目前应该还是这样在用,比如说program,指的是运行的程序(把要做什么单提出来了),比如说schedule,我将其翻译为调度(job我翻译为任务),定义执行的频率或者说周期。
如何使用数据库scheduler来定时查询数据库表空间脚本
1、修改externaljob.ora属性
cd $ORACLE_HOME/rdbms/admin
chown oracle:oinstall externaljob.ora
chmod 640 externaljob.ora
[oracle@rman admin]ls -lsa exter*
4 -rw-r-----. 1 oracle oinstall 1534 Dec 21 2005 externaljob.ora
2、修改extjob属性
cd $ORACLE_HOME/bin
chmod 4750 extjob
[oracle@rman bin]$ ls -ls extjob
1228 -rwsr-x---. 1 oracle oinstall 1254244 Sep 1 00:52 extjob
3、修改externaljob.ora文件内容
cd $ORACLE_HOME/rdbms/admin
vi externaljob.ora
#run_user = nobody
#run_group = nobody
run_user = oracle
run_group = oinstall
4、创建checktablespace.sh脚本
vi checktablespace.sh
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export ORACLE_SID=racdb
LOG_DIR=/home/oracle/log
Date=$(date +%F)
$ORACLE_HOME/bin/sqlplus / as sysdba <<EOF
set serverout on;
spool /home/oracle/checktablespace.log;
@/home/oracle/checktablespace.sql;
spool off;
exit;
EOF
/bin/mv /home/oracle/checktablespace.log $LOG_DIR/checktablespace_$Date.log
5、给脚本授权
su - oracle
chmod +x checktablespace.sh
mkdir log
6、创建一个program
begin
dbms_scheduler.create_program (
program_name => 'check_tablespace',
program_action => '/home/oracle/checktablespace.sh',
comments => 'checktablespace',
program_type => 'executable',
enabled => true
);
end;
/
7、创建一个job来调用之前创建的程序
begin
dbms_scheduler.create_job(job_name => 'checktablespace',
program_name => 'check_tablespace',
repeat_interval => 'FREQ=DAILY;BYHOUR=17',
enabled => true,
comments => 'check tablespace');
end;
/
9、启动job
begin
dbms_scheduler.enable('checktablespace');
end;
/
-10、查询job是否正常运行
select * from user_scheduler_programs;
select * from user_scheduler_job_run_details where job_name='CHECKTABLESPACE';
11、禁用job
begin
dbms_scheduler.disable('checktablespace');
end;
/
12、删除JOB
begin
dbms_scheduler.drop_job('checktablespace');
end;
/
begin
dbms_scheduler.drop_program('check_tablespace');
end;
/
13、每天下午5点查看日志获取表空间的使用情况
[oracle@rman log]$ ls
checktablespace_2021-10-17.log
checktablespace_2021-10-18.log
[oracle@rman log]$ cat checktablespace_2021-10-19.log
TS-name TS-bytes(m) TS-used (m) TS-free(m) TS-per
------------------------------ ----------- ----------- ---------- --------
SYSTEM 750 743.87 6.13 99.18
SYSAUX 600 570.87 29.13 95.15
USERS 53.75 40.25 13.5 74.88
UNDOTBS1 760 13.75 746.25 1.81
ITPUX03 100 1 99 1.00
ITPUX01 100 1 99 1.00
ITPUX02 100 1 99 1.00
HBUGS007 500 1 499 0.20




