可以用圖形化界面來創(chuàng)建JOB,如圖:在PL/SQL的項(xiàng)目DBMS_JOBS中進(jìn)行新建。
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的蘄春網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
填寫好上面標(biāo)紅的地方后,點(diǎn)擊應(yīng)用即可生成計(jì)劃!
特別提示:
oracle是執(zhí)行完任務(wù),才按照interval去計(jì)算下次執(zhí)行時間?。?!
為精確每個5分鐘執(zhí)行一個任務(wù),必須自己計(jì)算時間。
如:trunc_minute(sysdate)+5/1440
create or replace function trunc_minute(v_date date) return date as
begin
return to_number(trunc(to_char(v_date, 'mi')/5))*5/(24*60) + trunc(v_date, 'hh24');
end;
建數(shù)據(jù)庫一般方法:
1 在安裝數(shù)據(jù)庫系統(tǒng)的時候就可以選擇同時創(chuàng)建數(shù)據(jù)庫
2 安裝數(shù)據(jù)庫系統(tǒng)是不建庫,安裝之后建庫;
開始 運(yùn)行 輸入dbca 回車,在彈出的界面操作,下一步下一步,
其實(shí)跟第一種一樣的
3 手工建庫:
創(chuàng)建數(shù)據(jù)庫腳本:
create database mydb
maxinstances 1 maxloghistory 1
maxlogfiles 5 maxlogmembers 3
maxdatafiles 100
datafile 'E:\oracle\oradata\mydb\system01.dbf'
size 250M reuse autoextend on next 10240K maxsize unlimited
extent management local
default temporary tablespace temp tempfile
'E:\oracle\oradata\mydb\temp01.dbf' size 40M reuse autoextend on
next 640K maxsize unlimited
undo tablespace "undotbs1" datafile
'E:\oracle\oradata\mydb\undotbs01.dbf' size 200M reuse
autoextend on next 5120K maxsize unlimited
character set we8mswin1252
national character set al16utf16
logfile
group 1 ('E:\oracle\oradata\mydb\redo01a.log','E:\oracle\oradata\mydb\redo01b.log') size 102400K,
group 1 ('E:\oracle\oradata\mydb\redo02a.log','E:\oracle\oradata\mydb\redo02b.log') size 102400K,
group 1 ('E:\oracle\oradata\mydb\redo03a.log','E:\oracle\oradata\mydb\redo03b.log') size 102400K;
手工建庫比起使用DBCA建庫來說,是比較麻煩的,但是如果我們學(xué)好了手工建庫的話,就可以使我們更好地理解Oracle數(shù)據(jù)庫的體系結(jié)構(gòu)。手工建庫須要經(jīng)過幾個步驟,每一個步驟都非常關(guān)鍵。它包括:
1、 創(chuàng)建必要的相關(guān)目錄
2、 創(chuàng)建初始化參數(shù)文件
3、 設(shè)置環(huán)境變量Oracle_sid
4、 創(chuàng)建實(shí)例
5、 創(chuàng)建口令文件
6、 啟動數(shù)據(jù)庫到nomount(實(shí)例)狀態(tài)
7、 執(zhí)行建庫腳本
8、 執(zhí)行catalog腳步本創(chuàng)建數(shù)據(jù)字典
9、 執(zhí)行catproc創(chuàng)建package包
10、 執(zhí)行pupbld
11、 由初始化參數(shù)文件創(chuàng)建spfile文件
12、 執(zhí)行scott腳本創(chuàng)建scott模式
做完了以上的步驟之后就可以使用“SQLalter database open;”打開數(shù)據(jù)庫正常的使用了。下面,我將具體地把以上的幾個步驟用實(shí)驗(yàn)展開來講。
實(shí)驗(yàn)系統(tǒng)平臺:Windows Server 2000 數(shù)據(jù)庫系統(tǒng)版本:Oracle Database 10G
Oracle的安裝路徑:D盤 創(chuàng)建的數(shù)據(jù)庫名稱:book
1、打開命令行工具,創(chuàng)建必要有相關(guān)目錄
C:\mkdir D:\oracle\product\10.1.0\admin\book
C:\mkdir D:\oracle\product\10.1.0\admin\book\bdump
C:\mkdir D:\oracle\product\10.1.0\admin\book\udump
C:\mkdir D:\oracle\product\10.1.0\admin\book\cdump
C:\mkdir D:\oracle\product\10.1.0\admin\book\pfile
C:\mkdir D:\oracle\product\10.1.0\admin\book\create
C:\mkdir D:\oracle\product\10.1.0\oradata\book
上面創(chuàng)建目錄的過程也可以在Windows的圖形界面中去創(chuàng)建。其中D:\oracle\product\10.1.0\admin\book目錄下的幾個子目錄主要用于存放數(shù)據(jù)庫運(yùn)行過程中的跟蹤信息。最重要的兩上子目錄是bdump和udump目錄,bdump目錄存放的是數(shù)據(jù)庫動行過程中的各個后臺進(jìn)程的跟蹤信息,當(dāng)中alert文件是警告文件,其文件名稱為alert_book.log,當(dāng)數(shù)據(jù)庫出現(xiàn)問題時,首先就可以去查看此文件以找出原因,手工創(chuàng)建過程中出現(xiàn)的各種問題往往也可以通過查看這個文件找到原因。Udump目錄存放和特定會話相關(guān)的跟蹤信息。D:\oracle\product\10.1.0\oradata\book目錄存放各種數(shù)據(jù)庫文件,包括控制文件、數(shù)據(jù)文件、重做日志文件。
2、創(chuàng)建初始化參數(shù)文件
數(shù)據(jù)庫系統(tǒng)啟動時須要用初始化參數(shù)文件的設(shè)置分配內(nèi)存、啟動必要的后臺進(jìn)程的。因此,初始化參數(shù)文件創(chuàng)建的是否正確、參數(shù)設(shè)置是否正確關(guān)系著整個建庫的“命運(yùn)”。
創(chuàng)建初始化參數(shù)文件可以通過拷貝現(xiàn)在的初始化參數(shù)文件并將其做適當(dāng)?shù)男薷募纯桑瑥亩槐匾檬止とヒ痪湟痪涞貙懗鰜?,因?yàn)槌跏蓟瘏?shù)文件的結(jié)構(gòu)體系基本上都是一樣的。在我們安裝Oracle的時候,系統(tǒng)已經(jīng)為我們安裝了一個名為orcl的數(shù)據(jù)庫,于是我們可以從它那里得到一份初始化參數(shù)文件。打開D:\oracle\product\10.1.0\admin\orcl\pfile,找到init.ora文件,把它拷貝到D:\oracle\product\10.1.0\bd_1\databse下,并將其改名為initbook.ora。接著用記事本的方式打開initbook.ora,修改以下的內(nèi)容:
db_domain=""
db_name=book
control_files=("D:\oracle\product\10.1.0\oradata\book\control01.ctl", "D:\oracle\product\10.1.0\oradata\book\control02.ctl", "D:\oracle\product\10.1.0\oradata\book\control03.ctl")
undo_management=AUTO
undo_tablespace=UNDOTBS1 ――注意此處的“UNDOTBS1”要和建庫腳步本中對應(yīng)
background_dump_dest=D:\oracle\product\10.1.0\admin\book\bdump
core_dump_dest=D:\oracle\product\10.1.0\admin\book\cdump
user_dump_dest=D:\oracle\product\10.1.0\admin\book\udump
3、打開命令行,設(shè)置環(huán)境變量oracle_sid
C:\set oracle_sid=book
設(shè)置環(huán)境變量的目地是在默認(rèn)的情況下,指定命令行中所操作的數(shù)據(jù)庫實(shí)例是book。
4、創(chuàng)建實(shí)例(即后臺控制服務(wù))
C:\oradim –new –sid book
oradim是創(chuàng)建實(shí)例的工具程序名稱,-new表明執(zhí)行新建實(shí)例,-delete表明執(zhí)行刪掉實(shí)例,-sid指定害例的名稱。
5、創(chuàng)建口令文件
C:\orapwd file=D:\oracle\product\10.1.0\db_1\database\pwdbook.ora password=bookstore entries=2
orapwd是創(chuàng)建口令文件的工肯程序各稱,file參數(shù)指定口令文件所在的目錄和文件名稱,password參數(shù)指定sys用戶的口令,entries參數(shù)指定數(shù)據(jù)庫擁用DBA權(quán)限的用戶的個數(shù),當(dāng)然還有一個force參數(shù),相信您不指即明,這里就不再細(xì)述。
請注意,這里的命令要一行輸入,中間不得換行,否則會出現(xiàn)不必要的錯誤。
口令文件是專門存放sys用戶的口令,因?yàn)閟ys用戶要負(fù)責(zé)建庫、啟動數(shù)據(jù)庫、關(guān)閉數(shù)據(jù)庫等特殊任務(wù),把以sys用戶的中令單獨(dú)存放于口令文件中,這樣數(shù)據(jù)庫末打開時也能進(jìn)行口令驗(yàn)證。
6、啟動數(shù)據(jù)庫到nomount(實(shí)例)狀態(tài)
C:\sqlplus /nolog
SQL*Plus:Release 10.1.0.2.0 - Production on 星期三 6月 29 23:09:35 2005
Copyright 1982,2004,Oracle. All rights reserved.
SQLconnect sys/bookstore as sysdba ---這里是用sys連接數(shù)據(jù)庫
已連接到空閑例程
SQLstartup nomount
ORACLE 例程已經(jīng)啟動。
Total System Global Area 319888364bytes
Fixed Size 453612bytes
Variable Size 209715200bytes
Database Buffers 109051904bytes
Redo Buffers 667648bytes
SQL
7、執(zhí)行建庫腳本
執(zhí)行建庫腳本,首先要有建庫的腳本。(去哪找建庫腳本呢?我又沒有!)不用著急,請接著往下看。
得到一個符合自己要求的建庫腳本有兩種方法,一種方法是在自己的電腦上用DBCA來建,接照它的提示一步步地去做,在做到第十二步的時候,請選擇“生成建庫腳本”,然后就大功告成,你就可以到相應(yīng)的目錄上去找到那個腳本并適當(dāng)?shù)匦匏憧杀阌?。另一種方法就是自己手工去寫一份建庫腳本,這也是這里要見意使用的方法,用記事本編輯如下的內(nèi)容,并將其保存為文件名任取而后綴名為(*.sql)的SQL腳本,這里保存到E盤根本錄下且文件名稱為book.sql。
create database xuyn
datafile 'E:\oracle\oradata\xuyn\system01.dbf' size 300M reuse autoextend on next 10240K maxsize unlimited
extent management local
--10g新特性sysaux表空間
--sysaux datafile 'E:\oracle\oradata\xuyn\sysaux01.dbf'
--size 120M reuse autoextend on next 10240K maxsize unlimited
default temporary tablespace temp
tempfile 'E:\oracle\oradata\xuyn\temp01.dbf' size 20M reuse autoextend on next 640K maxsize unlimited
undo tablespace "UNDOTBS1"
datafile 'E:\oracle\oradata\xuyn\undotbs01.dbf' size 200M reuse autoextend on next 5120K maxsize unlimited
logfile
group 1 ('E:\oracle\oradata\xuyn\redo01.log') size 10240K,
group 2 ('E:\oracle\oradata\xuyn\redo02.log') size 10240K,
group 3 ('E:\oracle\oradata\xuyn\redo03.log') size 10240K;
接著就執(zhí)行剛建的建庫腳本:
SQLstart E:\book.sql
8、執(zhí)行catalog腳步本創(chuàng)建數(shù)據(jù)字典
SQLstart D:\oracle\product\10.1.0\db_1\rdbms\admin\catalog.sql
9、執(zhí)行catproc創(chuàng)建package包
SQLstart D:\oracle\product\10.1.0\db_1\rdbms\admin\catproc.sql
10、執(zhí)行pupbld
在執(zhí)行pupbld之前要把當(dāng)前用戶(sys)轉(zhuǎn)換成system,即以system賬戶連接數(shù)據(jù)庫。因?yàn)榇藬?shù)據(jù)庫是剛建的,所以system的口令是系統(tǒng)默認(rèn)的口令,即manager。你可以在數(shù)據(jù)庫建好以后再來重新設(shè)置此賬戶的口令。
SQLconnect system/manager
SQLstart D:\oracle\product\10.1.0\db_1\sqlplus\admin\pupbld.sql
11、由初始化參數(shù)文件創(chuàng)建spfile文件
SQLcreate spfile from pfile;
12、執(zhí)行scott腳本創(chuàng)建scott模式
SQLstart D:\oracle\product\10.1.0\db_1\rdbms\admin\scott.sql
13、把數(shù)據(jù)庫打開到正常狀態(tài)
SQLalter database open;
14、以scott連接到數(shù)據(jù)庫(口令為tiger),測試新建數(shù)據(jù)庫是否可以正常運(yùn)行
至此,整個數(shù)據(jù)庫就已經(jīng)建好了。接著你就可以在此數(shù)據(jù)庫上建立自己的賬戶和表空間啦以及數(shù)據(jù)庫對象,這里就不再作更多地?cái)⑹?。(?zé)任編輯:盧兆林)
啟動數(shù)據(jù)庫:
oradim -startup -sid xuyn -starttype srvc
sqlplus /nolog
conn sys/xuyn as sysdba
startup
工作中,我們使用的數(shù)據(jù)庫大部分是oracle、mysql、db2、sql server等數(shù)據(jù)庫,在使用oracle最匹配的工具plsql的時候,如果用plsql創(chuàng)建定時器呢看下面我簡單介紹使用工具創(chuàng)建定時器的方法。
安裝準(zhǔn)備 首先我們需要去下載Oracle10g的安裝包,現(xiàn)在官網(wǎng)上已經(jīng)不提供Oracle10g的下載了。這里提供百度云盤的下載地址: 百度云盤: 官網(wǎng)(11g、12c下載): 安裝 *下載完后,我們解壓縮鏡像文件得到如下目錄:*點(diǎn)擊setup.exe,進(jìn)入安裝界面:*如果在windows7系統(tǒng)安裝中出現(xiàn)Checkingoperatingsystemversion:mustbe4.0,5.0,5.1or5.2.錯誤,解決辦法安裝程序——》屬性——》兼容性,勾選XP兼容模式和以管理員身份運(yùn)行此程序,即可。 *出現(xiàn)基本安裝和高級安裝?;景惭b較簡單,配置少,很多配置采用Oracle默認(rèn)的。這里我們點(diǎn)擊高級安裝,下一步進(jìn)入如下頁面:*其中,源表示你Oracle的安裝文件完整路徑(不要改變,默認(rèn)即可),目標(biāo)表示Oracle的安裝位置,確定好目錄后,點(diǎn)擊下一步:*選擇安裝類型: 企業(yè)版:面向企業(yè)級應(yīng)用,用于對安全性要求較高并且任務(wù)至上的聯(lián)機(jī)事務(wù)處理(OLTP)和數(shù)據(jù)倉庫環(huán)境。在標(biāo)準(zhǔn)版的基礎(chǔ)之上安裝所有許可的企業(yè)版選項(xiàng)。 標(biāo)準(zhǔn)版:適用于工作組或部門級別的應(yīng)用,也適用于中小企業(yè)(SME)。提供核心的關(guān)系數(shù)據(jù)庫管理服務(wù)和選項(xiàng)。 個人版:除了僅支持單用戶的開發(fā)和部署之外,與企業(yè)版安裝類型相同(安裝相同的軟件),面向開發(fā)技術(shù)人員。 定制:允許用戶從可安裝的組件列表中選擇安裝單獨(dú)的組件。還可以在現(xiàn)有的安裝中安裝附加的產(chǎn)品選項(xiàng),如要安裝某些特殊的產(chǎn)品或選項(xiàng)就必須選擇此選項(xiàng)。 這里我們選擇企業(yè)版,具體原因我也不清楚。下一步:*指定數(shù)據(jù)庫配置: 全局?jǐn)?shù)據(jù)庫名:用于區(qū)分在分布式系統(tǒng)中的數(shù)據(jù)庫。一般由數(shù)據(jù)庫名和數(shù)據(jù)庫域組成,格式為“數(shù)據(jù)庫名.數(shù)據(jù)庫域”。 SID(SystemIdentifier):用于區(qū)分同一個數(shù)據(jù)庫中的不同實(shí)例。 數(shù)據(jù)庫字符集、數(shù)據(jù)庫示例:看說明。 這里我們?nèi)謹(jǐn)?shù)據(jù)庫名與SID都采用默認(rèn)的orcl,數(shù)據(jù)庫字符集采用簡體中文,不勾選創(chuàng)建帶樣本方案的數(shù)據(jù)庫。點(diǎn)擊下一步:*選擇數(shù)據(jù)庫管理選項(xiàng)。默認(rèn)即可,不選擇電子郵件通知。點(diǎn)擊下一步:*指定數(shù)據(jù)庫文件存儲選項(xiàng): 文件系統(tǒng):指定數(shù)據(jù)庫控制文件、數(shù)據(jù)文件、日志文件等的存儲位置。 自動存儲管理、裸設(shè)備:見說明。 選擇文件系統(tǒng),設(shè)定好存儲路徑。點(diǎn)擊下一步:*指定備份和恢復(fù)選項(xiàng)。采用不啟用備份。點(diǎn)擊下一步:*指定數(shù)據(jù)庫方案的口令。這里不推薦默認(rèn)口令,我們可以為每個用戶名設(shè)定不同的口令。這里為了記錄方便,我們選擇所有賬戶都采用同一個口令,輸入口令system。點(diǎn)擊下一步:*出現(xiàn)概要信息,描述安裝選項(xiàng)。點(diǎn)擊安裝:*安裝過程有些耗時,耐心等待。配置完畢后,顯示數(shù)據(jù)庫信息窗口。單機(jī)口令管理,這里可以鎖定和解鎖用戶、設(shè)置口令等操作:*我們解鎖scott用戶并設(shè)置口令system。點(diǎn)擊確定按鈕返回?cái)?shù)據(jù)庫信息窗口,點(diǎn)擊確定返回“ConfigurationAssistant”窗口,顯示“狀態(tài)”為“成功”:*單擊“下一步”按鈕,就會顯示“安裝結(jié)束”窗口。再點(diǎn)擊退出按鈕。自此Oracle10g的安裝完成。*之后我們便可以在開始菜單中看到安裝的Oracle數(shù)據(jù)庫了。下面我們測試下Oracle數(shù)據(jù)庫是否安裝成功。 測試Oracle安裝是否成功 *這里我們用Oracle數(shù)據(jù)庫自帶的工具SQLPLUS進(jìn)行操作。點(diǎn)擊開始菜單,路徑如下:*點(diǎn)擊進(jìn)入如下界面:*輸入用戶名稱scott、口令system、主機(jī)字符串orcl。點(diǎn)擊確定,進(jìn)入如下頁面:*輸入查詢語句,查詢scott用戶下的emp表,出現(xiàn)如下情況,恭喜你Oracle安裝成功。
Oracle 定時執(zhí)行計(jì)劃任務(wù)
Oracle 在10g 版本以前,計(jì)劃任務(wù)用的是DBMS_JOB 包,10g 版本引入DBMS_SCHEDULER來替代先前的DBMS_JOB,在功能方面,它比DBMS_JOB 提供了更強(qiáng)大的功能和更靈活的機(jī)制管理,但DBMS_JOB 包的使用相對比較簡單,也基本能夠滿足定時執(zhí)行計(jì)劃任務(wù)的需求,故接下來就先看看DBMS_JOB 包的使用方法。
1. DBMS_JOB
我們可以在命令窗口輸入show parameter job_queue_processes 查看數(shù)據(jù)庫中定時任務(wù)的最多并發(fā)數(shù),一般設(shè)置為10(設(shè)置方法:alter system set job_queue_processes=10),如果設(shè)為0,那么數(shù)據(jù)庫定時作業(yè)是不會運(yùn)行的。
oracle 定時執(zhí)行job queue 的后臺進(jìn)程是SNP,要啟動snp,首先看系統(tǒng)模式是否支持sql alter system enable restricted session;或sql alter system disenable restricted session;利用上面的命令更改系統(tǒng)的會話方式為disenable restricted,為snp 的啟動創(chuàng)建條件.
接下來我們嘗試實(shí)現(xiàn)以下功能:每隔一分鐘自動向job_test 表中插入當(dāng)前的系統(tǒng)時間。
1、創(chuàng)測試表
create table job_test(updatetime date);
2、創(chuàng)建JOB
variable v_job_no number;
begin
dbms_job.submit(:v_job_no, 'insert into job_test values(sysdate);', sysdate,'sysdate+1/1440');
end;
/
其中最后一個參數(shù)'sysdate+1/1440'表示時間間隔為每分鐘。其它常用的時間間隔的設(shè)置如下:
(1)如果想每天凌晨1 點(diǎn)執(zhí)行,則此參數(shù)可設(shè)置為'trunc(sysdate)+25/24';(2)如果想每周一凌晨1 點(diǎn)執(zhí)行,則此參數(shù)可設(shè)置為'trunc(next_day(sysdate,1))+25/24';
(3)如果想每月1 號凌晨1 點(diǎn)執(zhí)行,則此參數(shù)可設(shè)置為'trunc(last_day(sysdate))+25/24';
(4)如果想每季度執(zhí)行一次,則此參數(shù)可設(shè)置為'trunc(add_months(sysdate,3),'Q')+1/24';(5)如果想每半年執(zhí)行一次,則此參數(shù)可設(shè)置為'add_months(trunc(sysdate,'yyyy'),6)+1/24';(6)如果想每年執(zhí)行一次,則此參數(shù)可設(shè)置為'add_months(trunc(sysdate,'yyyy'),12)+1/24'。
select * from user_jobs;--查看當(dāng)前用戶的調(diào)度任務(wù)select * from dba_jobs_running;--查看正在執(zhí)行的調(diào)度任務(wù)select * from dba_jobs;--查看執(zhí)行完的調(diào)度任務(wù)select * from all_jobs; -- 查看數(shù)據(jù)庫系統(tǒng)所有任務(wù)實(shí)例1:
1. 創(chuàng)建測試表
create table a(a date);
2. 創(chuàng)建一個存儲過程
create or replace procedure test as
begin
insert into a values(sysdate);
end;
/
3. 創(chuàng)建JOB(任務(wù)計(jì)劃)
variable job1 number;
begin
dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440');end;
/
--每天1440分鐘,即一分鐘運(yùn)行test存儲過程一次4. 運(yùn)行JOB
begin
dbms_job.run(:job1);
end;
/
5. 查看執(zhí)行結(jié)果
select to_char(a,'yyyy/mm/dd hh24:mi:ss') 時間 from a;6.刪除JOB
begin
dbms_job.remove(:job1);
end;
/
job的使用說明:
DBMS_JOB.SUBMIT(:jobno,//job號
'your_procedure;',//要執(zhí)行的過程
trunc(sysdate)+1/24,//下次執(zhí)行時間
'trunc(sysdate)+1/24+1'//每次間隔時間
);
刪除job:dbms_job.remove(jobno);
修改要執(zhí)行的操作:job:dbms_job.what(jobno,what);修改下次執(zhí)行時間:dbms_job.next_date(job,next_date);修改間隔時間:dbms_job.interval(job,interval);停止job:dbms.broken(job,broken,nextdate);啟動job:dbms_job.run(jobno);
例子:
VARIABLE jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,
'Procdemo;',//Procdemo為過程名稱
SYSDATE, 'SYSDATE + 1/720');
commit;
end;
/
描述 Interval參數(shù)值
每天運(yùn)行一次
'SYSDATE + 1'
每小時運(yùn)行一次
'SYSDATE + 1/24'
每10分鐘運(yùn)行一次
'SYSDATE + 10/(60*24)'
每30秒運(yùn)行一次
'SYSDATE + 30/(60*24*60)'
每隔一星期運(yùn)行一次
'SYSDATE + 7'
不再運(yùn)行該任務(wù)并刪除它
NULL
每天午夜12點(diǎn)
'TRUNC(SYSDATE + 1)'
每天早上8點(diǎn)30分
'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午12點(diǎn)
'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每個月第一天的午夜12點(diǎn)
'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每個季度最后一天的晚上11點(diǎn)
'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6點(diǎn)10分
'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'
2. DBMS_SCHEDULER
DBMS_SCHEDULER的功能更強(qiáng)大,定義更靈活,增強(qiáng)了與系統(tǒng)的交互性??梢杂袃煞N方式來定義"計(jì)劃":
1) 使用DBMS_SCHDULER.CREATE_SCHEDULE //定義一個計(jì)劃,計(jì)劃再調(diào)用job;2) 調(diào)用DBMS_SCHDULER.CREATE_JOB //過程直接定義job例子1:用DBMS_SCHDULER.CREATE_JOBE直接創(chuàng)建jobBEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name = 'update_bb', //job的名字
job_type = 'STORED_PROCEDURE', //job的類型為“執(zhí)行存儲過程”
job_action = 'OPS.SALES_PKG.UPDATE_SALES_SUMMARY', //存儲過程的名字start_date = '28-APR-10 07.00.00 PM Australia/Sydney', //這里把時區(qū)去掉也可以!
repeat_interval = 'FREQ=DAILY;INTERVAL=2', /* every other day */enabled =true, //啟動該job
comments = 'My new job'); //注釋
END;
/
參數(shù)說明:
·job_name: 顧名思義,每個job都必須有一個的名稱·schedule_name: 如果定義了計(jì)劃,在這里指定計(jì)劃的名稱·job_type: 目前支持三種類型:
·PLSQL_BLOCK : PL/SQL塊: 需要輸入完整的PL/SQL代碼;·STORED_PROCEDURE : 存儲過程: 需要指定存儲過程的名字;·EXECUTABLE: 外部程序: (外部程序可以是一個shell腳本,也可以是操作系統(tǒng)級別的指令). 需要輸入script的名稱或者操作系統(tǒng)的指令名·enabled: 上面已經(jīng)說過了,指定job創(chuàng)建完畢是否自動激活·comments: 對于job的簡單說明
例子2:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name = 'zbb_job3',
job_type = 'PLSQL_BLOCK', //job的類型是執(zhí)行sql語句job_action = 'insert into bb values(1,sysdate);',start_date = sysdate,
repeat_interval = 'freq = minutely; interval=1', //每分鐘執(zhí)行一次enabled = true,
comments = 'my love');
END;
/
注意: enabled 默認(rèn)為false,oracle不會運(yùn)行此job,所有我們需要enable它SQL exec dbms_scheduler.enable ('zbb_job3');例子3:使用DBMS_SCHDULER.CREATE_SCHEDULE
建立 scheduler(控制時間和頻率),然后給它添加幾個jobs(動作)!
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE ( //創(chuàng)建計(jì)劃任務(wù)schedule_name = 'zbb_schedule',
repeat_interval = 'FREQ=MINUTELY; INTERVAL=5', //執(zhí)行間隔:每5分鐘comments = 'Every 5 MINUTS');
END;
/
接下來往“zbb_schedule”里添加一個job “zbb_job2”:
BEGIN
DBMS_SCHEDULER.CREATE_JOB ( //創(chuàng)建job 并把它加入到scheduler里面job_name = 'zbb_job2',
job_type = 'PLSQL_BLOCK',
job_action = 'insert into bb values(1,sysdate);',schedule_name = 'ZBB_SCHEDULE');
END;
/
再往“zbb_schedule”里添加一個job “zbb_job3”:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name = 'zbb_job3',
job_type = 'PLSQL_BLOCK',
job_action = 'insert into bb values(1,sysdate);',schedule_name = 'ZBB_SCHEDULE');
END;
/
運(yùn)行“select job_name,schedule_name from user_scheduler_jobs;”可以查看到所有的job。
也可以將“zbb_job1” 加入到 “zbb_schedule”
SQL begin
2 dbms_scheduler.SET_ATTRIBUTE( //注意這里執(zhí)行的是修改屬性的過程3 name = 'zbb_job1',
4 attribute = 'schedule_name',
5 value = 'ZBB_SCHEDULE');
6 end;
7 /
刪除 job 及 scheduler:
SQL BEGIN
DBMS_SCHEDULER.DROP_JOB ( //刪除job;多個job間用逗號隔開job_name = 'zbb_job2,zbb_job3',
force = TRUE);
END;
/
如何刪除scheduler:
BEGIN
DBMS_SCHEDULER.DROP_SCHEDULE (
schedule_name = 'zbb_schedule',
force = true ); // 設(shè)為true 強(qiáng)制;false。
END;
/
如何修改job的屬性(frequency:頻率):
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE (
name = 'zbb_job1',
attribute = 'repeat_interval',
value = 'FREQ=DAILY'); //每天執(zhí)行一次
END;
/
jobs創(chuàng)建時為“disabled”狀態(tài)。我們必須手動“enable”它:
BEGIN
DBMS_SCHEDULER.ENABLE ('job1, job2, job3, sys.jobclass1, sys.jobclass2, sys.jobclass3'); /* sys.jobclass1下的所有jobs都會被enable */END;/END;
/
查看job的狀態(tài):
SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'MY_EMP_JOB1';查看Job Logs:
SELECT JOB_NAME, OPERATION, OWNER FROM DBA_SCHEDULER_JOB_LOG;查看Job 運(yùn)行的詳細(xì)情況:
select log_id, job_name, status, to_char(log_date, 'DD-MON-YYYY HH24:MI') log_date from dba_scheduler_job_run_detailswhere job_name = 'MY_JOB14';如何管理計(jì)劃任務(wù)的權(quán)限:
GRANT SCHEDULER_ADMIN TO username;GRANT CREATE JOB TO scott;GRANT ALTER myjob1 TO scott;GRANT MANAGE SCHEDULER TO adam;PLSQL舉例如下:
begin dbms_scheduler.create_job ( job_name = '測試', job_type = 'PLSQL_BLOCK', job_action = 'insert into job_test values(sysdate);', start_date = sysdate, end_date = add_months(sysdate,12000), repeat_interval = 'FREQ=MINUTELY; INTERVAL=1', enabled = true,comments = '定時執(zhí)行計(jì)劃任務(wù)' );
end;
以上代碼可以通過在PLSQL Developer中新建Jobs輕松設(shè)定:
參數(shù)含義如下:
?JOB_NAME :指定任務(wù)的名稱,必選值,注意要確保指定的名稱唯一。
?JOB_TYPE :任務(wù)執(zhí)行的操作類型,必選值,有下列幾個可選值:
?PLSQL_BLOCK :表示任務(wù)執(zhí)行的是一個PL/SQL匿名塊。
?STORED_PROCEDURE :表示任務(wù)執(zhí)行的是ORACLE過程(含PL/SQL PROCEDURE和JAVA PROCEDURE)。
?EXECUTABLE :表示任務(wù)執(zhí)行的是一個外部程序,比如說操作系統(tǒng)命令。
?CHAIN :表示任務(wù)執(zhí)行的是一個CHAIN。
?JOB_ACTION :任務(wù)執(zhí)行的操作,必選值,應(yīng)與JOB_TYPE類型中指定的參數(shù)相匹配。比如說對于PL/SQL匿名塊,此處就可以放置PL/SQL塊的具體代表,類似DECLARE .. BEGIN ..END這類;如果是ORACLE過程,那么此處應(yīng)該指定具體的過程名,注意由于任務(wù)執(zhí)行,即使過程中有OUT之類參數(shù),實(shí)際執(zhí)行時也不會有輸出的。
?START_DATE :指定任務(wù)初次執(zhí)行的時間,本參數(shù)可為空,當(dāng)為空時,表示任務(wù)立刻執(zhí)行,效果等同于指定該參數(shù)值為SYSDATE。
?REPEAT_INTERVAL :指定任務(wù)執(zhí)行的頻率,比如多長時間會被觸發(fā)再次執(zhí)行。本參數(shù)也可以為空,如果為空的話,就表示當(dāng)前設(shè)定的任務(wù)只執(zhí)行一次。 REPEAT_INTERVAL參數(shù)需要好好說說,REPEAT_INTERVAL