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