Виведені таблиці з збереженим результатом. Частина 2, Інші СУБД, Бази даних, статті

Частина 1


Зміст



Синхронізація зі змінами у вихідних даних


Синхронізація утворених при створенні materialized view даних із змінами в базових таблицях потрібно майже завжди. Принципи синхронізації загальні для всіх категорій materialized view. Синхронізація може здійснюватися явно, або виконуватися автоматично.


Схема поновлення зберігається результату характеризується двома властивостями:



Обидва властивості можуть вказуються у фразі REFRESH пропозиції CREATE / ALTER MATERIALIZED VIEW:


CREATE MATERIALIZED VIEW ім’я [REFRESH …];


При вказівці режиму ON DEMAND додатково можна задати бажаний час внесення оновлення. Ось можливі поєднання задаються властивостей схеми поновлення:



Оновлення всіх видів можна на час заборонити, перевівши materialized view в спеціальне стан командою


ALTER MATERIALIZED VIEW ім’я NEVER REFRESH;


Явна оновлення отриманих даних


Явна оновлення результатів materialized view здійснюється через API, зверненням до процедури REFRESH зі складу системного пакету DBMS_MVIEW (стара назва – DBMS_SNAPSHOT):


EXECUTE DBMS_MVIEW.REFRESH(“jobsal”)


Перший параметр цієї процедури, LIST, може містити ім’я виведеної таблиці або їх список через кому. Крім нього у процедури є декілька необов’язкових параметрів. Серед них параметр METHOD використовується для вказівки одного з можливих для даної таблиці методу оновлення. Приклад явного оновлення з повним Перевичісленіе результату:


EXECUTE DBMS_MVIEW.REFRESH(LIST => “jobsal”, METHOD => “C”)


Інші значення параметра METHOD: A (Always, то ж, що і “C”, COMPLETE), “F” (FAST, швидке оновлення, шляхом внесення змін), “?” (Форсоване оновлення).


Явна оновлення призначене для materialized view з будь-якими встановленими режимом і методом оновлення.


Неявне оновлення даних


Відбувається в режимі ON COMMIT або ON DEMAND. Режим ON DEMAND (явно можна не вказувати) дозволяє організувати автоматичний перерахунок результату за графіком.


Метод для цих режимів оновлення можна вказувати будь-який: і FAST, і COMPLETE.


Якщо перерахунок ведеться методом FAST, то для таблиці потрібно створити журнали всіх її базових таблиць (materialized view logs). Це будуть допоміжні таблиці, накопичують відомості про зміни, що здійснюються в базових. Вони і дозволять внести необхідні поправки в дані materialized view. Після виконання процедури поновлення журнали автоматично чистяться.


Для перерахунку результату методом COMPLETE журнал не потрібен.


Журнали базових таблиць


Приклад створення журналу для вихідної (базової) таблиці:


CREATE MATERIALIZED VIEW LOG ON emp;


Після цієї команди у схемі з’явиться службова таблиця для журналізації змін до EMP і службовий тригер для актуалізації таких змін. (В останніх версіях Oracle цей тригер зроблений внутрішнім і у таблиці USER_TRIGGERS не видно).


Обсяг даних, що потрапляють в журнал, можна регулювати фразою WITH пропозиції CREATE MATERIALIZED VIEW LOG, що вставляється після фрази ON:


CREATE MATERIALIZED VIEW LOG ON ім’я WITH


Ось можливі вказівки для звичайних таблиць:



(Для більш екзотичних об’єктних таблиць можна ще вказувати WITH OBJECT ID).


Приклади:


DROP MATERIALIZED VIEW LOG ON emp;


CREATE MATERIALIZED VIEW LOG ON emp WITH ROWID;


DROP MATERIALIZED VIEW LOG ON emp;


CREATE MATERIALIZED VIEW LOG ON emp
WITH ROWID, SEQUENCE, (sal,comm);


DROP MATERIALIZED VIEW LOG ON emp;


CREATE MATERIALIZED VIEW LOG ON emp
WITH (sal,comm) INCLUDING NEW VALUES;


