sql >> Database >  >> RDS >> Oracle

wat is gematerialiseerde weergaven in orakel?

Wat zijn gematerialiseerde weergaven in orakel

Een gerealiseerde weergave is een database-object dat de resultaten van een query bevat. Het is anders dan een eenvoudige orakelweergave. In deze gematerialiseerde weergave zijn gegevens opgeslagen en wanneer u de gematerialiseerde weergave opvraagt, worden gegevens geretourneerd uit de opgeslagen gegevens. De FROM-component van de query kan tabellen, weergaven en andere gerealiseerde weergaven een naam geven. Gezamenlijk worden deze objecten hoofdtabellen (een replicatieterm) of detailtabellen (een datawarehousing-term) genoemd. Deze referentie gebruikt "hoofdtabellen" voor consistentie. De databases die de hoofdtabellen bevatten, worden de hoofddatabases genoemd.

Wanneer u een gerealiseerde weergave maakt, creëert Oracle Database één interne tabel en ten minste één Oracle-index, en kan één weergave maken, allemaal in het schema van de gerealiseerde weergave. Oracle Database gebruikt deze objecten om de gerealiseerde weergavegegevens te onderhouden. U moet over de benodigde rechten beschikken om deze objecten te maken.

Rechten vereist om gerealiseerde weergave te maken

Gebruiker moet MATERIALISEERDE WEERGAVE MAKEN om materialiserende weergave te creëren

Algemene syntaxis

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

Uitleg van elke term

BOUW [ONMIDDELLIJK | UITGESTELD] We kunnen specificeren om onmiddellijk te vullen of we kunnen UITGESTELD specificeren om te vullen bij de eerste gevraagde vernieuwing.
VERVERS [SNEL | VOLTOOI | KRACHT ] Er zijn hier drie opties. Elk hieronder uitgelegd

1) FAST :Er wordt geprobeerd om snel te vernieuwen. Als er vooraf geen gematerialiseerde weergavelogboeken aanwezig zijn bij de brontabellen, mislukt het maken.


2) COMPLEET:het tabelsegment dat de gerealiseerde weergave ondersteunt, wordt afgekapt en volledig opnieuw ingevuld met behulp van de bijbehorende query.


3)FORCE:Er wordt geprobeerd om snel te vernieuwen. Als dit niet mogelijk is, wordt een volledige verversing uitgevoerd.

OP [COMMIT | VRAAG ] We kunnen ON COMMIT specificeren zodat  refresh wordt geactiveerd door een vastgelegde gegevenswijziging in een van de afhankelijke tabellen. Of we kunnen ON DEMAND specificeren zodat   refresh wordt gestart door een handmatig verzoek of een geplande taak.
[[ENABLE | UITSCHAKELEN] QUERY HERSCHRIJVEN] De weergave komt in aanmerking voor herschrijven van zoekopdrachten
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;

Gematerialiseerde weergave vernieuwen

We kunnen de gematerialiseerde weergave vernieuwen via het PLSQL-pakket DBMS_MVIEW

Het pakket DBMS_MVIEW bevat drie API's voor het uitvoeren van vernieuwingsbewerkingen:

DBMS_MVIEW.REFRESH

Vernieuw een of meer gematerialiseerde weergaven.

DBMS_MVIEW.REFRESH_ALL_MVIEWS

Vernieuw alle gematerialiseerde weergaven.

DBMS_MVIEW.REFRESH_DEPENDENT

Vernieuw alle gerealiseerde weergaven die afhankelijk zijn van een opgegeven hoofdtabel of gerealiseerde weergave of lijst met hoofdtabellen of gerealiseerde weergaven.

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

Als u probeert om snel te vernieuwen, gebruik dan de onderstaande opdracht

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

Het zal een fout veroorzaken, omdat er geen gematerialiseerd weergavelogboek is. we zullen het gematerialiseerde weergavelogboek hieronder controleren

Met Oracle 12c heeft Oracle de nieuwe API DBMS_SYNC_REFRESH voor vernieuwing geïntroduceerd

Wat is Oracle Materialized View Log

