oracle job 及存储过程案例


使用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。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE
指示此PL/SQL代码在它第一次执行时应进行语法分析,
而FALSE指示本PL/SQL代码应立即进行语法分析。

在command window窗口中执行下面脚本
Oracle代码 收藏代码
  1. declarejob1number;
  2. begin
  3. dbms_job.submit(job=>:job1,
  4. what=>'CLEAN_DATA_P;',
  5. next_date=>sysdate,
  6. interval=>'sysdate+1/1440');--每天1440分钟,即一分钟运行CLEAN_DATA_P存储过程一次
  7. commit;
  8. dbms_job.run(:job1);
  9. end;
  10. /


查看创建的job
查看相关job信息
1、相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息。
如:
Oracle代码 收藏代码
  1. select*fromdba_jobs


2、运行JOB
说明:Run()过程用来立即执行一个指定的工作。这个过程只接收一个参数:
Oracle代码 收藏代码
  1. begin
  2. dbms_job.run(:job);--:job为dba_jobs里面自己需要运行的jobid
  3. end;
  4. /


3、删除JOB
Oracle代码 收藏代码
  1. begin
  2. dbms_job.remove(:job);--:job为dba_jobs里面自己需要运行的jobid
  3. end;
  4. /



Oracle代码 收藏代码
  1. --绑定jobid
  2. variablejob1number;
  3. /
  4. --创建JOB每分钟执行一次
  5. begin
  6. dbms_job.submit(job=>:job1,
  7. what=>'CLEAN_DATA_P;',
  8. next_date=>sysdate,
  9. interval=>'sysdate+1/1440');
  10. commit;
  11. end;
  12. /
  13. --执行JOB
  14. begin
  15. dbms_job.run(:job1);
  16. end;
  17. /
  18. --删除JOB
  19. begin
  20. dbms_job.remove(:job1);--:job为dba_jobs里面自己需要运行的jobid
  21. end;
  22. /
  23. --创建JOB每天凌晨1点执行一次
  24. begin
  25. dbms_job.submit(job=>:job1,
  26. what=>'CLEAN_DATA_P;',
  27. next_date=>sysdate,
  28. interval=>'TRUNC(sysdate)+1+1/(24)');
  29. commit;
  30. end;
  31. /