Різний обсяг інформації, що включається в журнал, може бути затребуваний різними схемами оновлення. Деякі схеми оновлення можуть вимагати включення до складу рядків журналу певних полів, а деякі – Ні.


Завдання схеми поновлення


Вказівка ​​обсягу обчислень при оновленні


Синтаксично для вказівки методу поновлення використовуються наступні ключові слова у фразі REFRESH:



Приклади:


DROP MATERIALIZED VIEW LOG ON emp;


CREATE MATERIALIZED VIEW LOG ON emp
WITH (sal,comm), ROWID INCLUDING NEW VALUES;


ALTER MATERIALIZED VIEW jobsal REFRESH FAST;


DROP MATERIALIZED VIEW LOG ON emp;


ALTER MATERIALIZED VIEW jobsal REFRESH COMPLETE;


Приклад показує, що ощадливе оновлення агрегують зберігається результату можливо тільки при виконанні деяких умов на повноту журнальної таблиці.


Вказівка ​​часу поновлення


Синтаксичні конструкції фрази REFRESH для вказівки часу здійснення оновлень:



Автоматичне виконання оновлень за графіком можливо тільки у випадку, якщо в складі СУБД запущені необов’язкові фонові процеси SNPn. Їх запуск досягається шляхом зазначення параметра СУБД JOB_QUEUE_PROCESSES. До версії 9 умовчанням для нього був 0.


Приклад:


CREATE MATERIALIZED VIEW LOG ON emp WITH ROWID INCLUDING NEW VALUES;


ALTER MATERIALIZED VIEW jobsal
REFRESH START WITH SYSDATE NEXT SYSDATE+1/1440;


COMMIT;


SELECT * FROM jobsal;


Приклади оновлень в режимі ON COMMIT:


DROP MATERIALIZED VIEW LOG ON emp;


CREATE MATERIALIZED VIEW emp2
REFRESH COMPLETE ON COMMIT
AS SELECT * FROM emp;


CREATE MATERIALIZED VIEW jobtotals
REFRESH ON COMMIT
AS
SELECT job, COUNT(*), COUNT(comm), SUM(comm), SUM(sal)
FROM emp GROUP BY job;


Перевірка:


UPDATE emp SET sal = 8000 WHERE ename = “SMITH”;


SELECT sal FROM emp2 WHERE ename = “SMITH”;


SELECT * FROM jobtotals;


COMMIT;


SELECT sal FROM emp2 WHERE ename = “SMITH”;


SELECT * FROM jobtotals;


Можна зауважити, що останній приклад дозволяє обійти проблему Mutating Trigger при спробі автоматичного поновлення збережених агрегатів (наприклад, сум) після поновлення полів з вихідними даними.


Інші споживчі властивості


Створення з відкладеним побудовою результату


Фраза BUILD IMMEDIATE (Умолчательная) в реченні CREATE MATERIALIZED VIEW повідомляє, що сам зберігається результат буде вирахувано автоматично негайно після створення materialized view. Фраза BUILD DEFERRED повідомляє, що обчислення зберігається результату відбудеться пізніше, при виконанні першого поновлення:


CREATE MATERIALIZED VIEW ім’я BUILD DEFERRED AS SELECT …


Створення на основі наявних даних


Фраза ON PREBUILT TABLE дозволяє сформувати зберігається результат без початкового обчислення, на основі збереженої таблиці з тією ж структурою, або незначно відрізняється. Нижче наводиться простий приклад першого варіанта:


CREATE TABLE e4 AS SELECT * FROM emp WHERE deptno = 20;


CREATE MATERIALIZED VIEW e4 ON PREBUILT TABLE
AS SELECT * FROM emp;


SELECT * FROM e4;


Зверніть увагу на те, що при такій побудові materialized view відомості про колишню самостійної ролі таблиці E4 після створення виведеної E4 не втрачаються. Вони відновляться після видалення materialized view (що неможливо при звичайному створення):


DROP MATERIALIZED VIEW e4;


SELECT * FROM e4;


Джерела даних


Подібно звичайним іменованих з’являються таблиць, materialized views можуть базуватися не тільки на збережених таблицях, але і, в свою чергу, на виведених: як views, так і materialized views.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*