Oracle
 sql >> база данни >  >> RDS >> Oracle

какво представлява материализираните възгледи в Oracle?

Какво представлява материализираните изгледи в oracle

материализиран изглед е обект на база данни, който съдържа резултатите от заявка. Той е различен от обикновения изглед на оракул. Тези материализирани изгледи имат съхранени данни и когато заявите материализирания изглед, той връща данни от съхранените данни. Клаузата FROM на заявката може да назовава таблици, изгледи и други материализирани изгледи. Съвкупно тези обекти се наричат ​​главни таблици (термин за репликация) или подробни таблици (термин за съхранение на данни). Тази справка използва "главни таблици" за последователност. Базите данни, съдържащи главните таблици, се наричат ​​главни бази данни.

Когато създавате материализиран изглед, Oracle Database създава една вътрешна таблица и поне един индекс на Oracle и може да създаде един изглед, всички в схемата на материализирания изглед. Oracle Database използва тези обекти, за да поддържа материализираните данни за изглед. Трябва да имате необходимите права за създаване на тези обекти.

Необходими права за създаване на материализиран изглед

Потребителят трябва да има СЪЗДАВАНЕ НА МАТЕРИАЛИЗИРАН ИЗГЛЕД за създаване на материализиран изглед

Общ синтаксис

CREATE MATERIALIZED VIEW
BUILD [IMMEDIATE | DEFERRED]
REFRESH [FAST | COMPLETE | FORCE ]
ON [COMMIT | DEMAND ]
[[ENABLE | DISABLE] QUERY REWRITE]
[ON PREBUILT TABLE]
AS
;

Обяснение на всеки термин

ИЗГРАЖДАНЕ [НЕЗАБАВНО | ОТЛОЖЕНО] Можем да посочим да се попълни незабавно Или можем да посочим ОТЛОЖЕНО да се попълни при първото поискано опресняване.
ОБНОВЯВАНЕ [БЪРЗО | ПЪЛНА | СИЛА ] Тук има три опции. Всяка е обяснена по-долу

1) БЪРЗО:Опитва се бързо опресняване. Ако материализираните регистрационни файлове за изглед не присъстват в изходните таблици предварително, създаването е неуспешно.


2) ПЪЛНИТЕ :Сегментът на таблицата, поддържащ материализирания изглед, се съкращава и се запълва отново с помощта на свързаната заявка.


3) СИЛА:Опитва се бързо опресняване. Ако това не е възможно, се извършва пълно опресняване.

ВЪВ [COMMIT | ТЪРСЕНЕ ] Можем да посочим ON COMMIT, така че  опресняването да се задейства от ангажирана промяна на данните в една от зависимите таблици Или можем да посочим ON DEMAND, така че   опресняването да се инициира от ръчна заявка или планирана задача.
[[АКТИВНО | ИЗКЛЮЧВАНЕ] ПРЕЗАПИСВАНЕ НА ЗАЯВКАТА] Изгледът отговаря на условията за пренаписване на заявка
CREATE MATERIALIZED VIEW mv_test
BUILD IMMEDIATE
REFRESH complete
ON demand AS
SELECT EMP.EMPNO,EMP.ENAME, DEPT.DEPTNO,DEPT.DNAME
FROM EMP,DEPT
where EMP.DEPTNO= DEPT.DEPTNO;

Материализирано опресняване на изглед

Можем да обновим материализирания изглед чрез PLSQL пакета DBMS_MVIEW

Пакетът DBMS_MVIEW съдържа три API за извършване на операции по опресняване:

DBMS_MVIEW.REFRESH

Опреснете един или повече материализирани изгледи.

DBMS_MVIEW.REFRESH_ALL_MVIEWS

Опреснете всички материализирани изгледи.

DBMS_MVIEW.REFRESH_DEPENDENT

Опреснете всички материализирани изгледи, които зависят от определена основна таблица или материализиран изглед или списък с главни таблици или материализирани изгледи.

EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','C');
Here C stands for Complete refresh

Ако се опитате да направите бързо опресняване, като използвате командата по-долу

EXECUTE DBMS_MVIEW.REFRESH('MV_TEST','F');
Here F stands for fast Refresh

Ще изведе грешка, тъй като няма материализиран дневник за изглед. ние ще проверяваме материализирания дневник за изглед по-долу

С Oracle 12c Oracle въведе нов API DBMS_SYNC_REFRESH за опресняване

Какво е Oracle Materialized View Log

