1:首先创建备份表的存储过程
create or replace procedure bakup_tmoi
isparam1 VARCHAR2(200) ;
sqlCode1 varchar2(2000);
Begin
select to_char(sysdate,'yyyymmdd') into param1 from dual ;
sqlCode1 :='create table bakup_tmoi'||param1 ||' as select * from t_g_o_i' ;
execute immediate sqlCode1;
end;
2: 按照要求,每月0晨备份一次
begin
sys.dbms_job.submit(job => :job,
what => 'bakup_tmoi;',
next_date => to_date('01-01-2018 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'trunc(LAST_DAY(SYSDATE ) + 1)');
commit;
end;
/
其实时间设置,是根据 sysdate 和日期函数来获取日志的, 如next_day , last_day ,ADD_MONTHS 与trunc 函数进行组合使用,而获取到的日期,进行定时执行
eg:
1:每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
2:每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate) + 1 +1/ (24)
3:每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
4:每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
5:每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
6:每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
7:每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24
--Oracle trunc()函数的用法
/**************日期********************/
1.select trunc(sysdate) from dual --2011-3-18 今天的日期为2011-3-18
2.select trunc(sysdate, 'mm') from dual --2011-3-1 返回当月第一天.
3.select trunc(sysdate,'yy') from dual --2011-1-1 返回当年第一天
4.select trunc(sysdate,'dd') from dual --2011-3-18 返回当前年月日
5.select trunc(sysdate,'yyyy') from dual --2011-1-1 返回当年第一天
6.select trunc(sysdate,'d') from dual --2011-3-13 (星期天)返回当前星期的第一天
7.select trunc(sysdate, 'hh') from dual --2011-3-18 14:00:00 当前时间为14:41
8.select trunc(sysdate, 'mi') from dual --2011-3-18 14:41:00 TRUNC()函数没有秒的精确