附:CLEAN_DATA_P存储过程
Oracle代码 收藏代码
  1. CREATEORREPLACEPROCEDURECLEAN_DATA_PIS
  2. cursor_nameINTEGER;
  3. rows_processedINTEGER;
  4. R_CONFIGEIP_CLEAN_DATA_CONFIG%ROWTYPE;--记录当前行
  5. R_TABLE_SPACEEIP_CLEAN_DATA_CONFIG%ROWTYPE;--记录tablespace数据配置当前行
  6. R_CLEAN_DATAvarchar2(255);
  7. CURSORC_CONFIGIS
  8. SELECTC.ID,
  9. C.TABLE_NAME,
  10. C.CLEAN_INTERVAL,
  11. C.LAST_UPDATE_DATE,
  12. C.ENABLED_FLAG
  13. FROMEIP_CLEAN_DATA_CONFIGC
  14. WHEREC.ENABLED_FLAG='Y'
  15. ANDC.TABLE_NAME!='EIP_SWITCH_TABLE_SPACE'
  16. ORDERBYC.ID;--定义读取配置表不包含表空间切换的游标
  17. CURSORC_TABLE_SPACEIS
  18. SELECTC.ID,
  19. C.TABLE_NAME,
  20. C.CLEAN_INTERVAL,
  21. C.LAST_UPDATE_DATE,
  22. C.ENABLED_FLAG
  23. FROMEIP_CLEAN_DATA_CONFIGC
  24. WHEREC.ENABLED_FLAG='Y'
  25. ANDC.TABLE_NAME='EIP_SWITCH_TABLE_SPACE'
  26. ORDERBYC.ID;--定义读取配置表表空间切换的游标
  27. BEGIN
  28. BEGIN
  29. OPENC_CONFIG;
  30. LOOP
  31. FETCHC_CONFIG
  32. INTOR_CONFIG;
  33. EXITWHENC_CONFIG%NOTFOUND;
  34. selectto_char(sysdate-R_CONFIG.CLEAN_INTERVAL/24/60,
  35. 'yyyy-mm-ddHH24:MI:SS')
  36. intoR_CLEAN_DATA
  37. fromdual;--获得当前时间减去时间间隔的时间
  38. cursor_name:=dbms_sql.open_cursor;--动态执行删除SQL
  39. dbms_sql.parse(cursor_name,
  40. 'DELETEFROM'||R_CONFIG.TABLE_NAME||
  41. 'WHERELAST_UPDATE_DATE<=:x',
  42. dbms_sql.native);
  43. dbms_sql.bind_variable(cursor_name,
  44. ':x',
  45. to_date(R_CLEAN_DATA,'yyyy-mm-ddHH24:MI:SS'));
  46. rows_processed:=dbms_sql.execute(cursor_name);
  47. dbms_sql.close_cursor(cursor_name);
  48. ENDLOOP;
  49. CLOSEC_CONFIG;
  50. OPENC_TABLE_SPACE;
  51. LOOP
  52. FETCHC_TABLE_SPACE
  53. INTOR_TABLE_SPACE;
  54. EXITWHENC_TABLE_SPACE%NOTFOUND;
  55. IF0=R_TABLE_SPACE.CLEAN_INTERVAL
  56. THEN
  57. --对表空间作转移
  58. dbms_utility.exec_ddl_statement('ALTERTABLEEIP_PERFORMANCE_CPUMOVETABLESPACEHQGK_DATA_MV1');
  59. dbms_utility.exec_ddl_statement('ALTERTABLEEIP_PERFORMANCE_MEMORYMOVETABLESPACEHQGK_DATA_MV1');
  60. dbms_utility.exec_ddl_statement('ALTERTABLEEIP_PERFORMANCE_PROCESSMOVETABLESPACEHQGK_DATA_MV1');
  61. --更新当前操作标识,用于表空间转移
  62. UPDATEEIP_CLEAN_DATA_CONFIGCSETC.CLEAN_INTERVAL=1WHEREC.TABLE_NAME='EIP_SWITCH_TABLE_SPACE';
  63. ELSE
  64. dbms_utility.exec_ddl_statement('ALTERTABLEEIP_PERFORMANCE_CPUMOVETABLESPACEHQGK_DATA_MV');
  65. dbms_utility.exec_ddl_statement('ALTERTABLEEIP_PERFORMANCE_MEMORYMOVETABLESPACEHQGK_DATA_MV');
  66. dbms_utility.exec_ddl_statement('ALTERTABLEEIP_PERFORMANCE_PROCESSMOVETABLESPACEHQGK_DATA_MV');
  67. UPDATEEIP_CLEAN_DATA_CONFIGCSETC.CLEAN_INTERVAL=0WHEREC.TABLE_NAME='EIP_SWITCH_TABLE_SPACE';
  68. ENDIF;
  69. --重建索引
  70. dbms_utility.exec_ddl_statement('ALTERINDEXPK_EIP_PERFORMANCE_CPUREBUILD');
  71. dbms_utility.exec_ddl_statement('ALTERINDEXPK_EIP_PERFORMANCE_MEMORYREBUILD');
  72. dbms_utility.exec_ddl_statement('ALTERINDEXPK_EIP_PERFORMANCE_PROCESSREBUILD');
  73. COMMIT;
  74. ENDLOOP;
  75. CLOSEC_TABLE_SPACE;
  76. EXCEPTION
  77. WHENOTHERSTHEN
  78. dbms_sql.close_cursor(cursor_name);
  79. ROLLBACK;
  80. END;
  81. COMMIT;
  82. ENDCLEAN_DATA_P;
  83. /

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值