sql >> Databasteknik >  >> RDS >> Oracle

vad är materialiserade åsikter i oracle?

Vad är materialiserade vyer i oracle

En materialiserad vy är ett databasobjekt som innehåller resultaten av en fråga. Det skiljer sig från enkel orakelvy. Dessa materialiserade vyn har lagrade data och när du frågar den materialiserade vyn returnerar den data från lagrad data. FROM-satsen i frågan kan namnge tabeller, vyer och andra materialiserade vyer. Tillsammans kallas dessa objekt för mastertabeller (en replikeringsterm) eller detaljtabeller (en datalagerterm). Denna referens använder "mastertabeller" för konsekvens. Databaserna som innehåller mastertabellerna kallas masterdatabaser.

När du skapar en materialiserad vy skapar Oracle Database en intern tabell och minst ett Oracle-index och kan skapa en vy, allt i schemat för den materialiserade vyn. Oracle Database använder dessa objekt för att underhålla materialiserade vydata. Du måste ha de behörigheter som krävs för att skapa dessa objekt.

Behörigheter som krävs för att skapa materialiserad vy

Användaren måste ha SKAPA MATERIALISERAD VY att skapa materialisera vy

Allmän syntax

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

Förklaring av varje term

BYGG [OMEDELBART | UPPSKJUT] Vi kan ange att fylla i omedelbart Eller så kan vi ange DEFERRED för att fylla i vid den första begärda uppdateringen.
Uppdatera [SNABB | KOMPLETT | FORCE ] Det finns tre alternativ här. Var och en förklaras nedan

1) SNABB:En snabb uppdatering görs. Om materialiserade vyloggar inte finns mot källtabellerna i förväg misslyckas skapandet.


2) KOMPLETT:Tabellsegmentet som stöder den materialiserade vyn trunkeras och fylls på igen helt med hjälp av den associerade frågan.


3) FORCE:En snabb uppdatering görs. Om det inte är möjligt utförs en fullständig uppdatering.

PÅ [COMMIT | DEMAND ] Vi kan ange ON COMMIT så att  uppdatering utlöses av en engagerad dataändring i en av de beroende tabellerna. Eller så kan vi ange ON DEMAND så att   uppdatering initieras av en manuell begäran eller en schemalagd uppgift.
[[AKTIVERA | INAKTIVERA] OMSKRIVA FRÅGA] Vyn är kvalificerad för omskrivning av sökfrågan
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;

Materialiserad vyuppdatering

Vi kan uppdatera materialiserad vy genom PLSQL-paketet DBMS_MVIEW

Paketet DBMS_MVIEW innehåller tre API:er för att utföra uppdateringsåtgärder:

DBMS_MVIEW.REFRESH

Uppdatera en eller flera materialiserade vyer.

DBMS_MVIEW.REFRESH_ALL_MVIEWS

Uppdatera alla materialiserade vyer.

DBMS_MVIEW.REFRESH_DEPENDENT

Uppdatera alla materialiserade vyer som är beroende av en specificerad huvudtabell eller materialiserad vy eller lista med huvudtabeller eller materialiserade vyer.

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

Om du försöker göra snabbuppdatering använder du kommandot nedan

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

Det kommer att skapa fel, eftersom det inte finns någon materialiserad visningslogg. vi kommer att kontrollera materialiserad vylogg nedan

Med Oracle 12c har Oracle introducerat nytt API DBMS_SYNC_REFRESH för uppdatering

Vad är Oracle Materialized View Log

När DML-ändringar görs i huvudtabelldata lagrar Oracle Database rader som beskriver dessa ändringar i den materialiserade vyloggen och använder sedan den materialiserade vyloggen för att uppdatera materialiserade vyer baserat på huvudtabellen. Denna process kallas inkrementell eller snabb uppdatering. Utan en materialiserad vylogg måste Oracle Database köra om den materialiserade vyfrågan för att uppdatera den materialiserade vyn. Denna process kallas en fullständig uppdatering. Vanligtvis tar en snabb uppdatering kortare tid än en fullständig uppdatering.

En materialiserad vylogg finns i huvuddatabasen i samma schema som huvudtabellen. En huvudtabell kan bara ha en materialiserad vylogg definierad på sig. Oracle Database kan använda den här materialiserade vyloggen för att utföra snabbuppdateringar för alla materialiserade vyer som kan uppdateras snabbt, baserat på huvudtabellen.

För att snabbt uppdatera en materialiserad kopplingsvy måste du skapa en materialiserad vylogg för var och en av tabellerna som refereras till av den materialiserade vyn.

Uppdatera grupp

En uppdateringsgrupp är en samling av en eller flera materialiserade vyer som Oracle uppdaterar i en atomär transaktion, vilket garanterar att relationerna mellan mastertabellerna bevaras

Exempel:

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');

Hur man kontrollerar statusen för den materialiserade vyn

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

Möjlighet att uppdatera på sin plats för materialiserad vy

Med 12c Release 1 är ett nytt uppdateringsalternativ tillgängligt för att förbättra prestanda och tillgänglighet för materialiserad vyuppdatering. Det här uppdateringsalternativet kallas för out-of-place-uppdatering eftersom det använder externa tabeller under uppdateringen i motsats till den befintliga "på plats"-uppdateringen som direkt tillämpar ändringar på den materialiserade vybehållartabellen. Alternativet för uppdatering som inte är på sin plats fungerar med alla befintliga uppdateringsmetoder, såsom FAST ('F'), COMPLETE ('C'), PCT ('P') och FORCE ('?').

Out-of-place uppdatering är särskilt effektiv när du hanterar situationer med stora mängder dataändringar, där konventionella DML-satser inte skalas bra. Det gör det också möjligt för dig att uppnå en mycket hög grad av tillgänglighet eftersom de materialiserade vyerna som uppdateras kan användas för direktåtkomst och omskrivning av frågor under körningen av refresh-satser.

Vid out-of-place uppdatering, beräknas hela eller påverkade delar av en materialiserad vy till en eller flera externa tabeller.

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

Skillnaden mellan Materialized View och Oracle View

Som förklarat ovan Materialiserade vyer är diskbaserade och uppdateras regelbundet baserat på frågedefinitionen. I materialiserad vy lagras resultatuppsättningen i materialiserad vytabell

Visningar är endast virtuella och kör frågedefinitionen varje gång de öppnas. I vyn lagras ingen resultatuppsättning  och den kommer åt den underliggande tabellen varje gång vyn öppnas

Läser också
Oracle Joins
Oracle subqueries
https://en.wikipedia.org/wiki/Materialized_view


  1. NULL i MySQL (prestanda och lagring)

  2. Tabelluppslagningar i SortCL-kompatibla IRI-jobb

  3. Är PL/SQL-variabler i markörer effektivt desamma som bindningsparametrar?

  4. Sql Server int vs nvarchar jämförelse på prestanda?