Materializované pohledy můžete spravovat v EM nebo přímo z sqlplus. Znáte-li přesnou syntaxi zápisů, pak použití příkazů je rychlejší, oproti tomu použití EM nabízí ucelený přehled o všech parametrech přehleně uspořádaný do sekcí podle účelu.
V následujícím řešení si vytvoříte materializovaný pohled, který vytvoříte v databázi orcl11g, ale bude obsahovat data ze vzdálené databáze test. Data budete automaticky aktualizovat.
První věcí co musíte zajistit je připojení do vzdálené databáze pomocí databázového linku. Veškeré databázové linky dohledáte v pohledu all_db_links.
SQL> select DB_LINK,USERNAME,HOST from all_db_links;
DB_LINK SERNAME HOST
—————————————————————-
VZDALENA_DB SCOTT TEST
Databázový link máte vytvořený. Můžete vytvořit materializovaný pohled pomocí příkazu create materialized view. Jelikož materializovaný pohled obsahuje skutečná data, je potřeba tyto data udržovat aktuální. Máte možnost MV přepisovat pokaždé znovu celé a nebo máte možnost jej aktualizovat jen o ty data, která byla změněna.
Aktualizaci data se říký refresh a této přírůstkové aktualizaci se říká FAST refresh, abyste však byli schopni identifikovat, která data se změnila je potřeba na hlavní tabulkou,tzv master table vytvořit log materializovaného pohledu. Daný log vytvoříte příkazem create materialized view log.
Poznámka: Zkusíte-li vytvořit MV, které by se mělo aktualizovat metodou fast refresh a přitom na hlavní tabulkou není vytvořený MV log, dostanete při vytváření následující chybovou hlášku.
ORA-23413: table „SCOTT“.“EMP“ does not have a materialized view log
Přihlaste se nejdříve do databáze test na server centos53bkp a vytvořte MV log nad tabulkou emp.
[oracle@centos53bkp ~]$ sqlplus / as sysdba
…
SQL> create materialized view log on scott.emp;
Materialized view log created.
Je-li MV log vytvořen přihlaste se na lokální server a zkuste vytvořit MV.
SQL> create materialized view mv_emp_pk
refresh fast start with sysdate next sysdate + 1/48 with PRIMARY KEY AS select * from emp@vzdalena_db;
Materialized view created.
Právě jste vytvořili MV, které se jmenuje mv_emp_pk, které se bude aktualizovat pravidelně každých 30minut. Aktualizovat se budou jen změněné řádky. K rozpoznání se bude používat primární klíč. MV bude obsahovat všechny údaje z tabulky emp v databázi test, do které se připojujete pomocí databázového linku vzdalena_db.
SQL> desc mv_emp_pk;
Name Null? Type
—————————————– ——– ————-
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
Tímto jedním příkazem jste provedli hned několik věcí a všechny můžete libovolně měnit. V EM je k tomu přímo určená sekce v záložce Schema je sekce Materialized views.
Poznámka: U MV, kde není primární klíč a přitom chcete použít fast refresh musíte využít druhou metodu a to pomocí ROWID.
Metalink:
76673.1 – What are Materialized Views?
254593.1 – Differences Between Rowid & Primary Key Materialized Views
222463.1 – Materialized View Aggregate Fast Refresh
457070.1 – How To Truncate Materialized View Log