當前位置:首頁 » 數據倉庫 » 資料庫job定時任務
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫job定時任務

發布時間: 2022-05-06 07:38:40

1. oracle的job怎麼設置一個過程每5分鍾執行一次

dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+5/1440');

每天1440分鍾,即一分鍾運行test過程一次,分子為5則為每分鍾執行一次

2. Oracle job定時任務

1. oracle job可用來完成一些後台資料庫定時任務,支持sql、PL/SQL等,具體語法可以參考有關資料,簡單的話可以使用TOAD,PLSQL Developer這種工具。
2. select * from table1 for update; 鎖定此表其它用戶不可以執行寫入操作。
3. EM即Enterprise Manager,代替8i中Enterprise Manager Console的一個BS工具,瀏覽器中訪問http://localhost:5500/em,首先要安裝配置正確,服務開啟,可以用這個工具完成很多資料庫管理維護的工作,非常強大的工具,
不知道我的回答是否全面,具體的需要你查找手冊仔細研究的。

3. 如何實現一個定時任務來對資料庫中的數據進行操作

由於公司的新接得項目要實現一批數據的同步,通過外圍廠商提供的一系列各個系統的webervices介面定時將數據同步到我們開發的共享平台上,由於廠商系統的數據是不斷在變化以及各系統閑忙時的特點,所以定時同步任務的執行必須在時間上能夠動態配置。因此,我們需要動態的從資料庫中獲取配置信息,以改變各個定時間的執行規則,廢話不說了,上代碼:(我利用的是ssh框架直接寫的,框架搭建不再敘述)
1.創建數據表(我用的是MySQL)

