create public database link HR_LINK
connect to HR identified by employeeservices202
using 'hq';


select * from EMPLOYEES@HR_LINK
 where Office='ANNAPOLIS';


create public database link HR_LINK
connect to HR identified by employeeservices202
using 'hq';


create public database link HR_LINK
connect to current_user
using 'hq';


select * from EMPLOYEES@HR_LINK;

create public database link HR_LINK
connect to HR identified by employeeservices202
using 'hq';


-- W lokalnej bazie danych:
--
create public database link HR_LINK
connect to current_user
using 'hq';

create view REMOTE_EMP as
   select * from EMPLOYEES@HR_LINK
   where login_id=USER;


CREATE PUBLIC DATABASE LINK loc.hq.mojafirma.com
USING 'LOCSVC';


create shared database link HR_LINK_SHARED
connect to current_user
authenticated by HR identified by employeeservices202
using 'hq';


drop database link HR_LINK;

create public database link HR_LINK
connect to HR identified by employeeservices404
using 'hq';


create database link OE.HR_LINK
connect to HR identified by OE2HR
using 'hq';


create public database link TRIGGER_LINK
connect to current_user
using 'rmt_db_1';


create trigger COPY_DATA
after insert on EMPLOYEES
for each row
begin
     insert into EMPLOYEES@TRIGGER_LINK
     values
     (:new.Empno, :new.Ename, :new.Deptno,
     :new.Salary, :new.Birth_Date, :new.Soc_Sec_Num);
end;
/


select Trigger_Type,
       Triggering_Event,
       Table_Name
 from DBA_TRIGGERS
where Trigger_Name = 'COPY_DATA';


set long 1000
select Trigger_Body
  from DBA_TRIGGERS
 where Trigger_Name = 'COPY_DATA';


create materialized view STORE_DEPT_SAL_MV
tablespace MVIEWS
build deferred
refresh complete
enable query rewrite
as
select d.DNAME, sum(SAL) as tot_sum
  from DEPT d, EMP e
 where d.DEPTNO = e.DEPTNO
group by d.DNAME;



create materialized view STORE_DEPT_SAL_MV
tablespace MYMVIEWS
parallel
build immediate
refresh fast on commit
enable query rewrite
as
select d.DNAME, sum(SAL) as tot_sum
  from DEPT d, EMP e
 where d.DEPTNO = e.DEPTNO
group by d.DNAME;


alter materialized view STORE_DEPT_SAL_MV pctfree 5;

drop materialized view STORE_DEPT_SAL_MV;

execute DBMS_MVIEW.REFRESH('store_dept_sal_mv','c');

execute DBMS_MVIEW.REFRESH('mv1,mv2,mv3','cfc');

execute DBMS_MVIEW.REFRESH_ALL;

execute DBMS_ADVISOR.QUICK_TUNE(DBMS_ADVISOR.SQLACCESS_ADVISOR, -
      'MV_TUNE','SELECT PUBLISHER FROM BOOKSHELF');


create directory scripts as 'e:\scripts';
grant read on directory scripts to public;
grant write on directory scripts to public;


execute DBMS_ADVISOR.CREATE_FILE(DBMS_ADVISOR.GET_TASK_SCRIPT('MV_TUNE'),-
'SCRIPTS','MV_TUNE.sql');


Rem  Nazwa uytkownika:        PRACTICE
Rem  Zadanie:                  MV_TUNE
Rem

set feedback 1
set linesize 80
set trimspool on
set tab off
set pagesize 60

whenever sqlerror CONTINUE

CREATE MATERIALIZED VIEW "PRACTICE"."MV$$_021F0001"
 REFRESH FORCE WITH ROWID
 ENABLE QUERY REWRITE
 AS SELECT PRACTICE.BOOKSHELF.ROWID C1,
"PRACTICE"."BOOKSHELF"."WYDAWCA" M1
FROM PRACTICE.BOOKSHELF;

