Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
RBD_END.DOC
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
548 Кб
Скачать

Ручное обновление снимков.

Необходимо вызвать процедуру REFRESH из DBMS_SNAPSHOT:

DBMS_SNAPSHOT.REFRESH(‘[схема:] имя’ [,’опция освежения’]);

Где dbms_snapshot – пакет; refresh – сама процедура; схема – схема пользователя (по умолчанию - текущая); имя – имя снимка; опция освежения – может иметь значение :

  • F – быстрое освежение;

  • C – полное освежение;

  • ? – опция освежения по умолчанию (которая указана в параметре Refresh).

Существует возможность обновления снимков, которая является обязательной для автоматического обновления. Для этого необходимо выполнить процедуру DBMS_SNAPSHOT.REFRESH_ALL. Она не обновляет снимки, которые не сконфигурированы для автоматического обновления.

Привилегии, необходимые для ручного обновления снимков:

  • ALTER ANY SNAPSHOT

  • SELECT к журналу по главной таблице.

Если ссылочная целостность введена в действие по одной главной таблице или между несколькими главными таблицами, обновлять связанные с ними снимки нужно так, чтобы ссылочная целостность распространялась на снимки (ассоциированные). При обновлении снимков нужно запретить модификацию главных таблиц (заблокировать в монопольном режиме LOCTABLE).

Связь между декларативными ограничениями и снимками.

Нельзя создавать декларативные ограничения по снимкам или их журналам. Снимки можно индексировать. Для этого нужно создать индекс по столбцу базовой таблицы снимка.

Управление журналами снимков.

Создание журнала снимка осуществляется командой:

CREATE SNAPSHOT LOG ON emp

TABLESPACE users

STORAGE (initial 10K next pctincrease 50)

PCTFREE 5;

Имя журнала формируется системой и вам не надо следить за его уникальностью.

Внутренняя реализация журнала снимка.

Oracle создает таблицу для хранения элементов ROWID и отметок времени строк, обновленных в главной таблице. Данная таблица имеет следующее имя (через него можно получить доступ к этой таблице): MLOG$_<имя главной таблицы>. ROWID физически указывает, где находится запись(строка) в БД, и представляет собой псевдостолбец.

Oracle создает триггеры строк AFTER по главной таблице, чтобы вставлять в журнал снимков ROWID и отметки времени вставляемых, обновляемых, удаляемых строк из главной таблицы. Этот триггер имеет имя TLOG$_<имя главной таблицы>.

Замечание: невозможно для главной таблицы, имеющей журнал, создать триггер AFTER. Базовая таблица (журнал) и ассоциированный триггер для журнала снимков содержится в той же схеме, что и главная таблица. Рекомендацией является совет не обновлять эти объекты. Назначайте PCTFREE=0 PCTUSED=100.

Привилегии для создания журнала снимков:

  • CREATE TABLE

  • CREATE TRIGGER

  • CREATE ANY TABLE

  • CREATE ANY TRIGGER

Строка в журнале занимает примерно 13 байтов (6 байтов – ROWID, 7 – отметка времени).

Проблемы, возникающие при работе со снимками и их журналами:

  1. Oracle автоматически отслеживает обновленные строки и удаляет старые; однако, если журнал используется несколькими снимками, Oracle не удаляет строки, пока эти строки не перестанут использоваться другими снимками; данная ситуация может возникнуть в том случае, если имеют место следующие случаи:

  • один из снимков не сконфигурирован для автоматического обновления

  • один из снимков имеет слишком большой интервал обновления

  • сбой сети помешал автоматическому обновлению одного из снимков

Средства борьбы:

  1. Обновить снимки, ассоциированные с этим журналом.

  2. Сжать журнал, удалив из него строки, необходимые лишь N- самым старым снимкам.

DBMS_SNAPSHOT.PURGE_LOG(‘ таблица‘, <количество>[,DELETE] );

“таблица” – имя главной таблицы, “количество” – указывает число снимков, обновлявшихся давно, чьи строки вы хотите удалить из журнала снимков (если вы укажете 2, то будут удалены строки двух наиболее старых снимков). Чтобы удалить из журнала все записи необходимо задать число больше 9999. Необязательный параметр DELETE гарантирует, что из журнала снимков будут удалены строки хотя бы для одного снимка.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]