关于物化视图刷新问题! 有用过ORCLE 物化视图的朋友,请帮个忙,我想每天刷新两次,比如中午十二点,晚上七点,不知道怎么写,急用! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你这个需要,可以这样实现建一个表,再写个存储过程再用个SCHEDULE JOB来实现用普通JOB,或者物化视图,对于时间间隔都需要有规律或者写个储存过程来手工刷新物化视图,然后用SCHEDULE JOB来实现每天12点,19点刷新 对于oracle10g简单方法:1. 先建立一个物化视图,不用指明刷新参数,只要create materialized view,如 CREATE MATERIALIZED VIEW mv_emp AS SELECT * FROM scott.emp;2. 建立一个用来刷新物化视图的存储过程,如CREATE OR REPLACE PROCEDURE auto_refresh_mview_job_procASBEGIN dbms_mview.REFRESH('mv_emp');END;/3. 用ORACLE 10g的scheduler每天12:00和19:00定期刷新物化视图 BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'auot_refresh_mview_job', job_type => 'STORED_PROCEDURE', job_action => 'scott.auto_refresh_mview_job_proc', start_date => SYSDATE, repeat_interval => 'FREQ=DAILY; BYHOUR=12,19', enabled => TRUE, comments => 'Refresh materialized view mv_emp' ); END; /4. 删除scheduler对象的方法 BEGIN DBMS_SCHEDULER.DROP_JOB( job_name => 'auot_refresh_mview_job' ); END; / dbms_mview.REFRESH('mv_emp'); 这个是我想要的,谢谢了,还有,如果我之前用alter materialized view '|| a.table_name||' refresh complete start with sysdate next sysdate+100/(24*60*60)'||';' 建的刷新,怎么取消啊。 把刷新物化视图的JOB 删除了就可以了,下面是查询物化视图及对应的jobno的语句: SELECT job, what from user_jobs;找到jobno后,用dbms_Job.remove就可以删除job了exec dbms_job.remove(:jobno); 3. 用ORACLE 10g的scheduler每天12:00和19:00定期刷新物化视图 BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'auot_refresh_mview_job', job_type => 'STORED_PROCEDURE', job_action => 'scott.auto_refresh_mview_job_proc', start_date => SYSDATE, repeat_interval => 'FREQ=DAILY; BYHOUR=12,19', enabled => TRUE, comments => 'Refresh materialized view mv_emp' ); 上面这种方式我不怎么明白。 物化视图的定时刷新其实是用Oracle的任务实现的,就是按照刷新的时间间隔定期的执行DBMS_MVIEW.REFRESH('mv_emp')的.由于Oracle10g增加了功能更为强大的scheduler功能,可以更加灵活的定义执行任务的时间,因此这里我给出的方法就是用10g的SCHEDULER,用scheduler要用到Oracle的内部包DBMS_SCHEDULER,其中DBMS_SCHEDULER.CREATE_JOB就是来创建一个实时执行的任务,下面是一个例子BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'auto_refresh_mview_job', job_type => 'STORED_PROCEDURE', job_action => 'scott.auto_refresh_mview_job_proc', start_date => SYSDATE, repeat_interval => 'FREQ=DAILY; BYHOUR=12,19', enabled => TRUE, comments => 'Refresh materialized view mv_emp' ); job_name对应的参数是任务名,这个任务的名字就是'auto_refresh_mview_job'job_type是任务的类型,这里是存储过程类型job_action是任务的名称,这里就是存储过程'scott.auto_refresh_mview_job_proc',存储过程的功能就是执行dbms_mviw.refresh('mv_emp')start_date是开始执行的时间,这里是从任务创建时就开始执行repeat_interval是执行的时间间隔,FREQ表示执行频率,DAILY表示每天执行,BYHOUR定义了具体的执行时间为每天的12时和19时enabled表示任务为启用状态,如果不加这个参数,为缺省的不启用comments为任务的一个说明,这里面的内容可以根据实际情况自行填写。定义了上面的任务后,可以从字典表dba_scheduler_jobs查询出这个任务来。 好久没有来了,冒个泡:)向hebo2005 致敬:) oracle 10g怎么安装成中文的? 求教一个解析数据表某字段字符串的问题 存储过程这样写有问题吗! 怎样在SQLPLUS里执行这个包? 大家看看这句sql语句有问题吗? insert中怎么输入"%"和"_"? Oracle菜鸟问:不能对我自己创建的用户下的表进行插入、修改和删除!!!急死了~~!!!~~~!~!~!~! 两个表关联问题 我的orcale是英文字符集(客户要求必须用),用ado插入中文记录时老是乱码,怎么办(开发语言是VB)? 精通SQL的请进 sql 转 oracle 后 生成的存储过程 出现错误 求解SQL优化!
建一个表,再写个存储过程
再用个SCHEDULE JOB来实现用普通JOB,或者物化视图,对于时间间隔都需要有规律
或者写个储存过程来手工刷新物化视图,然后用SCHEDULE JOB来实现每天12点,19点刷新
1. 先建立一个物化视图,不用指明刷新参数,只要create materialized view,如
CREATE MATERIALIZED VIEW mv_emp
AS SELECT * FROM scott.emp;2. 建立一个用来刷新物化视图的存储过程,如CREATE OR REPLACE PROCEDURE auto_refresh_mview_job_proc
AS
BEGIN
dbms_mview.REFRESH('mv_emp');
END;
/
3. 用ORACLE 10g的scheduler每天12:00和19:00定期刷新物化视图 BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'auot_refresh_mview_job',
job_type => 'STORED_PROCEDURE',
job_action => 'scott.auto_refresh_mview_job_proc',
start_date => SYSDATE,
repeat_interval => 'FREQ=DAILY; BYHOUR=12,19',
enabled => TRUE,
comments => 'Refresh materialized view mv_emp'
);
END;
/4. 删除scheduler对象的方法 BEGIN
DBMS_SCHEDULER.DROP_JOB(
job_name => 'auot_refresh_mview_job'
);
END;
/
SELECT job, what from user_jobs;找到jobno后,用dbms_Job.remove就可以删除job了exec dbms_job.remove(:jobno);
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'auot_refresh_mview_job',
job_type => 'STORED_PROCEDURE',
job_action => 'scott.auto_refresh_mview_job_proc',
start_date => SYSDATE,
repeat_interval => 'FREQ=DAILY; BYHOUR=12,19',
enabled => TRUE,
comments => 'Refresh materialized view mv_emp'
); 上面这种方式我不怎么明白。
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'auto_refresh_mview_job',
job_type => 'STORED_PROCEDURE',
job_action => 'scott.auto_refresh_mview_job_proc',
start_date => SYSDATE,
repeat_interval => 'FREQ=DAILY; BYHOUR=12,19',
enabled => TRUE,
comments => 'Refresh materialized view mv_emp'
); job_name对应的参数是任务名,这个任务的名字就是'auto_refresh_mview_job'
job_type是任务的类型,这里是存储过程类型
job_action是任务的名称,这里就是存储过程'scott.auto_refresh_mview_job_proc',存储过程的功能就是执行dbms_mviw.refresh('mv_emp')
start_date是开始执行的时间,这里是从任务创建时就开始执行
repeat_interval是执行的时间间隔,FREQ表示执行频率,DAILY表示每天执行,BYHOUR定义了具体的执行时间为每天的12时和19时
enabled表示任务为启用状态,如果不加这个参数,为缺省的不启用
comments为任务的一个说明,这里面的内容可以根据实际情况自行填写。定义了上面的任务后,可以从字典表dba_scheduler_jobs查询出这个任务来。
向hebo2005 致敬:)