测试DBMS_SCHEDULER

本文提供了一个简单的 Oracle Scheduler 示例,包括创建存储过程、设置作业和调度。同时介绍了如何为作业分配资源,以及使用权限进行管理。此外,文章还提供了权限查询和分配的方法。

需要用到Oracle的job,于是看了文档,很长,和详细,可惜没有看到一个简单的从头至尾的例子。

 

27 Using the Scheduler

Oracle Database provides database job capabilities through Oracle Scheduler (the Scheduler). This chapter explains how touse the various Scheduler components, and discusses the following topics:

 

本地做了一个小测试,很简单。

-- 1. The procedure
create or replace procedure sp_test is
begin
  insert into testtab(ddl_txt)
  values ('a');
  commit;
end sp_test;
/

-- 2. The job and schedule.
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name           =>  'test_job',
   job_type           =>  'STORED_PROCEDURE',
   job_action         =>  'sp_test',
   start_date         =>  sysdate,
   repeat_interval    =>  'FREQ=MINUTELY;INTERVAL=1',
   comments           =>  'test job');
END;
/

exec DBMS_SCHEDULER.ENABLE('test_job');

就可以了。

 

 ===== 后记

需要“MANAGE SCHEDULER”的系统权限

 

查看如下:

select *  from role_sys_privs where privilege = 'MANAGE SCHEDULER';

 

授权如下:

SQL> grant SCHEDULER_ADMIN to xxxx;
 
Grant succeeded
 
SQL>

SQL> select * from role_sys_privs a where a.privilege = 'MANAGE SCHEDULER';
 
ROLE                           PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
SCHEDULER_ADMIN                MANAGE SCHEDULER                         YES
 
SQL>

 

 关于权限角色的查询,引用如下:

http://bbs.youkuaiyun.com/topics/350162742

 

--1.查看所有用户:
  select * from dba_users;
  select * from all_users;
  select * from user_users;
 
--2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):
  select * from dba_sys_privs;
  select * from user_sys_privs;
 
--3.查看角色(只能查看登陆用户拥有的角色)所包含的权限
 
sql>select * from role_sys_privs;
 
--4.查看用户对象权限:
  select * from dba_tab_privs;
  select * from all_tab_privs;
  select * from user_tab_privs;
 
--5.查看所有角色:
  select * from dba_roles;
 
--6.查看用户或角色所拥有的角色:
  select * from dba_role_privs;
  select * from user_role_privs;
 
--7.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
 
select * from V$PWFILE_USERS
 
--注意:
--1、以下语句可以查看Oracle提供的系统权限
 
select name from sys.system_privilege_map
 
--2、查看一个用户的所有系统权限(包含角色的系统权限)
 
SELECT privilege
  FROM dba_sys_privs
 WHERE grantee = 'DATAUSER'
UNION
SELECT privilege
  FROM dba_sys_privs
 WHERE grantee IN (SELECT granted_role FROM dba_role_privs WHERE grantee = 'DATAUSER');

 

另有一个相关的:

http://blog.youkuaiyun.com/shuangyan5230/article/details/7186811

