如何获得oracle物化视图 定时刷新时 刷新所用的时间 或者是监控 物化视图在jobs中建立的job任务的执行时间如何查看oracle定时你确定你搜了么 。。。
以下是物化视图如何查看oracle定时的建立如何查看oracle定时,注意是refresh mode是 on demand还是on commit
ON DEMAND顾名思义如何查看oracle定时,仅在该物化视图“需要”被刷新了 , 才进行刷新(REFRESH),即更新物化视图 , 以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT , 即事务提交,则立刻刷新,立刻更新物化视图 , 使得数据和基表一致 。
创建物化视图时未作指定,则Oracle按ON DEMAND模式来创建 。
但怎么更新?或者说物化视图的数据怎么随着基表而更新?Oracle提供了两种方式,手工刷新和自动刷新,像如何查看oracle定时我们这种,在物化视图定义时 , 未作任何指定,那当然是默认的手工刷新了 。也就是说,通过我们手工的执行某个Oracle提供的系统级存储过程或包,来保证物化视图与基表数据一致性 。
所谓的自动刷新,其实也就是Oracle会建立一个job,通过这个job来调用相同的存储过程或包
CREATE MATERIALIZED VIEW mview_name
[TABLESPACE ts_name]
[PARALLEL (DEGREE n)]
[BUILD {IMMEDIATE|DEFERRED}]
[{ REFRESH {FAST|COMPLETE|FORCE}
[{ON COMMIT|ON DEMAND}]
| NEVER REFRESH } ]
[{ENABLE|DISABLE} QUERY REWRITE]
AS SELECT … FROM …
基于你说的情况 , 有job的定时刷新,应该是on commit的情况,或者是手动建立的job
下面给出我的测试:
create materialized view scott.MV_test_index
refresh force on commit
as
select * from scott.test_index;
SQL select count(*) from mv_test_index;
COUNT(*)
----------
50195
SQL delete from test_index where rownum=1;
1 row deleted.
SQL commit;
Commit complete.
SQL select count(*) from mv_test_index;
COUNT(*)
----------
50194
这里我们发现commit的时间会有些长,因为同时要刷新物化视图,我们这里其实是重新做了删除物化视图数据和插入新数据的操作(因为刷新的方法是complete,当然你可以选择FAST来做增量刷新,而且fast是首?。?nbsp;, 然后物化视图已经更新了 。
下面是开启session sql trace的结构 , 你可以看到commit之后oralce所做的操作 。
********************************************************************************
commit
callcountcpuelapseddiskquerycurrentrows
------- -------------- ---------- ---------- ---------- --------------------
Parse10.000.000000
Execute10.110.230010
Fetch00.000.000000
------- -------------- ---------- ---------- ---------- --------------------
total20.110.230010
Misses in library cache during parse: 0
Parsing user id: 54
********************************************************************************
SELECT /* OPT_DYN_SAMP */ /*ALL_ROWS IGNORE_WHERE_CLAUSE
NO_PARALLEL(SAMPLESUB) opt_param('parallel_execution_enabled', 'false')
NO_PARALLEL_INDEX(SAMPLESUB) NO_SQL_TUNE */ NVL(SUM(C1),:"SYS_B_0"),
NVL(SUM(C2),:"SYS_B_1")
FROM
(SELECT /*NO_PARALLEL("MV_TEST_INDEX") FULL("MV_TEST_INDEX")
NO_PARALLEL_INDEX("MV_TEST_INDEX") */ :"SYS_B_2" AS C1, :"SYS_B_3" AS C2
FROM "SCOTT"."MV_TEST_INDEX" SAMPLE BLOCK (:"SYS_B_4" , :"SYS_B_5") SEED
(:"SYS_B_6") "MV_TEST_INDEX") SAMPLESUB
callcountcpuelapseddiskquerycurrentrows
------- -------------- ---------- ---------- ---------- --------------------
Parse10.000.000000
Execute10.000.000000
Fetch10.070.19446901
------- -------------- ---------- ---------- ---------- --------------------
total30.070.19446901
Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: ALL_ROWS
Parsing user id: 54(recursive depth: 2)
RowsRow Source Operation
----------------------------------------------------------
1SORT AGGREGATE (cr=69 pr=44 pw=0 time=196762 us)
10624MAT_VIEW ACCESS SAMPLE MV_TEST_INDEX (cr=69 pr=44 pw=0 time=1853189 us)
********************************************************************************
delete from "SCOTT"."MV_TEST_INDEX"
callcountcpuelapseddiskquerycurrentrows
------- -------------- ---------- ---------- ---------- --------------------
Parse10.020.010300
Execute17.489.462032115498450194
Fetch00.000.000000
------- -------------- ---------- ---------- ---------- --------------------
total27.509.482032415498450194
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 54(recursive depth: 1)
RowsRow Source Operation
----------------------------------------------------------
0DELETEMV_TEST_INDEX (cr=371 pr=20 pw=0 time=9503556 us)
50194MAT_VIEW ACCESS FULL MV_TEST_INDEX (cr=310 pr=20 pw=0 time=1355940 us)
********************************************************************************
INSERT /**/ INTO "SCOTT"."MV_TEST_INDEX"("OBJECT_ID","OBJECT_NAME") SELECT
"TEST_INDEX"."OBJECT_ID","TEST_INDEX"."OBJECT_NAME" FROM
"SCOTT"."TEST_INDEX" "TEST_INDEX"
callcountcpuelapseddiskquerycurrentrows
------- -------------- ---------- ---------- ---------- --------------------
Parse10.010.010000
Execute15.9012.87077710379050193
Fetch00.000.000000
------- -------------- ---------- ---------- ---------- --------------------
total25.9112.88077710379050193
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 54(recursive depth: 1)
RowsRow Source Operation
----------------------------------------------------------
50193TABLE ACCESS FULL TEST_INDEX (cr=241 pr=0 pw=0 time=602379 us)
********************************************************************************
BEGIN dbms_session.set_sql_trace(false); END;
接下来看看fast的刷新方法:
CREATE MATERIALIZED VIEW LOG ON scott.test_index; --这里我试过yantinkun的那个网页,是不能加with rowid的,会报错:ORA-23415: materialized view log for does not record the primary key
DROP materialized view log on scott.test_index;
create materialized view scott.MV_test_index
refresh fast on commit
as
select * from scott.test_index;
SQL exec dbms_session.set_sql_trace(true);
PL/SQL procedure successfully completed.
SQL delete from test_index where rownum=1;
1 row deleted.
SQL commit;
Commit complete.
SQLexec dbms_session.set_sql_trace(false);
PL/SQL procedure successfully completed.
SQL host
这次的commit快多了 , 因为只是增量的刷新;
看下log中有这样一行:
DELETE FROM "SCOTT"."MV_TEST_INDEX" SNAP$
WHERE
"OBJECT_ID" = :1
只是找到了多出来的那个object的id,然后从物化视图里删掉就ok了 。
可以查看物化视图的开始刷新时间,通过查看视图
select * from mlog$ where mowner='SCOTT' and MASTER='TEST_INDEX'来查找对应建立的物化视图的log,我这里查出来的是scott.MLOG$_TEST_INDEX
然后执行查询就可以看到详细的信息了:
select * from scott.MLOG$_TEST_INDEX
然后是刷新的时间,当刷新选项是commit的时候你是没法看的,只能从session的trace里面估计,
on demand话就是你自定义的job 来执行exec dbms_mview.refresh('MV_TEST_INDEX)
这个是可以看的,可以从user_jobs这个视图来看,里面有个total_time来记录job的执行总时间 。
怎么查看oracle定时文件是否已运行?你提供的信息太少 , 我估计你说的是oracle的定时处理任务的机制 。查看任务队列 , 如果要查看当前用户的定时任务队列 , 可以通过查询user_jobs视图或dba_jobs.
select last_date from user_jobs;可以查看所有任务上次成功执行的时间 。
Oracle中如何定时执行一条SQL语句通过网上查询,找到一种方案,就是先在oracle里面对要定时的sql写成存储过程,再用DBMS_scheduler对存储过程进行定时执行 。
在数据库中新建了一个表MY_JOB_TEST
在数据库中新建了一个表MY_JOB_TEST
在数据库中新建了一个表MY_JOB_TEST
在PLSQL中,执行下面语句模拟存储过程的调用,执行后要点提交才有反应
[sql] view plain copy
BEGIN
INSERT INTO MY_JOB_TEST (NUM) VALUES (1);
END;
然后下面建立一个存储过程JOB_TEST
(注意,这里用户需要CREATE JOB权限,可以用超级管理员用户执行下面语句给指定用户赋予该权限)
[sql] view plain copy
Grant Create Job To 指定用户名
[sql] view plain copy
SQLCREATE OR REPLACE PROCEDURE
JOB_TEST
BEGIN
INSERT INTO MY_JOB_TEST (NUM) VALUES (1);
END;
(此处要执行存储过程不能用exec JB_TEST,这种执行方式只能在命令行中使用)
使用DBMS_SCHEDULER进行定时,这里为每分钟执行一次
[sql] view plain copy
SQL BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name='SCHEDULER_TEST',
job_type='STORED_PROCEDURE',
job_action='JOB_TEST',
start_date=sysdate,
repeat_interval='FREQ=MINUTELY;INTERVAL=1');
END;
但是这样子定时任务并不会执行 。
我们可以用下面的命令查看一下scheduler的状态
[plain] view plain copy
SQLSELECT * FROM USER_SCHEDULER_JOBS;
此时我们可以看到enable的状态是false的,因此我们需要去启动定时任务
[plain] view plain copy
SQLBEGIN
DBMS_SCHEDULER.ENABLE('SCHEDULER_TEST');
END
dbms_scheduler.enable('j_test');--启用jobs
dbms_scheduler.disable('j_test');--禁用jobs
dbms_scheduler.run_job('j_test');--执行jobs
dbms_scheduler.stop_job('j_test');--停止jobs
dbms_scheduler.drop_job('j_test');--删除jobs
然后再查询job的enable装态,发现为true了 。
然后查看MY_JOB_TEST表,发现每分钟会往里面添加记录 。
当需要修改定时任务或者调度的其他属性时,可以用下面的
dbms_scheduler.set_attribute('调度名','调度属性','调度值');
至此,定时任务完成 。
如何查看并删除oracle的所有定时任务主要是管理Jobs物件(Jobs页签)
JOB分类有dba_jobs
,
all_jobs
,
user_jobs
,
dba_jobs_running
查询所有JOB
SELECT
JOB,
NEXT_DATE,
NEXT_SEC,
FAILURES,
BROKEN
FROM
ALL_JOBS;
或
SELECT
*
FROM
ALL_JOBS;
删除JOB
(一个一个删,我不记得有没有一次全删的命令)
begin
dbms_job.remove(:job);
--:job可以用dba_jobs.job的值代替如:1198
end;
怎么查看oracle10g数据库的定时任务--当前用户定时任务
select count(*) from user_jobs;
--有权限访问的定时任务
select count(*) from all_jobs;
--整个数据库所有定时任务
select count(*) from dba_jobs;
【如何查看oracle定时 oracle怎么查询时间范围】关于如何查看oracle定时和oracle怎么查询时间范围的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- exceerp系统数据库,excell数据库
- 注册一个书籍推荐公众号,新书推荐的公众号
- linux中得ps命令,linux中的ps命令什么意思
- oracle怎么日期相减 oracle日期相减得到小时
- 手机能换名字吗怎么换,手机能改姓名吗
- cs1.6架设服务器,cs自己架服务器
- 直播带货发展报告,直播带货发展报告范文
- 数据库修改用php 数据库修改用户密码
- 电脑开直播用什么工具,电脑直播必备工具有哪些