begin
dbms_stats.gather_table_stats('"PRACTICE"',
'"MV$$_021F0001"',NULL,dbms_stats.auto_sample_size);
end;
/

whenever sqlerror EXIT SQL.SQLCODE

begin
dbms_advisor.mark_recommendation('MV_TUNE',1,'IMPLEMENTED');
end;
/


DBMS_REFRESH.MAKE
 (name IN VARCHAR2,
 list IN VARCHAR2, |
  tab IN DBMS_UTILITY.UNCL_ARRAY,
 next_date IN DATE,
 interval IN VARCHAR2,
 implicit_destroy IN BOOLEAN := FALSE,
 lax IN BOOLEAN := FALSE,
 job IN BINARY INTEGER := 0,
 rollback_seg IN VARCHAR2 := NULL,
 push_deferred_rpc IN BOOLEAN := TRUE,
 refresh_after_errors IN BOOLEAN := FALSE,
 purge_option IN BINARY_INTEGER := NULL,
 parallelism IN BINARY_INTEGER := NULL,
 heap_size IN BINARY_INTEGER := NULL);


execute DBMS_REFRESH.MAKE
 (name => 'emp_group', -
 list => 'local_emp, local_dept', -
 next_date => SysDate, -
 interval => 'SysDate+7');


DBMS_REFRESH.ADD
 (name IN VARCHAR2,
 list IN VARCHAR2, |
  tab IN DBMS_UTILITY.UNCL_ARRAY,
 lax IN BOOLEAN := FALSE);


DBMS_REFRESH.SUBTRACT
 (name IN VARCHAR2,
 list IN VARCHAR2, |
  tab IN DBMS_UTILITY.UNCL_ARRAY,
 lax IN BOOLEAN := FALSE);


DBMS_REFRESH.CHANGE
 (name IN VARCHAR2,
 next_date IN DATE := NULL,
 interval IN VARCHAR2 := NULL,
 implicit_destroy IN BOOLEAN := NULL,
 rollback_seg IN VARCHAR2 := NULL,
 push_deferred_rpc IN BOOLEAN := NULL,
 refresh_after_errors IN BOOLEAN := NULL,
 purge_option IN BINARY_INTEGER := NULL,
 parallelism IN BINARY_INTEGER := NULL,
 heap_size IN BINARY_INTEGER := NULL);


execute DBMS_REFRESH.CHANGE
 (name => 'emp_group',
 next_date => null,
 interval => 'SysDate+3');


execute DBMS_REFRESH.REFRESH('emp_group');

execute DBMS_REFRESH.DESTROY(name => 'emp_group');

create materialized view log on EMPLOYEES
tablespace DATA_2;


alter materialized view log on EMPLOYEES pctfree 10;

drop materialized view log on EMPLOYEES;

execute DBMS_MVIEW.PURGE_LOG
(master => 'EMPLOYEES',
    num => 1,
   flag => 'DELETE');


truncate table EMPLOYEES preserve materialized view log;

truncate table EMPLOYEES purge materialized view log;