oracle -- 授权 SCHEDULER

  1. --授权 SCHEDULER和JOB  
  2. GRANT SCHEDULER_ADMIN TO username;  
  3.   
  4. GRANT CREATE JOB TO scott;  
  5.   
  6. GRANT ALTER myjob1 TO scott;  
  7.   
  8. GRANT MANAGE SCHEDULER TO adam;  
  9.   
  10.   
  11. Grant SELECT_CATALOG_ROLE to username;  
  12. GRANT SCHEDULER_ADMIN TO username;   
  13. grant create job to username;  
  14. grant create PROCEDURE to username;  
  15. grant CREATE TRIGGER to username;  
  16. grant CREATE View to username;  
  17. grant EXECUTE ANY PROCEDURE to username;  
  18. grant MANAGE SCHEDULER to username;  
  19.   
  20.   
  21. -- 开始一个JOB  
  22. BEGIN  
  23.   
  24. DBMS_SCHEDULER.CREATE_JOB (  
  25.   
  26.    job_name            =>  'TEST_JOB',  
  27.   
  28.    job_type            =>  'STORED_PROCEDURE',    --job的类型是执行sql语句  
  29.   
  30.    job_action          =>  'PROC_TEST',  
  31.   
  32.    start_date          =>   sysdate,  
  33.   
  34.    repeat_interval     =>  'freq = minutely; interval=1',   --每分钟执行一次  
  35.   
  36.    enabled             =>   true,  
  37.   
  38.    comments            =>  'MY JOB');  
  39.   
  40. END;  
  41.   
  42. /  
  43.   
  44. -- 运行JOB  
  45.   
  46. exec dbms_scheduler.enable ('TEST_JOB');  
  47.   
  48. -- 删除JOB  
  49. BEGIN  
  50.   
  51. DBMS_SCHEDULER.DROP_JOB (           --删除job;多个job间用逗号隔开  
  52.   
  53.    job_name   =>  'TEST_JOB',  
  54.   
  55.    force      =>  TRUE);  
  56.   
  57. END;  
  58.   
  59.   
  60.   
  61.   
  62. ----------------------------------------------------  
  63. -- 创建调度,每隔1个小时调度一次  
  64. BEGIN  
  65.   
  66. DBMS_SCHEDULER.CREATE_SCHEDULE (           --创建计划任务  
  67.   
  68.   schedule_name     => 'KK_SCHEDULE',  
  69.   
  70.   repeat_interval   => 'FREQ=HOURLY; INTERVAL=1',    --执行间隔:每1小时  
  71.   
  72.   comments          => 'Every 1 HOURS');  
  73.   
  74. END;  
  75.   
  76. /  
  77.   
  78. -- 创建job 并把它加入到scheduler里面  
  79. BEGIN  
  80.   
  81. DBMS_SCHEDULER.CREATE_JOB (        
  82.   
  83.    job_name                 =>  'JOB_CLLCX',  
  84.   
  85.    job_type                 =>  'STORED_PROCEDURE',  
  86.   
  87.    job_action               =>  'PROC_CLLTJ',  
  88.   
  89.    schedule_name            =>  'KK_SCHEDULE');  
  90.   
  91. END;  
  92.   
  93. /  
  94.   
  95.   
  96. --  查询JOB  
  97. select job_name, schedule_name from user_scheduler_jobs;  
  98.   
  99. -- JOB是否运行  
  100. SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'JOB_CLLCX';  
  101.   
  102. -- 运行JOB  
  103. BEGIN  
  104.   
  105. DBMS_SCHEDULER.ENABLE ('JOB_CLLCX');   /* sys.jobclass1下的所有jobs都会被enable */  
  106.   
  107. END;  

--DBMS_SCHEDULER 运行信息
select job_name,state,enabled,to_char(last_start_date,'yyyy-mm-dd hh24:mi:ss'), schedule_name
from dba_scheduler_jobs;
 
--DBMS_SCHEDULER运行成功与否信息
SELECT log_id, job_name, status,TO_CHAR(ACTUAL_START_DATE,'yyyy-mm-dd HH24:MI:ss') start_date,
           TO_CHAR (log_date, 'yyyy-mm-dd HH24:MI:ss') log_date
      FROM dba_scheduler_job_run_details
     WHERE job_name = 'GATHER_STATS_JOB'
     order by 4 DESC;
 
--查询执行时间情况
select t1.window_name,t1.repeat_interval,t1.duration from dba_scheduler_windows t1,dba_scheduler_wingroup_members t2
 where t1.window_name=t2.window_name and t2.window_group_name='MAINTENANCE_WINDOW_GROUP';
 
--修改执行时间
begin
dbms_scheduler.set_attribute('WEEKEND_WINDOW','REPEAT_INTERVAL','freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0');
dbms_scheduler.set_attribute('WEEKEND_WINDOW','DURATION','+002 00:00:00');
end;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值