[sql] view plain
DROP TABLE IF EXISTS `t_wsdoc`;
CREATE TABLE `t_wsdoc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`triggername` varchar(50) NOT NULL,
`jobdetailname` varchar(50) N

4. Oracle通過job定時創建表

在項目中,經常會遇到需要定時完成的任務,比如定時更新數據,定義統計數據生成報表等等,其實這些事情都可以使用Oracle的Job來完成。下面考試大就結合我們實驗室項目實際,簡單介紹一下在Oracle資料庫中通過Job完成自動創建表的方法。整個過程總共分為兩步。雖然整個過程都非常簡單,但是對於初學Oracle的生手還是有很多地方需要注意的。首先介紹一下,創建該JOB的背景,因為每天更新的直播和點播節目信息比較多,為了方便處理,需要每天創建一張表來記錄更新的節目信息,當前資料庫中已經有一張tbl_programme的表,每天創建的表的欄位需要同tbl_programme保持一致,每天新創建的表的名稱格式為tbl_programme_日期(例如:tbl_programme_20090214)規定每天晚上1點鍾生成該天的新表。第一步:創建一個執行創建操作的存儲過程在這一步首先要解決的問題就是構造表名。在Oracle中格式話輸出時間可以用to_char函數來處理,例如:SQL> select to_char(sysdate, 』yyyy/mm/dd hh24:mi:ss』) from al;TO_CHAR(SYSDATE,』YYYY/MM/DDHH2------------------------------2009/02/14 17:22:41以上SQL格式化輸出了時間,要得到我們所需要的格式直接修改一下SQL即可SQL> select to_char(sysdate, 』yyyymmdd』) from al;TO_CHAR(SYSDATE,』YYYYMMDD』)---------------------------20090214得到時間格式字元串後我們就可以將表名的前綴和時間連接在一起形成完整的表名。這里需要注意,在Oracle中鏈接兩個字元串需要使用『||』符號,而在Sql Server中直接使用『+』號就可以了,因為我以前一直在Sql Server下編程,好久都沒編寫Oracle的SQL所以費了很大的功夫才發現這個問題。完整的Sql就是SQL> select 』tbl_programme_』 || to_char(sysdate, 』yyyymmdd』) from al;』TBL_PROGRAMME_』||TO_CHAR(SYSD------------------------------tbl_programme_20090214接下來就是創建表的代碼了,因為新表需要tbl_programme保持一致,所以直接CTAS來創建表那是非常適合的了,代碼如下:Create table tablename as select * from tbl_programme如果需要指定一個TableSpace則將該SQL做適當修改:Create table tablename tablespace p2p as select * from tbl_programme所以整個創建存儲過程的SQL就是create or replace procere sp_createtab_tbl_programmeAuthid Current_Userastabname varchar(200);beginselect 』TBL_PROGRAMME_』 || to_char(sysdate, 』yyyymmdd』) into tabname from al;--create table tabname as select * from tbl_programme where 1 != 1;execute immediate 』create table 』 || tabname ||』 tablespace p2p as select * from tbl_programme where 1 != 1』;commit;end;/這里還需要注意一下在Oracle裡面如果要對一個變數賦值的話有兩種方式:(1) 使用:=進行賦值(2) 使用select 『xjkxj 』 into 變數名稱 from tabname另外,在存儲過程中定義變數的時候一般放在as/is後begin前面。在存儲過程一般是不能直接使用create table,truncate table這類似的語句的,如果要使用這些語句必須使用excute immediate + 所要執行的sql語句來實現。注意上面用紅色標志的語句:Authid Current_User這個語句比較重要,如果我們在創建存儲過程的時候不添加這條語句執行該存儲過程將不會成功,原因是默認情況向存儲過程是沒有Create table等許可權的,即使當前用戶有DBA的許可權也不行,如果存儲過程中存在創建表的操作,可以有以下兩種方式來解決該問題。(1) 顯示的賦予該用戶Create table的許可權,grant create table to user.(2) 在存儲過程中使用Authid Current_User 標識使用當前用戶的許可權。第二步:創建JOB創建JOB就比較簡單了,下面就是創建JOB的代碼每天晚上1電job啟動一次,執行sp_createtab_tbl_programme存儲過程。VARIABLE testjobid number;beginsys.dbms_job.submit(:testjobid,』sp_createtab_tbl_programme;』,trunc(sysdate+1)+1/24,』trunc(sysdate+1)+1/24』);commit;end;/這里需要注意的是,在submit方法的前面一定要先定義job這個變數,另外,submit方法的第二個參數是一個存儲過程的名,記得在後面添加「:」號,在next_date是一個時間類型變數而不是一個字元串,所以需要注意不要把它當成字元串,不需要對該參數加引號。最後一個參數interval是一個字元串類型,記得添加引號。最常見的錯誤如下圖所示:ORA-01008: not all variables bound就是沒有定義變數的意思。一定記的在使用submit方法時定義jobid變數。下面是常有的設置Interval的方法:2 每天固定時間運行,比如早上8:10分鍾:Trunc(Sysdate+1) + 8/24�0�5 每天:trunc(sysdate+1)�0�5 每周:trunc(sysdate+7)�0�5 每月:trunc(sysdate+30)�0�5 每個星期日:next_day(trunc(sysdate),』SUNDAY』)�0�5 每天6點:trunc(sysdate+1)+6/24�0�5 半個小時:sysdate+30/1440需要用到的完整SQL如下:------------------------------------------------------- Export file for user P2P ---- Created by Administrator on 2009-2-14, 15:45:18 -------------------------------------------------------spool gjgdp2p(v1.3).logpromptprompt Creating procere SP_CREATETAB_TBL_PROGRAMMEprompt =============================================promptcreate or replace procere sp_createtab_tbl_programmeAuthid Current_Userastabname varchar(200);beginselect 』TBL_PROGRAMME_』 || to_char(sysdate, 』yyyymmdd』) into tabname from al;--create table tabname as select * from tbl_programme where 1 != 1;execute immediate 』create table 』 || tabname ||』 tablespace p2p as select * from tbl_programme where 1 != 1』;commit;end;/VARIABLE testjobid number;beginsys.dbms_job.submit(:testjobid,』sp_createtab_tbl_programme;』,trunc(sysdate+1)+1/24,』trunc(sysdate+1)+1/24』);commit;end;/spool off

5. oracle中job如何設定每小時的第10分鍾執行

可以實現的,先創建一個存儲過程,在創建Job。
我們在項目開發中,常常會有一些復雜的業務邏輯。使用oracle的存儲過程,可以大大減少java程序代碼的編寫工作量,而且存儲過程執行在資料庫上,這樣可以利用oracle的良好性能支持,極大地提高程序執行效率和穩定性。定時執行存儲過程,就要用到job。
先創建一個存儲過程:

SQL> create or replace procere MYPROC as
2begin
3update table_name set date= 'TRUNC(sysdate,'hh24') +1/24+ 10 / (24*60)';
4end;
5/

創建JOB :
SQL> variable job1 number;
SQL>
SQL> begin
2 dbms_job.submit(:job1,'MYPROC;to_date('00:10:00','HH:MI:SS'),'sysdate+1/24');//每天24h,即每小時運行myproc過程一次
3end;
4/

運行JOB :
SQL> begin
2dbms_job.run(:job1);
3end;
4/

6. 關於PLSQL中JOB定時任務的問題

給你一個我自己寫的完整的(用PLSQL->文件->新建->測試窗口)
DECLARE
jobno BINARY_INTEGER;
instno number;
p_job_queue_processes VARCHAR2(512);
p_interval VARCHAR2(200);
p_next_date DATE;
s_next_date VARCHAR2(50);
begin
select instance_number into instno from v$instance;
-- jobno := 1512; 手工指定jobno
p_interval := 'trunc(sysdate,''HH24'')+(SELECT TRUNC(TO_CHAR(sysdate,''MI'')/30)/48 FROM DUAL)'; -- 間隔

p_next_date := TO_DATE('20080910 13:45:00','RRRRMMDD HH24:MI:SS');--trunc(sysdate,'HH24') + 1/4/24; -- 下次執行時間,date類型
s_next_date := to_char(p_next_date,'RRRR-MM-DD HH24:MI:SS'); -- 下次執行時間,字元串類型
/* -- 創建新job
dbms_job.submit(jobno
, 'statspack.snap(7);'
, p_next_date -- trunc(sysdate,'HH24') + 1/24
, p_interval -- 'trunc(sysdate,''HH24'')+(SELECT TRUNC(TO_CHAR(sysdate,''MI'')/30)/48 FROM DUAL)';
, TRUE, instno);
*/
dbms_job.change(jobno, '要執行的程序名稱;' -- 比如statspack.snap; -- 收集統計信息
, p_next_date
, p_interval
);--, TRUE, instno);
-- dbms_job.remove(jobno); --jobno -- 移除job

-- commit;
end;
--- 完成後,可以用select * from dba_jobs dj where dj.jobno=xxx 檢查狀態

7. 關於oracle資料庫定時任務問題

這種job方法已經廢棄 建議用scheler +program 完成

begin
sys.dbms_scheler.create_schele(schele_name=>'TEST',
start_date=>to_date('25-03-201700:00:00','dd-mm-yyyyhh24:mi:ss'),
repeat_interval=>'Freq=yearly;ByMonth=jun;ByMonthDay=25',
end_date=>to_date(null),
comments=>'test');
end;
/

8. 利用oracle提供的dbms_job.submit定時任務功能,可以對資料庫進行備份嗎

你好!
當然可以,這是9i之前的功能,計時不準,10g以後,都用scheler了
如有疑問,請追問。

9. oracle 定時任務問題,定時任務沒有成功 定時任務如下:

1.引言
定製定時執行的任務有兩種形式,系統級別和資料庫級別,
從操作系統級別來講,
windows系統我們可以使用任務計劃來實現,
對於winXP系統,設置步驟如下,開始---設置---控制面板---任務計劃,然後添加任務計劃,按向導完成配置即可;
對於win7系統,設置步驟如下,點擊開始,然後在 搜索程序和文件 框中輸入 [任務計劃],然後點擊出來的任務計劃程序,創建一個基本任務即可;
linux系統我們可以使用crontab命令來是實現,
關於crontab命令的使用可以見之前的博客(http://www.2cto.com/os/201209/155632.html);

從資料庫級別來講,我們可以採用資料庫的job來實現;
本節主要介紹通過oracle資料庫的job來定製一個簡單的定時執行任務。本節會採用oracle定製一個定時向一個表中插入語句。
這里聊一下我做這個oracle定時任務的緣由:
項目中要在固定的時間,把一個資料庫中某些表的數據同步到另外一個資料庫,顯然這些工作我不能每次都自己去做,
那麼,我要怎麼來做呢?這個時候oracle的定時執行任務JOB無疑是我的最佳選擇。我把同步的腳本放在一個存儲過程中,
然後在固定的時間去執行這個存儲過程就OK了。
注意:以下所有的操作都是在sytem用戶下執行。採用PL/SQL做的客戶端登陸。

2.項目環境
安裝oracle10g,然後再安裝PL/SQL,然後用管理員用戶system登陸,
打開SQL Window輸入圖中的SQL語句,操作環境詳細的信息如下:

3.環境准備
(1)新建一個表,命令為test,建表語句如下:
test0916
1 create table system.test0916 2 ( 3 seq NUMBER(2) PRIMARY KEY, 4 seqtime DATE 5 )
在SQL窗口執行以上語句;
(2)新建一個存儲過程,命名為test_proc,存儲過程的語句如下:
test_proc

1 CREATE OR REPLACE PROCEDURE test_proc IS 2 BEGIN 3 INSERT INTO SYSTEM.TEST0916(SEQ, SEQTIME) VALUES(NVL((SELECT MAX(SEQ) FROM SYSTEM.TEST0916) + 1, 0), SYSDATE); 4 COMMIT; 5 EXCEPTION 6 WHEN OTHERS THEN 7 DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback'); 8 ROLLBACK; 9 END;

在SQL Window窗口中執行以上存儲過程,執行完成以後,查看Objects下的Proceres菜單,可以看到新建的存儲過程如圖:

TEST_PROC前面的圖標沒有紅色的標記,表示存儲過程正常;
(3)檢查oracle的JOB運行環境
我這里遇到的只是要檢查一下oracle的JOB隊列的進程數,如果為0表示不運行JOB,
雖然網上說一般默認為10,但是我安裝oracle以後就不知道為什麼是0。
查看進程數:

修改進程數(如果你的是0,才需要按照以下語句修改):
我這里已經改為10,假如我要改為11來模擬以下這個操作;
在PL/SQL的command窗口中輸入以下語句:
修改進程數
alter system set job_queue_processes=10 scope=both;
運行截圖如下:

修改完以後我們這查看一下:

看到了吧,我這是是改為11了吧。
補充說明:
網上有的說修改這個進程數可以修改oracle初始文件,最開始我是找到這個初始文件的位置,然後用notepad++打開後去修改,
保存以後我重啟oracle服務和電腦,但是發現此時用PL/SQL登陸oracle的時候,一直報無法識別指定的字元串,這里要說明這樣操作不行。
這里有個問題,我們要如何找到oracle初始文件的位置?可以在PL/SQL的command window窗口中執行以下語句看到:

我當時用notepad++修改的是下圖陰影部分的內容:

*.job_queue_processes=11

4.定製定時執行任務
假設我們要每隔兩分鍾向表test0916中插入一條記錄,這里我們只需要每隔2分鍾執行一次存儲過程test_proc即可。
在PL/SQL的command window輸入以下語句:
job
1 var job_num number; 2 begin 3 dbms_job.submit(:job_num,'test_proc;',SYSDATE,'sysdate+2/24/60'); 4 end;

執行過程的截圖如下:

執行完成以後記得點擊PL/SQL的提交按鈕;

5.查看執行結果
(1)查看我們新增的JOB是否成功
通過查看DBA_JOBS表中的WHAT欄位可以看到最後一條記錄即使我們剛新建的定時任務;

(2)查看test0916表是否插入了數據

6.其他相關說明
(1)如何刪除一個JOB?
在PL/SQL的command window執行以下語句:
exec dbms_job.remove(81);
說明:這里的數字81是對應DBA_JOBS表中當前要刪除的JOB記錄所在行的JOB欄位的值;

(2)submit的各個參數是什麼意思?

使用Submit()過程,工作被正常地計劃好。 這個過程有五個參數:job、what、next_date、interval與no_parse。 PROCEDURE Submit ( job OUT binary_ineger, What IN varchar2, next_date IN date, interval IN varchar2, no_parse IN booean:=FALSE)
job參數是由Submit()過程返回的binary_ineger。這個值用來唯一標識一個工作。 前面有一個雙引號,在SQL windwo中沒有顯示,拷貝到command窗口就可以顯示出來了; what參數是將被執行的PL/SQL代碼塊。這里是存儲過程的名稱,後面有一個英文狀態下的分號不能掉了; next_date參數指識何時將運行這個工作。
interval參數何時這個工作將被重執行。 這里加號、括弧都必須在英文狀態下輸入; no_parse參數指示此工作在提交時或執行時是否應進行語法分析——TRUE 指示此PL/SQL代碼在它第一次執行時應進行語法分析, 而FALSE指示本PL/SQL代碼應立即進行語法分析。

(3)定時執行的時間間隔是怎麼設置的?
這里大家可以去網路,網上搜索一般都能找到滿足你需求的,主要是結果TRUNC函數來實現。