alias DEMO='rlwrap sqlplus DEMO/"secret"@bakura:1521/NIHILUS'

drop table T1 purge;
create table T1 (
    id number generated always as identity,
    n1 number(1),
    c1 varchar2(10),
    d1 DATE	
);

alter table T1 add constraint T1_PK primary key (ID);


-- infinite_update2.sql
whenever sqlerror exit failure
declare
  i NUMBER;
begin
	i:=0;
   loop 
     i:=i+1;
     insert into T1(n1,c1,d1) values(mod(i,3),DBMS_RANDOM.string('a',10),sysdate);
     commit; 
     dbms_session.sleep(1);
   end loop;
end;
/


drop materialized view MW0;
drop materialized view MW1;
drop materialized view MW2;

create materialized view MW0 as select * from T1 where n1=0;
create materialized view MW1 as select * from T1 where n1=1;
create materialized view MW2 as select * from T1 where n1=2;


alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
select max(d1) from MW0;
select max(d1) from MW1;
select max(d1) from MW2;

create materialized view log on T1 with primary key including new values;

set lines 256

col log_table for a30
col log_trigger for a30
col primary_key for a3 head PK

select log_table,log_trigger,primary_key from dba_mview_logs where log_owner='DEMO' and MASTER='T1';


-- on snap "server" site

set lines 256

col	owner for a15
col	name for a25
col	master_owner for a15
col	master for a25
col	master_link for a25
col	refresh_method for a15
col	type for a10
col	status for a7
col	snaptime for a20

select 
	snap.owner
	,snap.name
	,snap.snapid
	,snap.status
	,slog.snaptime
	,snap.master_owner
	,snap.master
	,snap.refresh_method
	,snap.type
	,snap.master_link
from 
	sys.slog$ slog
join dba_snapshots snap on slog.snapid=snap.snapid
where slog.mowner='DEMO' and slog.master='T1';


col snapname for a30
col snapsite for a30
col snaptime for a30

select 
	r.name snapname, snapid, nvl(r.snapshot_site, 'not registered') snapsite, snaptime 
from   
	sys.slog$ s, dba_registered_snapshots r
where  
	s.snapid=r.snapshot_id(+) and mowner='DEMO' and master='T1';                                                                                           


exec dbms_mview.refresh('MW0');
exec dbms_mview.refresh('MW1');
exec dbms_mview.refresh('MW2');

-- point of view of snap "client"
select last_refresh_date,sysdate from dba_mviews where mview_name='MW0';

-- point of view of snap "server"
select sysdate,last_refresh from dba_snapshots where name='MW0';


select log_table from dba_mview_logs where master='T1';
 
select count(*) from DEMO.MLOG$_T1;


exec dbms_refresh.make('MWGROUP0', list=>'MW0,MW1', next_date=>null, interval=>'null',parallelism=>2);

exec dbms_refresh.refresh('MWGROUP0');


-- https://www.oracleplsqltr.com/2021/03/14/how-to-unregister-materialized-view-from-source-db/

exec dbms_mview.unregister_mview(mviewowner=>'DEMO',mviewname=>'MW2',mviewsite=>'NIHILUS');
exec dbms_mview.purge_mview_from_log(mview_id=>9);

select segment_name,bytes/1024 Kb from dba_segments where segment_name='MLOG$_T1';