Wanneer DML-wijzigingen worden aangebracht in hoofdtabelgegevens, slaat Oracle Database rijen op die deze wijzigingen beschrijven in het gerealiseerde weergavelogboek en gebruikt vervolgens het logboek voor gerealiseerde weergaven om gerealiseerde weergaven te vernieuwen op basis van de hoofdtabel. Dit proces wordt incrementeel of snel vernieuwen genoemd. Zonder een gerealiseerd weergavelogboek moet Oracle Database de gerealiseerde weergavequery opnieuw uitvoeren om de gerealiseerde weergave te vernieuwen. Dit proces wordt een volledige vernieuwing genoemd. Gewoonlijk kost een snelle verversing minder tijd dan een volledige verversing.

Een gerealiseerd weergavelogboek bevindt zich in de hoofddatabase in hetzelfde schema als de hoofdtabel. Op een hoofdtabel kan slechts één gematerialiseerd weergavelogboek zijn gedefinieerd. Oracle Database kan dit gematerialiseerde weergavelogboek gebruiken om snelle vernieuwingen uit te voeren voor alle snel vernieuwbare gematerialiseerde weergaven op basis van de hoofdtabel.

Als u een gerealiseerde join-weergave snel wilt vernieuwen, moet u een logboek met gerealiseerde weergaven maken voor elk van de tabellen waarnaar wordt verwezen door de gerealiseerde weergave.

Groep vernieuwen

Een vernieuwingsgroep is een verzameling van een of meer gematerialiseerde weergaven die Oracle vernieuwt in een atomaire transactie, waardoor wordt gegarandeerd dat relaties tussen de hoofdtabellen behouden blijven

Voorbeelden:

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

 

De status van de gematerialiseerde weergave controleren

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

 

Out-of-Place Refresh-optie voor gematerialiseerde weergave

Met 12c Release 1 is er een nieuwe vernieuwingsoptie beschikbaar om de prestaties en beschikbaarheid van gematerialiseerde weergavevernieuwing te verbeteren. Deze vernieuwingsoptie wordt out-of-place vernieuwen genoemd omdat het externe tabellen gebruikt tijdens het vernieuwen in tegenstelling tot de bestaande "in-place" vernieuwing die rechtstreeks wijzigingen toepast op de gematerialiseerde viewcontainertabel. De out-of-place refresh-optie werkt met alle bestaande refresh-methoden, zoals FAST ('F'), COMPLETE ('C'), PCT ('P') en FORCE ('?').

Vernieuwing op locatie is met name effectief bij het omgaan met situaties met grote hoeveelheden gegevenswijzigingen, waarbij conventionele DML-instructies niet goed schalen. Het stelt u ook in staat om een ​​zeer hoge mate van beschikbaarheid te bereiken, omdat de gerealiseerde weergaven die worden vernieuwd, kunnen worden gebruikt voor directe toegang en het herschrijven van query's tijdens het uitvoeren van vernieuwingsinstructies.

Bij niet-plaatselijke vernieuwing worden de gehele of aangetaste delen van een gerealiseerde weergave berekend in een of meer externe tabellen.

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

Verschil tussen gematerialiseerde weergave en Oracle-weergave

Zoals hierboven uitgelegd Gematerialiseerde weergaven zijn schijfgebaseerd en worden periodiek geüpdatet op basis van de querydefinitie.In de gerealiseerde weergave wordt de resultatenset opgeslagen in de gematerialiseerde weergavetabel

Beelden zijn alleen virtueel en voeren de querydefinitie uit elke keer dat ze worden geopend. In de weergave wordt geen resultatenset opgeslagen en wordt de onderliggende tabel geopend telkens wanneer de weergave wordt geopend

Leest ook
Oracle sluit zich aan
Oracle-subquery's
https://en.wikipedia.org/wiki/Materialized_view


  1. PostgreSQL - stel een standaard celwaarde in volgens een andere celwaarde

  2. Rijwaarden samenvoegen in een CSV (ook bekend als GROUP_CONCAT voor SQL Server)

  3. hoe de volledige opgeslagen procedurecode weer te geven?

  4. Hoe MySQL-tijd te converteren