日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

oracle user_scheduler_jobs,Oracle 定时任务dbms_scheduler

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle user_scheduler_jobs,Oracle 定时任务dbms_scheduler 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 簡介

在Oracle 10g之前,我們通過DBMS_JOB來管理定時任務;

而10g之后,則推薦使用DBMS_SCHEDULER來管理定時任務,因為它提供了更強大的功能和靈活的機制。

2. 需要的權限

CREATE JOB ? ? ? ? ?-- (必須, 要執行DBMS_SCHEDULER, 需要有create job權限)

CREATE EXTERNAL JOB -- (可選, 創建執行操作系統命令的job時需要)

# 查詢用戶所擁有的角色以及角色所包含的權限

select * from role_sys_privs where role in (

select granted_role from dba_role_privs where grantee='SCOTT'

) order by role;

# 查詢直接授予用戶的權限

select * from dba_sys_privs where grantee='SCOTT';

3. 一個簡單的Demo

3.1 創建JOBcreate?table?test_t1(id?int,?create_date?date);

create?or?replace?procedure?test_p1

is

v_maxId?test_t1.id%type?:=?1;

begin

select?nvl(max(id),?0)?into?v_maxId?from?test_t1;

insert?into?test_t1?values(v_maxId?+?1,?sysdate);

commit;

end?test_p1;

/

declare

v_count?int?:=?0;

begin

select?count(*)?into?v_count?from?user_scheduler_jobs?where?job_name='TEST_JOB1';

if?v_count?>?0?then

dbms_scheduler.drop_job('TEST_JOB1');

end?if;

dbms_scheduler.create_job?(

job_name????????=>?'test_job1',

job_type????????=>?'STORED_PROCEDURE',

job_action??????=>?'TEST_P1',

start_date??????=>?sysdate,

repeat_interval?=>?'FREQ=MINUTELY;INTERVAL=1',

enabled?????????=>?true

);

end;

/job_name????????:?必選,?任務名稱

job_type????????:?必選,?任務類型(

PLSQL_BLOCK,??????--?執行一個PL/SQL匿名快

STORED_PROCEDURE,?--?執行一個存儲過程

EXECUTABLE,???????--?執行一個外部程序

CHAIN?????????????--?執行一個CHAIN

)

job_action??????:?必選,?任務內容,?與job_type配合使用

start_date??????:?可選,?首次執行時間,?為空時表示立即執行

repeat_interval?:?可選,?執行頻率,?為空時表示只執行一次(

FREQ=MINUTELY;?--?表示間隔單位,?可選值有YEARLY,?MONTHLY,?WEEKLY,?DAILY,?HOURLY,?MINUTELY,?SECONDLY

INTERVAL=1?????--?表示間隔周期

)

enabled?????????:?可選,?是否啟用任務

詳細參數可參考:http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sched.htm#ARPLS72960

3.2 查看JOB執行情況

-- 查看已創建的JOB

select job_name, job_type, enabled, state from user_scheduler_jobs;

-- 查看JOB運行日志

select log_id, log_date, status from user_scheduler_job_run_details where job_name='TEST_JOB1';

3.3 刪除JOB

exec dbms_scheduler.drop_job('TEST_JOB1');

Oracle Scheduler Jobs

Repeat Interval參數

FREQ 關鍵字用來指定間隔的時間周期,可選參數有:YEARLY(年),?MONTHLY(月),?WEEKLY(周),?DAILY(日),?HOURLY(時),?MINUTELY(分), SECONDLY(秒)等單位。

INTERVAL 關鍵字用來指定間隔的頻繁,可指定的值的范圍從1-999。

BYHOUR? 指定一天中的小時。可指定的值的范圍從1-24。16,17,18就表示每天下午的4、5、6點。

BYDAY 關鍵字用來指定每周的哪天運行。

BYMONTHDAY 關鍵字用來指定每月中的哪一天。-1 表示每月最后一天。

BYMONTH? 關鍵字用來指定每年的月份。

BYDATE 指定日期。0310就表示3月10日。

例如:

運行每星期五。(所有這三個例子是等價的。)FREQ=DAILY;?BYDAY=FRI;

FREQ=WEEKLY;?BYDAY=FRI;

FREQ=YEARLY;?BYDAY=FRI;

設置任務隔一周運行一次,并且僅在周5運行:FREQ=WEEKLY;?INTERVAL=2;?BYDAY=FRI;

在每月的最后一天運行FREQ=MONTHLY;?BYMONTHDAY=-1;

三月十日開。(兩個例子是等價的)FREQ=YEARLY;?BYMONTH=MAR;?BYMONTHDAY=10;

FREQ=YEARLY;?BYDATE=0310;

設置任務每10隔天運行:REPEAT_INTERVAL?=>?'FREQ=DAILY;?INTERVAL=10';

設置任務在每天的下午4、5、6點時運行:REPEAT_INTERVAL?=>?'FREQ=DAILY;?BYHOUR=16,17,18';

設置任務在每月29日運行:REPEAT_INTERVAL?=>?'FREQ=MONTHLY;?BYMONTHDAY=29';

設置任務在每年的最后一個周5運行:REPEAT_INTERVAL?=>?'FREQ=YEARLY;?BYDAY=-1FRI';

設置任務每隔50個小時運行:REPEAT_INTERVAL?=>?'FREQ=HOURLY;?INTERVAL=50';

repeat_interval => 'FREQ=HOURLY; INTERVAL=2'

每隔2小時運行一次job

repeat_interval => 'FREQ=DAILY'

每天運行一次job

repeat_interval => 'FREQ=WEEKLY; BYDAY=MON,WED,FRI"

每周的1,3,5運行job

repeat_interval => 'FREQ=YEARLY; BYMONTH=MAR,JUN,SEP,DEC; BYMONTHDAY=30'

每年的3,6,9,12月的30號運行job

既然說到了repeat_interval,你可能要問:"有沒有一種簡便的方法來得出,或者說是評估出job的每次運行時間,以及下一次的運行時間呢?"dbms_scheduler包提供了一個過程evaluate_calendar_string,可以很方便地完成這個需求!

https://www.cnblogs.com/lanzi/archive/2012/11/23/2784815.html

總結

以上是生活随笔為你收集整理的oracle user_scheduler_jobs,Oracle 定时任务dbms_scheduler的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。