See How to trace for remote tracing, db links
Query (This database is client of other masters)
--select db_link_user, db_link_host, count(*) num_snapshot from (
Select T.Owner, t.table_name,
(select sum(bytes)/1024/1024 from dba_segments where owner = s.owner and segment_name = s.table_name) size_MB,
t.tablespace_name,
S.MASTER_VIEW, S.MASTER_OWNER, S.MASTER,
S.MASTER_LINK
, dbl.owner db_link_owner, dbl.db_link db_link, dbl.username db_link_target_user, dbl.host db_link_host,
decode(to_char(S.LAST_REFRESH, 'mm-dd-yyyy'), '00-00-0000', to_date(null), S.LAST_REFRESH) last_refresh,
dba_jobs.last_date job_last_date,
decode(to_char(S.START_WITH, 'mm-dd-yyyy'), '00-00-0000', to_date(null), s.start_with) start_with,
dba_jobs.next_date job_next_date,
cast(S.START_WITH as timestamp) - cast(S.LAST_REFRESH as timestamp) interval_snapshot,
cast(dba_jobs.next_date as timestamp) - cast(dba_jobs.last_date as timestamp) interval_job,
r.rname refresh_group, dba_jobs.job, dba_jobs.broken job_broken, dba_jobs.what job_what,
S.QUERY,
R.ROLLBACK_SEG, S.CAN_USE_LOG, S.UPDATABLE, S.REFRESH_METHOD,
S.ERROR, S.TYPE,
dba_jobs.INTERVAL job_interval,
r.INTERVAL dba_refresh_interval, s.NEXT snapshot_next,
S.UPDATE_TRIG,
S.UPDATE_LOG, S.MASTER_ROLLBACK_SEG, S.STATUS, S.REFRESH_MODE, S.PREBUILT,
M.REWRITE_ENABLED, M.REWRITE_CAPABILITY, M.BUILD_MODE, M.FAST_REFRESHABLE,
M.LAST_REFRESH_TYPE, M.STALENESS, M.AFTER_FAST_REFRESH, M.COMPILE_STATE, M.USE_NO_INDEX
FROM DBA_TABLES T, DBA_SNAPSHOTS S, SYS.DBA_MVIEWS M,
SYS.DBA_REFRESH R, dba_db_links dbl, dba_jobs
WHERE T.OWNER = S.OWNER
AND T.TABLE_NAME = S.TABLE_NAME
AND M.OWNER = S.OWNER
AND M.MVIEW_NAME = S.NAME
--AND R.ROWNER (+) = S.OWNER
--AND R.RNAME (+) = S.NAME
and R.refgroup (+)= s.refresh_group
and dbl.owner (+)= s.owner
and dbl.db_link (+)= substr(S.MASTER_LINK, 2, length(S.MASTER_LINK))
and dba_jobs.job (+)= r.job
--) group by db_link_user, db_link_host
order by r.rname |
Altering a MV refresh interval You only need to alter the interval of the relative job: begin dbms_job.interval(52090, 'case when sysdate > trunc(sysdate,''hh24'')+40/1440 then trunc(sysdate,''hh24'')+1/48 else trunc(sysdate,''hh24'')+1/48+15/1440 end'); end; At next job run the big query above will display updated refresh times |
Query (This database is master for clients) select * from DBA_MVIEW_LOGS |
Grant grant on commit refresh to aldo; |
Refresh on commit Snapshot
CREATE MATERIALIZED VIEW ALDO.CUBE_FATTURE
BUILD IMMEDIATE
REFRESH FAST
ON COMMIT
ENABLE QUERY REWRITE
AS
select calc_data_fattura_anno, calc_data_fattura_mese, calc_data_fattura_giorno
, sum(n_importo) n_importo, COUNT(*) AS count_all
, GROUPING_ID(calc_data_fattura_anno, calc_data_fattura_mese, calc_data_fattura_giorno) AS gid
from lavF_fatture, lav_commesse
, aziende azDest
where lav_commesse.id(+)= lavF_fatture.id_commessa --lavF_fatture.id_commessa must be included in mvlog columns
and azDest.id(+)= lav_commesse.id_azienda
group by cube (calc_data_fattura_anno, calc_data_fattura_mese, calc_data_fattura_giorno)
BEGIN
DBMS_STATS.GATHER_TABLE_STATS(
ownname => 'ALDO',
tabname => 'LAVF_FATTURE');
END;
|
Materialized view log --do not include pk --exclude any not cubed columns, include count() columns --include rowid for immediate use on cubes --necessary for each table used from mv when refresh fast CREATE MATERIALIZED VIEW LOG ON ALDO.LAVF_FATTURE WITH ROWID, PRIMARY KEY (N_IMPORTO,ID_COMMESSA,DATA_FATTURA,CALC_DATA_FATTURA_ANNO,CALC_DATA_FATTURA_MESE,CALC_DATA_FATTURA_GIORNO) INCLUDING NEW VALUES; ALTER MATERIALIZED VIEW LOG ON ALDO.LAVF_FATTURE ADD SEQUENCE; |
dbms_mview --create necessary table @utlxmv.sql truncate table mv_capabilities_table declare s varchar2(4000) := '... mv query ...'; begin DBMS_MVIEW.EXPLAIN_MVIEW (mv => s); end; select * from mv_capabilities_table |
Refresh mview
BEGIN
--or DBMS_MVIEW
DBMS_SNAPSHOT.REFRESH(
list => '"ALDO"."DWH_COSTEDEVENT"',
method => 'C',
rollback_seg => '',
push_deferred_rpc => FALSE,
refresh_after_errors => false);
END;
alter materialized view "ALDO"."DWH_COSTEDEVENT" consider fresh |
My questions It is not possible altering the sql of a materialized view without refreshing it |