oracle使用DBMS_SCHEDULER排程作業
dbms_scheduler
包的功能比dbms_job
包強大很多,但是很多初學者直接被它的複雜性嚇跑了,跟著我,只需幾分鐘就會用了。
三個概念
大多數人看到這個包裡的函式和函式裡眾多的引數,就開始暈菜了,不要被這些表象迷惑了,其實這些東西都是圍繞著三個基本概念,schedule
,program
和job
。oracle
是為了複用的目的,提煉出了排程的這三個要素,弄懂這三個要素,立刻豁然開朗。
schedule
schedule
表示排程計劃表。排程從什麼時間開始被排程,什麼時候結束,以什麼頻度排程。使用DBMS_SCHEDULER.CREATE_SCHEDULE
過程建立schedule
。
begin
DBMS_SCHEDULER.CREATE_SCHEDULE (
schedule_name => ¨daily_schedule¨,
start_date => SYSDATE,
repeat_interval => ¨FREQ=DAILY ; INTERVAL=1¨,
comments => ¨every one day¨);
END;
/
其中repeat_interval
引數,支援兩種格式:
dbms_job
裡的interval
格式,建議讓這種晦澀語法見鬼去吧- 日曆表示式(
linux
系統的crontab
使用的格式)
日曆表示式分為三部分: 第一部分是頻率,也就是”FREQ
”這個關鍵字,它是必須指定的; 第二部分是時間間隔,也就是”INTERVAL
”這個關鍵字,取值範圍是1-999
. 它是可選的引數; 第三部分是附加的引數,可用於精確地指定日期和時間,它也是可選的引數,下面這些值都是合法的:
BYMONTH,BYWEEKNO,BYYEARDAY,BYMONTHDAY,BYDAY
BYHOUR,BYMINUTE,BYSECOND
看幾個例子就會用了
每隔2小時執行一次
repeat_interval => 'FREQ=HOURLY; INTERVAL=2'
每天執行一次
repeat_interval => 'FREQ=DAILY'
每週的1,3,5執行
repeat_interval => 'FREQ=WEEKLY; BYDAY=MON,WED,FRI"
每年的3,6,9,12月的18號執行
repeat_interval => 'FREQ=YEARLY; BYMONTH=MAR,JUN,SEP,DEC; BYMONTHDAY=18'
另外使用dbms_scheduler.evaluate_calendar_string
可以方便的計算出什麼時候執行該排程。
program
program
表示排程應該做什麼事情,是對程式的抽象。使用DBMS_SCHEDULER.CREATE_PROGRAM
建立program
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM (
program_name => ¨time_synchronization¨,
program_action => ¨/sbin/ntpdate 128.59.67.100¨,
program_type => ¨EXECUTABLE¨,
enabled => TRUE);
END;
/
排程現在可以支援呼叫外部程式了,這點很強大。
目前程式支援三種型別:
PL/SQL
塊:PLSQL_BLOCK
,- 儲存過程:
STORED_PROCEDURE
- 外部程式:
EXECUTABLE
, 外部程式可以是一個shell
指令碼,也可以是作業系統級別的命令。
program_action
: 根據program_type
的不同,program_action
有不同的含義。
program_type
是儲存過程,就需要指定儲存過程的名字;program_type
是PL/SQL
塊,就需要輸入完整的PL/SQL
程式碼;program_type
是外部程式,就需要輸入script
的名稱或者作業系統的指令名
job
job
表示按照指定的schedule
,執行指定program
,完成使用者指定的工作。使用DBMS_SCHEDULER.CREATE_JOB
建立job
。
SQL> BEGIN
2 DBMS_SCHEDULER.CREATE_JOB (
3 job_name => ¨time_synchron¨,
4 program_name => ¨time_synchronization¨,
5 schedule_name => ¨daily_schedule¨,
6 enabled => true);
7 END;
8 /
排程的相關操作
作業相關操作
一般情況下是如果你設定了job
的enable
是true
的話,oracle
會按照你的計劃,定時呼叫你的job
,不需要手動執行。如果臨時需要馬上排程job
也是可以的。
exec dbms_scheduler.run_job(¨time_synchron¨);
如果覺得沒有必要繼續執行這個job
了,可以停止該job
,讓oracle
以後不要再繼續排程了。
exec dbms_scheduler.stop_job(¨time_synchron¨);
檢視作業相關情況
Job
每執行一次,無論成功或失敗,均會[DBA|ALL|USER]_SCHEDULER_JOB_LOG
中生成一條對應的記錄(前提是LOGGING_LEVEL
屬性值未設定為DBMS_SCHEDULER.LOGGING_OFF
),job
的詳細資訊可以通過[DBA|ALL|USER]_SCHEDULER_JOB_RUN_DETAILS
檢視檢視。
示例
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => '"CHINA_TEST"."JOB_AUTOMODIFYINFO"',
job_type => 'STORED_PROCEDURE',
job_action => 'CHINA_TEST.AUTOMODIFYINFO',
number_of_arguments => 0,
start_date => TO_TIMESTAMP_TZ('2018-08-20 10:26:52.000000000 ASIA/SHANGHAI','YYYY-MM-DD HH24:MI:SS.FF TZR'),
repeat_interval => 'FREQ=MINUTELY;INTERVAL=2',
end_date => NULL,
enabled => FALSE,
auto_drop => FALSE,
comments => 'JOB作業說明');
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => '"CHINA_TEST"."JOB_AUTOMODIFYINFO"',
attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);
DBMS_SCHEDULER.enable(
name => '"CHINA_TEST"."JOB_AUTOMODIFYINFO"');
END;
相關文章
- oracle排程程式作業dbms_schedulerOracle
- Apache Oozie 教程:使用 Oozie 排程 Hadoop 作業ApacheHadoop
- 使用持續整合工具Jenkins進行Kettle作業排程Jenkins
- Oracle排程作業引起的空間驟增問題處理記錄Oracle
- 使用 K8s 進行作業排程實戰分享K8S
- 批處理作業排程-分支界限法
- 作業系統之排程演算法作業系統演算法
- Oracle定時任務dbms_schedulerOracle
- async-await:協作排程 vs 搶佔排程AI
- 實現Quartz.NET的HTTP作業排程quartzHTTP
- 作業系統精髓設計原理 程式排程作業系統
- TKE 使用者故事 | 作業幫 Kubernetes 原生排程器優化實踐優化
- Elastic-job實戰(分散式作業排程框架)AST分散式框架
- .NET Core Hangfire週期性作業排程問題
- 【作業系統】4.程序排程演算法作業系統演算法
- oracle定時任務dbms_job與dbms_scheduler使用方法Oracle
- 使用FUTURE 中的訊息避免計劃排程的批處理作業 - CodeOpinion
- 作業系統4——處理機排程與死鎖作業系統
- 分散式後臺作業排程器JobRunr介紹 - JAXenter分散式
- 課程排課系統:智慧排課+線上約課+直播上課+作業打卡!
- Flink排程之排程器、排程策略、排程模式模式
- 使用Hazelcast排程Spring tasksASTSpring
- ORA-27492 無法執行作業,排程程式不可用
- Volcano:在離線作業混部管理平臺,實現智慧資源管理和作業排程
- 多機器人協作排程問題機器人
- 作業排程中介軟體 Elastic-Job-Cloud 原始碼分析 —— 高可用ASTCloud原始碼
- 作業系統綜合題之“採用實時排程,可排程的限制條件和可排程的最大X值是是多少ms的CPU時間”作業系統
- ASP.NET Core託管執行Quartz.NET作業排程詳解ASP.NETquartz
- 系統設計:如何設計一個分散式作業排程器 ?- Rakshesh分散式
- 【作業系統】磁碟的四種基本排程演算法(圖表說明)作業系統演算法
- ucore作業系統學習(六) ucore lab6執行緒排程器作業系統執行緒
- 行業分析| 排程行業未來趨勢行業
- Celery非同步排程框架(一)基本使用非同步框架
- 程式排程之最短作業優先
- kubernetes 排程
- Go排程器系列(3)圖解排程原理Go圖解
- 排程器簡介,以及Linux的排程策略Linux
- Go語言排程器之主動排程(20)Go