项目经理让做历史数据备份,涉及到如何将业务表中的记录导出到历史表中,自己最开始想难道是跟自动对账和自动上传程序一样写个程序然后将程序放在系统的任务计划里定时运行?还是问问项目经理吧,问项目经理,那导出记录怎么做。项目经理说,数据库里应该有这个功能吧。恍然大悟,隐约记得之前实习的时候用过sql server的自动备份,当时好像用的是数据库的任务计划,那么oracle里肯定也有这么个功能吧。唉,惭愧啊,要是让我自己做,肯定傻傻的写个程序,先充业务表中查记录然后将记录再插入到历史表中,然后使用系统的任 务计划自动运行。
那么现在知道了方向就开始做吧。去网上查资料,貌似不难啊,只不过是先创建个存储过程,然后再创建个job就可以了。好,马上开始做,照着网上的例子做吧:
1、创建表
create table tbtest(a date);
2、创建存储过程:
create or replace procedure mypro as
begin
insert into tbtest values(sysdate);
commit;
end;
3、创建任务
variable n number;
begin
dbms_job.submit(:n,'mypro;',sysdate,'sysdate+1/1440');
end;
主要工作完成了,任务的作用是每分钟将当前的系统时间插入到tbtest表中。那么每分钟tbtest表中都应该有条记录。查看一下结果吧,
select * from tbtest;执行,没记录?咋回事?
难道要执行一下任务?执行任务
begin
dbms_job.run(任务号);
end;
再查询“select * from tbtest;”,表中有一条记录,过了一分钟,表中记录没增加啊?
去网上搜run的作用,一查发现run是手动运行任务,跟这个没关系。
郁闷,接着查资料吧,静下心来,查到 “oracle job不运行--解决方案 ”这篇文章,具体内容是:
1) Instance in RESTRICTED SESSIONS mode?
Check if the instance is in restricted sessions mode:
select instance_name,logins from v$instance;
If logins=RESTRICTED, then:
alter system disable restricted session;
^-- Checked!
2) JOB_QUEUE_PROCESSES=0
Make sure that job_queue_processes is > 0
show parameter job_queue_processes
^-- Checked!
3) _SYSTEM_TRIG_ENABLED=FALSE
Check if _system_enabled_trigger=false
col parameter format a25
col value format a15
select a.ksppinm parameter,b.ksppstvl value from x$ksppi a,x$ksppcv b
Where a.indx=b.indx and ksppinm=’_system_trig_enabled’;
^-- Checked!
4) Is the job BROKEN?
select job,broken from dba_jobs where job=;
If broken, then check the alert log and trace files to diagnose the issue.
^-- Checked! The job is not broken.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mzwang123/archive/2009/12/23/5053451.aspx
根据第一项的内容进行操作。在查看一下tbtest表的内容,有记录了!!!!!太高兴了。
回想,貌似第一条的操作在其他网页中看见过。查找一下,内容如下:
在使用job queue之前,我们还要简单配置下,oracle定时执行job queue 的后台进程是SNP,要启动
snp,首先看系统模式是否支持
sql> alter system enable restricted session;
或
sql> alter system disenable restricted session;
利用上面的命令更改系统的会话方式为disenable restricted,为snp的启动创建条件.
当时看到这一块只执行了第一句:alter system enable restricted session;,当时忽视了最后一句啊!造成浪费了这么长的时间!失误啊!
不过,现在大功告成还是值得高兴的。