Когато се правят промени в DML в главната таблица на данните, Oracle Database съхранява редове, описващи тези промени в материализирания дневник на изглед и след това използва дневника за материализирани изгледи, за да опресни материализираните изгледи въз основа на основната таблица. Този процес се нарича постепенно или бързо опресняване. Без дневник за материализиран изглед, Oracle Database трябва да изпълни повторно заявката за материализиран изглед, за да опресни материализирания изглед. Този процес се нарича пълно опресняване. Обикновено бързото опресняване отнема по-малко време от пълното опресняване.

Материализираният дневник на изглед се намира в главната база данни в същата схема като главната таблица. Основната таблица може да има само един материализиран изглед, дефиниран в нея. Oracle Database може да използва този материализиран дневник на изгледи, за да извършва бързо опресняване за всички материализирани изгледи с възможност за бързо опресняване въз основа на основната таблица.

За да обновите бързо материализиран изглед за присъединяване, трябва да създадете регистрационен файл с материализиран изглед за всяка от таблиците, към които се отнася материализираният изглед.

Опресняване на групата

Групата за опресняване е колекция от един или повече материализирани изгледи, които Oracle опреснява в атомарна транзакция, гарантирайки, че връзките между главните таблици се запазват

Примери:

CREATE MATERIALIZED VIEW mv_test
TABLESPACE test_data
BUILD IMMEDIATE
REFRESH complete ON COMMIT AS
SELECT a.name,b.salary FROM [email protected]_LINK a, [email protected]_LINK b where a.emp_id=b.emp_id;CREATE MATERIALIZED VIEW mv_test
TABLESPACE test_data
BUILD IMMEDIATE
REFRESH force ON COMMIT AS
SELECT a.name,b.salary FROM [email protected]_LINK a, [email protected]_LINK b where a.emp_id=b.emp_id;CREATE MATERIALIZED VIEW LOG ON emp;exec DBMS_REFRESH.MAKE(name=>'test_grp', -
list=>'test_mv1,test_mv2','mv_test' -
next_date => sysdate, -
interval => 'null');

exec DBMS_REFRESH.REFRESH('test_grp');

 

Как да проверите състоянието на материализирания изглед

SELECT MVIEW_NAME, STALENESS, LAST_REFRESH_TYPE, COMPILE_STATE
FROM USER_MVIEWS ORDER BY MVIEW_NAME;

 

Опция за опресняване извън мястото за материализиран изглед

С 12c издание 1 е налична нова опция за опресняване за подобряване на производителността и наличността на материализирано опресняване на изглед. Тази опция за опресняване се нарича опресняване извън мястото, защото използва външни таблици по време на опресняване, за разлика от съществуващото опресняване "на място", което директно прилага промени към материализираната таблица на контейнера за изглед. Опцията за опресняване извън мястото работи с всички съществуващи методи за опресняване, като FAST („F“), COMPLETE („C“), PCT („P“) и FORCE („?“).

Опресняването извън мястото е особено ефективно при работа в ситуации с големи количества промени в данните, където конвенционалните DML изрази не се мащабират добре. Освен това ви позволява да постигнете много висока степен на наличност, тъй като материализираните изгледи, които се опресняват, могат да се използват за директен достъп и пренаписване на заявка по време на изпълнението на операторите за опресняване.

При опресняване извън мястото, цялата или засегнатите части от материализиран изглед се изчисляват в една или повече външни таблици.

exec dbms_mview.refresh('MV_TEST', out_of_place=>true, atomic_refresh=>false)
;

Разлика между материализиран изглед и изглед на Oracle

Както е обяснено по-горе Материализирани изгледи са базирани на диск и се актуализират периодично въз основа на дефиницията на заявката. В материализирания изглед наборът от резултати се съхранява в таблицата на материализирания изглед

Прегледи са само виртуални и изпълняват дефиницията на заявката всеки път, когато се осъществи достъп. В изгледа не се съхранява набор от резултати  и той осъществява достъп до основната таблица при всеки достъп до изглед

Също чете
Присъединява се към Oracle
Подзаявки на Oracle
https://en.wikipedia.org/wiki/Materialized_view


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инсталиране на RAC за база данни с файлове с данни

  2. Изграждане на проблем cx_Oracle - libclntsh.so.11.1 => не е намерено

  3. Има ли система за контрол на версиите за промени в структурата на базата данни?

  4. Разбиране на разликите между API за таблици и транзакции

  5. Повтаряне на редове въз основа на стойността на колоната във всеки ред