Скачиваний:
32
Добавлен:
01.04.2014
Размер:
418.3 Кб
Скачать

17.8. Снимки

Здесь будет уместно, несколько отклонившись от основной темы, обсудить понятие снимков (snapshots) [17.1]. Снимки, также называемые снимками данных, имеют мно­го общего с представлениями (но не следует путать эти понятия). Как описано в главе 4, снимок данных — это именованное производное отношение (т.е. реляционная перемен­ная), как и представление. Тем не менее, в отличие от представления, снимок реален, а не виртуален: он представлен в базе данных не только своим определением в терминах других именованных отношений, но и (по крайней мере концептуально) своими собст­венными данными. Ниже приведен пример, заимствованный из главы 4.

CREATE SNAPSHOT SC AS

( (S JOIN SP ) WHERE P# = 'P2' ) [ S#, CITY ]

REFRESH EVERY DAY;

Создание снимка во многом походит на выполнение запроса, за исключением того, что, во-первых, результат запроса хранится в базе данных под указанным именем (в при­мере это SC) как отношение, которое допускает только чтение; во-вторых, периодически (в примере — каждый день (every day)) снимок данных обновляется, т.е. текущие дан­ные аннулируются и запрос выполняется повторно, после чего результат запроса прини­мается в качестве нового значения снимка. Таким образом, снимок в примере представля­ет состояние данных, в котором они находились не более 24 часов назад.

Тонкость идеи снимков состоит в том, что многие приложения, возможно даже большинство приложений, могут использовать или даже запрашивать данные по со­стоянию на конкретный момент времени. Например, в эту категорию приложений попадают приложения для отчетности и бухгалтерского учета. Подобные приложения обычно требуют фиксирования состояния данных в нужный момент (например, в конце периода отчетности), и снимки позволяют выполнять такую фиксацию, не вли­яя на другие транзакции, обновляющие данные. Кроме того, как показано в главе 1, может понадобиться зафиксировать состояние данных большого объема для сложно­го запроса или приложения поддержки принятия решений без запрещения обнов­ляющих транзакций.

Замечание. Эта идея становится еще привлекательнее в контексте распределенных баз данных (см. главу 21).

Приведем синтаксис инструкции create snapshot:

CREATE SNAPSHOT снимок AS выражение REFRESH EVERY время_обновления ;

В этом выражении в качестве еремя_обновления можно использовать, например, month (месяц), week (неделя), hour (час), n minutes (минуты), msnday (понедельник), weekday (день недели) и т.п. Ниже показан синтаксис соответствующего выражения

DESTROY:

DESTROY SNAPSHOT СНИМОК ;

В результате этой операции снимок данных будет уничтожен (т.е. из каталога ба­зы данных будет удалено определение снимка данных).

Замечание. Операция destroy snapshot завершится неудачей, если какой-либо снимок данных или представление ссылаются в этот момент на удаляемый снимок данных. До­полнительно в определении снимка данных можно использовать операторы restricted или cascades. Детально такая возможность не будет обсуждаться в этой главе.

Соседние файлы в папке Дейтл Введ в БД