Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1639721
  • 博文数量: 409
  • 博客积分: 6240
  • 博客等级: 准将
  • 技术积分: 4908
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-01 00:04
文章分类

全部博文(409)

文章存档

2021年(1)

2019年(1)

2017年(1)

2016年(13)

2015年(22)

2013年(4)

2012年(240)

2011年(127)

分类: Oracle

2016-02-04 16:56:09

由于针对大表执行shrink非常慢,不适合一直在客户端等着,后来研究了一下,可以写个job来执行,感觉还比较好。
1、首先创建一个存储过程pro_job_j_test01
  1. create or replace procedure pro_job_j_test01 is
  2. str_sql1 varchar2(64):= 'alter table tab01 enable row movement';
  3. str_sql2 varchar2(64):= 'alter table tab01 shrink space';
  4. begin
  5.   --insert into j_test01 values(sysdate);
  6.    execute immediate str_sql1;
  7.    execute immediate str_sql2;
  8. end pro_job_j_test01;
2、创建job

  1. declare job01 number;
  2. begin
  3. dbms_job.submit(job01,'pro_job_j_test01;',sysdate);----what后面有个分号,很关键
  4. commit;
  5. end;
这样的job是立即执行的,由于未设置interval参数,这个job就只执行一次

另外,关于job的详细介绍,可以参考http://blog.csdn.net/dogwoods/article/details/2010571,这里说的非常清楚了。
常用的也就是查询job:
select * from user_jobs;--上面那种只执行一次的job,执行完,查询的时候已经都不存在了。
可以通过job编号删除job:
begin
dbms_job.remove(23);
end;

阅读(1627) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~