一次Oracle Job編寫

來源:互聯網
上載者:User

Oracle中Job的編寫

在Oracle中可以編寫Job來定時執行一個預存程序。具體做法是,使用Submit()過程

Submit過程的幾個參數:job、what、next_date、interval與no_parse。

Submit的方法簽名是:
PROCEDURE Submit ( 
job OUT binary_ineger, 
What      IN  varchar2, 
next_date IN  date, 
interval  IN  varchar2, 
no_parse  IN  booean:=FALSE)

簽名參數解析:
job參數
Submit()過程返回的binary_integer。用來唯一標識一個job

what參數
將要被執行的PL/SQL代碼塊

next_date
指示何時將運行這個工作

interval
何時這個工作將被重新執行

no_parse
指示此Job在提交時或執行時是否應進行文法分析--TRUE

--每天1440分鐘,即一分鐘運行test過程一次
begin
  sys.dbms_job.submit(job => :job,
          what => 'prc_g_test',
          next_date=>to_date('2011-11-30 15:00:00', 'yyyy-mm-dd hh24:mi:ss'),
          interval => 'sysdate + 1/1440');
);
commit;
end;
/

-- 1.create TABLE
CREATE TABLE g_test(
  ID NUMBER(12),
  c_date DATE
);

-- 2. create sequence
CREATE SEQUENCE g_seq
MINVALUE 1
MAXVALUE 9999999999
START WITH 1
INCREMENT BY 1
CACHE 20;

--3. create procedure
CREATE OR REPLACE PROCEDURE prc_g_test IS
  BEGIN
   INSERT INTO g_test VALUES(g_seq.NEXTVAL, SYSDATE);
  END prc_g_test;

--4. create job
--這個過程有五個參數:job、what、next_date、interval與no_parse。 

PROCEDURE submit(job OUT BINARY_INTEGER,
 what IN VARCHAR2,
 next_date IN DATE,
 INTERVAL IN VARCHAR2,
 no_parse IN BOOLEAN:=FALSE
)  

DECLARE 
job NUMBER;
BEGIN
 sys.dbms_job.submit(job, 'prc_g_test;',SYSDATE, 'sysdate + 1/1440');
END;

-- 查看Job資訊
SELECT * FROM DBA_JOBS ;
SELECT * FROM DBA_JOBS_RUNNING;
SELECT * FROM g_test ORDER BY ID ASC;

-- 運行Job
-- job = 22

BEGIN
 DBMS_JOB.run(22);
END;
/
6、運行JOB 
說明:Run()過程用來立即執行一個指定的工作。這個過程只接收一個參數: 
SQL> begin 
2  dbms_job.run(:job); 
3  end; 
4  / 

----------------------------------------------------------------------------------
在plSQL中我的做法是:
begin
dbms_job.run(3017);
end; 
----------------------------------------------------------------------------------
7、刪除JOB 
SQL> begin 
2  dbms_job.remove(:job);--:job可以用dba_jobs.job的值代替如:1198 
3  end; 
4  / 
 
 
 

每天1點執行的oracle JOB範例

DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X,
what => 'ETL_RUN_D_Date;',
next_date => to_date('2009-08-26 01:00:00','yyyy-mm-dd hh24:mi:ss'),
interval => 'trunc(sysdate)+1+1/24',
no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/以上是明確指定每天的1點執行此job,如果指定是每天中午12點執行interval需要指定為'trunc(sysdate)+1+12/24',如果僅僅指定interval為一天,這樣當你手工用dbms_job.run(job)去運行一次時,job每天的執行時間是會改變的,如果你想job每天在固定時間執行,可以參考上面的例子.

 描述 INTERVAL參數值
每天午夜12點 'TRUNC(SYSDATE + 1)'
每天早上8點30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午12點 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每個月第一天的午夜12點 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每個季度最後一天的晚上11點 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6點10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'
 
 
 參考來源:http://guyuanli.itpub.net/post/37743/484763
 
 
 
 
 
 
 
 
 
 
 
 
 

Oracle資料表空間不足ORA-01654  

2011-01-14 17:06:34|  分類: Oracle|字型大小 訂閱

在往資料表裡插入資料時,出現了ORA-01654: 索引 SSERVICE.IX_MSI_WDR_INPUT_1 無法通過 1024 (在資料表空間 USERD 中) 擴充的錯誤資訊,原來是資料量太大,資料表空間沒有自動成長,空間不足了。

解決辦法,擴充資料表空間:

       --(1)重設資料檔案大小

            ALTER DATABASE DATAFILE 'datafile路徑名字' RESIZE 2000M; 

        --(2)設定資料檔案能自動成長

           ALTER DATABASE DATAFILE '...
' AUTOEXTEND ON | OFF NEXT 20M MAXSIZE 300M;

            --查看哪些資料表空間為自動成長

           SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;          

 

       /* (3)添加資料檔案

      

           增加到資料表空間中的資料檔案不能直接從資料表空間中刪除,除非刪掉整個資料表空間

           增加資料檔案將有助於均衡I/O

           一個資料表空間檔案最多為個,檔案越多,執行一次檢查點的代價越高  */

          

           ALTER TABLESPACE tablespace_name  ADD DATAFILE '...' SIZE XX;

     

           ALTER TABLESPACE tbs2 ADD DATAFILE '/u01/app/oracle/oradata/orcl/tbs2.dbf' size200m
autoextend on ;

 

另:查看錶空間利用率:

指令碼如下:網上找的,把連結忘了,見諒。

   select ff.s tablespace_name,

       ff.b total,

       (ff.b - fr.b) usage,

       fr.b free,

       round((ff.b - fr.b) / ff.b * 100) || '% ' usagep

  from (select tablespace_name s, sum(bytes) / 1024 / 1024 b

          from dba_data_files

         group by tablespace_name) ff,

       (select tablespace_name s, sum(bytes) / 1024 / 1024 b

          from dba_free_

 
 
 
 
 
 
 
 
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.