惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
D
DataBreaches.Net
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
Docker
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
Check Point Blog
腾讯CDC
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
IT之家
IT之家
月光博客
月光博客
U
Unit 42
K
Kaspersky official blog
T
Threatpost
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
GbyAI
GbyAI
P
Proofpoint News Feed
Last Week in AI
Last Week in AI
云风的 BLOG
云风的 BLOG
酷 壳 – CoolShell
酷 壳 – CoolShell
I
InfoQ
Engineering at Meta
Engineering at Meta
Recorded Future
Recorded Future
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Security @ Cisco Blogs
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
Security Archives - TechRepublic
Security Archives - TechRepublic
Webroot Blog
Webroot Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Schneier on Security
S
Secure Thoughts
The Register - Security
The Register - Security
B
Blog RSS Feed
The Last Watchdog
The Last Watchdog
P
Palo Alto Networks Blog
爱范儿
爱范儿
B
Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News and Events Feed by Topic
阮一峰的网络日志
阮一峰的网络日志
L
LINUX DO - 热门话题
C
Cisco Blogs
Spread Privacy
Spread Privacy
F
Full Disclosure
博客园 - 聂微东
T
The Blog of Author Tim Ferriss

博客园 - Sunlight

Eclipse保存验证JS缓慢 Eclipse去除js错误 jquery动态添加删除行 收藏网址 Eclipse 修改项目名称 SQL 实现返回一个字段中,某个字符出现的次数 Oracle DIV/CSS 实现三列,左右两列固定,中间一列自适应 PowerDesigner15 操作记录 使用gzip优化web应用(filter实现) 增强我们的Visual Studio .Net 热调试 Axis 客户端调用 javascritp对fckeditor编辑器操作 - Sunlight - 博客园 Spring中任务调度cronExpression配置说明 - Sunlight - 博客园 基于 Axis 的WebService接口 SQL查询Excel 用 JavaScript 实现网页图片等比例缩放 漂亮的按钮样式 分析函数RANK的使用
物化视图每天自动刷新2次的方法
Sunlight · 2012-07-18 · via 博客园 - Sunlight

有用过ORCLE 物化视图的朋友,请帮个忙,我想每天刷新两次,比如中午十二点,晚上七点,不知道怎么写,急用!

你这个需要,可以这样实现
建一个表,再写个存储过程
再用个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_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;
/

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查询出这个任务来。