Опубликован: 29.07.2008 | Уровень: специалист | Доступ: платный
Лекция 7:

Хранение архивных данных

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Аннотация: Прочитав эту лекции, вы сможете: Создавать и использовать моментальные снимки базы данных, разрабатывать эффективные таблицы хроники для вывода итогов по архивным данным, создавать и использовать индексированные представления для вывода итогов по архивным данным, создавать столбцы и таблицы аудита для отслеживания изменений в данных, использовать таблицы аудита для восстановления потерянных данных

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

Архивные данные могут принимать различные формы, от данных аудита до хранилищ данных для аналитиков. В этой лекции речь, главным образом, пойдет о методах аудита и архивации данных. Одна из главных целей этой лекции - продемонстрировать способы восстановления данных и отслеживания изменений. Как видно из приведенного выше списка задач, существует несколько способов достижения этой цели. Однако Microsoft SQL Server 2005 имеет и другие методы, которые будут выделяться на протяжении всей лекции как альтернативные. В процессе чтения просматривайте Советы, которые помогут узнать об этих альтернативных методах.

Создание моментального снимка базы данных

В SQL Server 2005 существует возможность создать моментальный снимок данных. Моментальный снимок базы данных - это, по сути, указатель места момента времени, в который он создается. В любой момент времени после этого вы можете вернуться к снимку и удалить изменения, которые были внесены в данные. Ниже приводится краткий список ситуаций, в которых моментальные снимки могут оказаться очень полезными.

  • Во время цикла разработки базы данных или связанных приложений можно создать моментальный снимок, чтобы сохранить базовый набор данных для работы. Конечно, это поможет и разработчикам, поскольку им не придется часто восстанавливать базы данных. Можно хранить несколько моментальных снимков с различными изменениями, которые позволят вернуться назад на необходимое количество шагов и не потерять работу, сделанную до этого момента.
  • Моментальные снимки можно использовать при тестировании. Вносите ли вы изменения в схему или тестируете новые технологии загрузки данных, вы можете создать моментальный снимок базы данных, как хорошо известную исходную точку, к которой можно вернуться, чтобы повторить тест.
  • Моментальные снимки можно использовать для восстановления данных из потока высокопроизводительной массовой загрузки в производственной системе. Существует много ситуаций, в которых высокопроизводительная массовая загрузка данных может сгенерировать ошибку, причем откат тоже может не произойти должным образом, в результате база данных останется в неопределенном состоянии. Раньше нужно было бы восстанавливать базу данных из резервной копии, но если перед выполнением массовой загрузки вы создали моментальный снимок, можно вернуться к этому снимку и быстро восстановить работоспособность системы.
    Совет. Моментальные снимки можно также использовать для баз данных со статическими отчетами. Например, если вам нужно создать несколько отчетов о данных на конец прошлого года, можно создать моментальный снимок данных 31 декабря или 1 января и использовать его для создания годового отчета.

    Мы видим, что моментальные снимки базы данных могут быть очень полезными в разработке, тестировании и производственной среде.

    Важно. Моментальные снимки баз данных доступны только в SQL Server 2005 Enterprise Edition и SQL Server 2005 Developer Edition. Большая часть коллектива разработчиков и тестиров-щиков могут использовать Developer Edition, но если нужно реализовать этот механизм в производственной среде, придется использовать версию SQL Server 2005 Enterprise Edition.

Создание моментального снимка базы данных

Моментальные снимки базы данных можно создать только при помощи Transact-SQL. Через интерфейс SQL Server Management Studio создать их нельзя. Ниже приводится код для создания моментального снимка базы данных Adventure Works (этот код можно найти в файлах примеров под именем Create Snapshot.sql ).

Создаем моментальный снимок
  1. В меню Start (Пуск) выберите All Programs,. Microsoft SQL Server 2005, SQL Server Management Studio (Все программы, Microsoft SQL Server 2005, Среда SQL Server Management Studio).
  2. Откройте окно New Query (Новый запрос). Чтобы создать моментальный снимок базы данных Adventure Works, введите и выполните следующий код. Внесите исправления в путь к файлу, чтобы он соответствовал вашей структуре папок.
    CREATE DATABASE AdventureWorks_SBSExample1 ON
      ( NAME = AdventureWorks_Data,
        FILENAME =
         "C:\MySnapshotData\AdventureWorks_SBSExample1.snapshot" ) 
      AS SNAPSHOT OF AdventureWorks; 
    GO