CREATE TABLE MV_CAPABILITIES_TABLE
 (STATEMENT_ID     VARCHAR(30),  -- Dostarczany przez klienta unikatowy identyfikator 
                                -- instrukcji
 MVOWNER          VARCHAR(30),  -- NULL dla procedury EXPLAIN_MVIEW bazujcej na 
                                -- instrukcji SELECT 
 MVNAME           VARCHAR(30),  -- NULL dla procedury EXPLAIN_MVIEW bazujcej na
                                -- instrukcji SELECT
 CAPABILITY_NAME  VARCHAR(30),  -- Opisowa nazwa okrelonej
                                -- funkcjonalnoci:
                                -- REWRITE
                                --   Umoliwia przepisywanie z cakowitym 
                                --   dopasowywaniem tekstu
                                -- REWRITE_PARTIAL_TEXT_MATCH
                                --   Umoliwia przepisywanie z cakowitym i
                                --   czciowym dopasowywaniem tekstu
                                -- REWRITE_GENERAL
                                --   Pozwala na przepisywanie w kadej odmianie
                                -- REFRESH
                                --   Umoliwia kompletne odwieanie
                                -- REFRESH_FROM_LOG_AFTER_INSERT
                                --   Umoliwia szybkie odwieenie przy uyciu dziennika 
                                --   widoku zmaterializowanego lub
                                --   przynajmniej modyfikacj tabeli gromadzcej,
                                --   gdy aktualizacje s ograniczone do
                                --   operacji wykorzystujcej instrukcj INSERT
                                -- REFRESH_FROM_LOG_AFTER_ANY
                                --   Umoliwia szybkie odwieenie przy uyciu dziennika
                                --   widoku zmaterializowanego lub
                                --   modyfikacj tabeli gromadzcej po wystpieniu
                                --   dowolnej kombinacji aktualizacji
                                -- PCT
                                --   Pozwala na rozszerzone ledzenie aktualizacji dla
                                --   tabeli o nazwie podanej w kolumnie RELATED_NAME.
                                --   Tego typu ledzenie jest niezbdne do szybkiego
                                --   odwieania po wykonaniu operacji administracyjnych
                                --   dla tabeli o nazwie zawartej
                               --    w kolumnie RELATED_NAME, a take do
                               --    przepisywania niedopuszczajcego dezaktualizacji
                               --    danych, gdy widok zmaterializowany czciowo
                               --    zdezaktualizuje si w stosunku do tabeli                                   
                               --    wymienionej w kolumnie RELATED_NAME.
                               --    ledzenie to czasami umoliwi te szybkie
                               --    odwieanie aktualizacji tabeli o nazwie
                               --    podanej w kolumnie RELATED_NAME, gdy
                               --    nie jest moliwe szybkie odwieenie przy uyciu 
                               --    dziennika widoku zmaterializowanego lub
                               --    modyfikacja tabeli gromadzcej.
POSSIBLE         CHARACTER(1), --  T = moliwo jest dostpna
                               --  F = moliwo nie jest dostpna
RELATED_TEXT     VARCHAR(2000),--  Waciciel.tabela.kolumna, nazwa aliasu i inne 
                               --  podobne dane zwizane z komunikatem.
                               --  Konkretne znaczenie tej kolumny zaley od
                               --  kolumny MSGNO. W celu uzyskania dodatkowych 
                               --  szczegw naley zajrze do dokumentacji
                                --  procedury DBMS_MVIEW.EXPLAIN_MVIEW()
RELATED_NUM      NUMBER,       --  Gdy istnieje numeryczna warto powizana
                               --  z wierszem, trafia do tej kolumny.
                               --  Konkretne znaczenie tej kolumny zaley od
                               --  kolumny MSGNO. W celu uzyskania dodatkowych
                               --  szczegw naley zajrze do dokumentacji
                               --  procedury DBMS_MVIEW.EXPLAIN_MVIEW()
MSGNO            INTEGER,      --  Komunikat QSM objaniajcy powd braku moliwoci
                               --  czego lub podajcy wicej szczegw, gdy jest to 
                               --  moliwe.
MSGTXT           VARCHAR(2000),--  Tekst powizany z MSGNO.
SEQ              NUMBER);      --  Przydatna w klauzuli ORDER BY w przypadku                                
                               --  pobierania danych z tej tabeli.


select Capability_Name, Msgtxt
  from MV_CAPABILITIES_TABLE
 where Msgtxt is not null;


create dimension GEOGRAPHY
 level COUNTRY_ID       is COUNTRY.Country
 level CONTINENT_id     is CONTINENT.Continent
 hierarchy COUNTRY_ROLLUP (
  COUNTRY_ID           child of
  CONTINENT_ID
 join key COUNTRY.Continent references CONTINENT_id);