Первое, что следует отметить – это то, что инструкция CREATE представляет собой ту же инструкцию, которая используется для создания базы данных. Это значит, что пользователь, который выполняет инструкцию, должен иметь необходимые разрешения на создание баз данных на сервере, с которым он работает. Далее следует отметить, что моментальный снимок должен отражать все файлы, которые содержатся в исходной базе данных. В данном случае, база Adventure Works имеет только один файл – Adventure Works_Data. Но если в исходной базе данных используется более одного файла или группы файлов, вам придется добавить предложение NAME и FILENAME для каждого файла.

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

Последний фрагмент кода уведомляет SQL Server о том, что нужно создать моментальный снимок определенной базы данных. Не забывайте, что моментальные снимки и исходные базы данных должны размещаться на одном сервере.

Что еще следует учитывать при создании моментального снимка

Имена моментальных снимков

При назначении имени моментального снимка следует выбирать понятные имена. В нашем примере SBSExample1 –это производное от названия книги, Step-by-Step. Однако, возможно, вам покажется более удобным использовать в имени дату и время создания снимка, чтобы пользователи могли легко понять, какие данные в нем содержатся.

Имена файлов

Обычно удобно создать имя файла, исходя из имени базы данных или логического имени файла. Более того, расширение имени файла тоже может что-то означать. В Электронной документации SQL Server 2005 используется расширение .ss, а в нашем примере - расширение .snapshot. Используйте то соглашение о назначении имен, которое вам лучше подходит.

Использование дискового пространства

Необходимо учитывать размер дискового пространства, необходимого для моментального снимка. Моментальные снимки содержат только изменения исходной базы данных на момент создания снимка. Это значит, что чем больше изменений было сделано в исходной базе данных, тем больше пространства потребуется для хранения моментальных снимков с записью этих изменений. Учтите также и то, сколько снимков нужно хранить.

Возврат к моментальному снимку базы данных

Как и в случае создания моментальных снимков, чтобы вернуться к моментальному снимку базы данных, придется использовать T-SQL. Для возврата к снимку базы данных в T-SQL используется команда RESTORE DATABASE.

Предупреждение.При возврате к моментальному снимку ВСЕ изменения схемы и данных, сделанные после этого момента, будут потеряны. Если нужно отслеживать сделанные изменения, обязательно перед возвращением к моментальному снимку создайте резервную копию исходной базы данных.
Возвращаемся к моментальному снимку базы данных
  1. Сначала нужно выбрать моментальный снимок, к которому нужно вернуться. Доступные снимки можно просмотреть в SQL Server Management Studio в папке Database Snapshot (Моментальные снимки базы данных). Расположение этой папки показано на следующем рисунке:

  2. После того, как вы выбрали нужный моментальный снимок, следует удалить все моментальные снимки, которые были сделаны после выбранного снимка. После того, как возврат будет выполнен, они станут бесполезными, поэтому SQL Server не позволит вам выполнить возврат до тех пор, пока вы их не удалите. Подробную информацию об удалении моментальных снимков можно найти в разделе "Удаление моментальных снимков базы данных".
    Решение проблем.При попытке вернуться к предыдущему моментальному снимку, не удалив всех последующих, вы получите следующие ошибки:

  3. Введите и выполните следующий код, который использует команду RESTORE DATABASE, для возврата к выбранному моментальному снимку (этот код можно найти в файлах примеров под именем FromSnapshot.sql ).
    RESTORE DATABASE AdventureWorks 
    FROM DATABASE_SNAPSHOT = "AdventureWorks_SBSExample1"
    Совет. Если вы разрабатываете или тестируете базу данных, то можно сохранить этот моментальный снимок и попытаться снова вернуть изменения. Вы обнаружите, что можно возвращаться к этому моментальному снимку регулярно, и для этого требуется меньше времени, чем на восстановление данных из резервной копии, особенно если тестируется довольно большая база данных.
  4. После завершения восстановления исходную базу данных можно использовать как обычно.
    Совет. Для хранения архивных данных можно также использовать секционирование таблиц. Это можно сделать при помощи метода раздвижного окна, при котором перемещаются и архивируются группы файлов. Подробную информацию об использовании секционирования таблиц можно найти в теме "Секционирование таблиц и индексов" Электронной документации SQL Server 2005/
< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Александр Сериков
Александр Сериков
Россия, Москва, МВТУ им. Баумана Н.Э.
Юлия Захария
Юлия Захария
Россия, Московский инженерно -физический университет, 2001