Механизм Flashback Data Archive в базе данных Oracle

Светлана Комарова

Светлана Комарова

Автор статьи. Системный администратор, Oracle DBA. Информационные технологии, интернет, телеком. Подробнее.

Создаем архив данных таблиц с помощью Flashback Data Archive в базе данных OracleТабличное пространство отката может помочь в извлечении более старых данных с помощью различных операций ретроспективного отката, но что делать при необходимости извлечь очень старые данные, скажем, шестимесячной или годичной давности? Очевидно, что в большинстве баз данных не используются табличные пространства отката, предусматривающие хранение данных отката на протяжении столь длительного периода времени. Конечно, то, насколько далеко назад по времени можно возвращаться, зависит от размера табличного пространства отката, и от того, какой объем данных отката генерирует база данных. Задачей табличного пространства отката является оказание помощи с откатом (roll back) операторов и обеспечение согласованности операций чтения в базе данных, а не предоставление хронологических сведений обо всех изменениях в данных.

Выделять одно или более табличных пространств под хранение данных обо всех переходных изменениях, происходящих в одной или нескольких конкретных таблицах, позволяет механизм Flashback Data Archive (Архив ретроспективных данных). Включать этот механизм на уровне всей базы данных нельзя, его можно включать только на уровне конкретных таблиц. Он просто идеально подходит для хранения сведений обо всех переходных изменениях, которые происходят в любой таблице базы данных за определенный период времени. Сохранять подобные сведения может быть необходимо как для удовлетворения требований по соблюдению законодательных норм, так и для нескольких других целей, которые будут перечислены чуть позже в этой главе. В следующих разделах рассказывается о том, как настраивать и использовать механизм архивации ретроспективных данных.

 

Управление архивом Flashback Data Archive

Для создания и удаления архива ретроспективных данных можно применять операторы CREATE FLASHBACK ARCHIVE и DROP FLASHBACK ARCHIVE соответственно, а для изменения его свойств (например, периода хранения в нем данных) — оператор ALTER FLASHBACK ARCHIVE. В следующих подразделах статьи более подробно объясняется решение различных задач, касающихся его управления.

 

Создание архива Flashback Data Archive

Для создания архива ретроспективных данных служит оператор CREATE FLASHBACK ARCHIVE. Прежде чем выполнять его, нужно удостоверяться в том, что указываемое в нем табличное пространство действительно существует. В частности, при создании архива ретроспективных данных можно задавать следующие детали:

  • имя архива;
  • имя первого табличного пространства в архиве;
  • квоту, выделяемую под архив в первом табличном пространстве.
  • насколько долго база данных должна сберегать данные.

Из перечисленных четырех параметров, только два — имя первого табличного пространства и период сохранности данных — являются обязательными. Ниже приведен пример создания архива данных ретроспективного отката с именем flash1

SQL> CREATE FLASHBACK ARCHIVE flash1
TABLESPACE test_tbs
RETENTION 1 YEAR;

Этот оператор создает новый архив ретроспективных данных flash1 и гарантирует, что любые включаемые в архивацию таблицы будут отслеживаться, а любые транзакционные изменения, вносимые в данные этих таблиц — сохраняться в течение года. По истечении года эти транзакционные изменения будут автоматически удаляться, а на их месте оставаться лишь те, для которых год на данный момент еще не прошел. В следующем примере показано, как создать архив данных ретроспективного отката, способный хранить данные на протяжении трех лет. Вдобавок задается параметр QUOTA для ограничения объема пространства, которое архив может использовать в табличном пространстве test_tbs. В базе данных может поддерживаться и более одного архива данных ретроспективного отката. Поэтому в данном примере еще указан параметр DEFAULT для назначения данного архива архивом ретроспективных данных, который должен использоваться для базы данных по умолчанию. 

SQL> CREATE FLASHBACK ARCHIVE DEFAULT flash1
TABLESPACE test_tbs
QUOTA 5g
RETENTION 3 YEAR;

 

Изменение свойств архива Flashback Data Archive

Оператор ALTER FLASHBACK ARCHIVE позволяет изменять свойства архива ретроспективных данных, например, его размер или период хранения в нем архивных данных. В частности, при его помощи можно делать следующее.

  • Назначать архив ретроспективных данных архивом по умолчанию для базы данных:
      SQL> ALTER FLASHBACK ARCHIVE flash1 SET DEFAULT;
  • Добавлять в архив табличное пространство:
      SQL> ALTER FLASHBACK ARCHIVE flash1
      ADD TABLESPACE flash2 QUOTA 10G; 
  • Изменять период сохранности данных в архиве:
      SQL> ALTER FLASHBACK ARCHIVE flash1 MODIFY RETENTION 5 YEAR; 
  • Удалять все данные из архива:
      SQL> ALTER FLASHBACK ARCHIVE flash1 PURGE ALL; 
  • Удалять из архива все данные сроком старше недели:
      SQL> ALTER FLASHBACK ARCHIVE flash1
      PURGE BEFORE TIMESTAMP (SYSTIMESTAMP — INTERVAL '1' DAY); 

 

Удаление архива Flashback Data Archive

Удалять архив ретроспективных данных можно следующим оператором:

SQL> DROP FLASHBACK ARCHIVE flash1; 

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

 

Просмотр данных архива Flashback Data Archive

Для просмотра деталей о данных, которые хранятся в архиве ретроспективных данных, можно использовать перечисленные ниже представления.

  • DBA_FLASHBACK_ARCHIVE — показывает информацию о самом архиве данных ретроспективного отката.
  • DBA_FLASHBACK_ARCHIVE_TS — показывает информацию о табличных пространствах, которые обслуживают архив данных ретроспективного отката.
  • DBA_FLASHBACK_ARCHIVE_TABLES — показывает информацию о таблицах, для которых была включена функция архивации данных ретроспективного отката.

 

Включение архива Flashback Data Archive

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

SQL> CREATE TABLE test1
(name                 VARCHAR2(30),
empno                 NUMBER(4)NOT NULL,
salary                NUMBER)
FLASHBACK ARCHIVE;

В приведенном выше примере имя архива ретроспективных данных указано не было. Поэтому накапливаемые данные будут сохраняться в используемом по умолчанию архиве Flashback Data Archive. При желании указать конкретный архив Flashback Data Archive, достаточно добавить имя этого архива, как показано в следующем примере:

SQL> CREATE TABLE test1
(name                 VARCHAR2(30),
empno                 NUMBER(4) NOT NULL,
salary                NUMBER)
FLASHBACK ARCHIVE flash1;

Механизм архивирования ретроспективных данных можно также включать и для существующей таблицы, выполнив оператор ALTER TABLE, как показано ниже: 

SQL> ALTER TABLE employee FLASHBACK ARCHIVE;

Отключается механизм архивирования ретроспективных данных для таблицы с помощью такого оператора:

SQL> ALTER TABLE employee NO FLASHBACK ARCHIVE; 

Как создать архив данных таблицы через Flashback Data Archive в базе данных Oracle

 

Ограничения

Использование архива ретроспективных данных накладывает определенные ограничения на тип DDL-операторов, которые можно выполнять. В частности, в отношении таблицы, для которой был включен механизм архивирования ретроспективных данных, не разрешено выполнять DDL-операторы перечисленных ниже типов.

  • Операторы ALTER TABLE, предусматривающие удаление, переименование или изменение какого-нибудь столбца таблицы.
  • Операторы ALTER TABLE, предусматривающие выполнение операций по разбиению таблицы на разделы.
  • Операторы DROP TABLE и TRUNCATE TABLE.
  • Операторы RENAME TABLE.

 

Примеры использования архива Flashback Data Archive

Архив Flashback Data Archive можно использовать для запроса хронологических данных, ведения аудита, а также восстановления после ошибок с данными. Ниже приведены примеры, показывающие, как использовать такой архив в разных ситуациях.

 

Получение доступа к хронологическим данным

За счет использования в запросе конструкции AS_OF можно легко получить доступ к хронологическим данным, которые хранятся в архиве Flashback Data Archive:

SQL> select transaction_number, doctor_name, count
from patient_info as of
timestamp to_timestamp ('2009-01-01 00:00:00',
'YYYY-MM-DD HH23:MI:SS');

Конструкцию AS_OF можно применять для выполнения восстановления после логических ошибок. В следующем примере текущий доход сотрудника по имени Zlotkey составляет 10 500 долларов, как показывает следующий запрос:

SQL> SELECT username, salary FROM HR.EMPLOYEES
WHERE last_name='Zlotkey';
SALARY
-------
10500
SQL>

В отделе кадров случайно допускают ошибку при обновлении таблицы EMPLOYEES, повышая зарплату сотрудника Zlotkey на 50 000 вместо 500 долларов:

SQL> UPDATE hr.employees SET salary=salary+50000
WHERE last_name='Zlotkey';
1 row updated.
SQL> commit;
Commit complete.
SQL>

Предположим, что администратор баз данных узнает о допущенной при обновлении ошибке два часа спустя. Чтобы исправить ее, ему достаточно выполнить следующий оператор с использованием конструкции AS_OF

SQL> update hr.employees set salary =
(select salary from hr.employees
as of timestamp (systimestamp - interval '120' minute);
where last_name='Zlotkey')
where last_name='Zlotkey';
1 row updated.
SQL> commit;
Commit complete.
SQL>

Обратите внимание, что получать доступ или выполнять запрос к таблице хронологии, которая поддерживается в базе данных для отслеживания транзакционных изменений в данных таблиц, совершенно не требуется. Конструкция AS_OF автоматически гарантирует выполнение базой данных поиска интересующей информации в той таблице хронологии, которая поддерживается в архиве Flashback Data Archive. Конструкция SYSTIMESTAMP — INTERVAL '120' MINUTE приведет к извлечению значений, которые использовались два часа назад. В этой конструкции можно также указывать секунды, дни и месяцы, как показано в следующих примерах: 

systimestamp — interval '60' second
systimestamp — interval '7' day
systimestamp — interval '12' month

 

Генерирование отчетов

За счет получения доступа к хронологическим данным можно легко создавать отчеты, охватывающие данные из прошлого. Конструкция VERSIONS BETWEEN TIMESTAMP позволяет извлекать старые значения столбцов таблицы, как показано в следующем примере: 

SQL> SELECT * FROM patient_info
VERSIONS BETWEEN TIMESTAMP
to_timestamp('2009-01-01 00:00:00','YYYY-MM-DD HH23:MI:SS')
AND MAXVALUE
WHERE name ='ALAPATI';

Приведенный здесь запрос приведет к извлечению всех версий данных, которые выбирались за период с 1 января 2009 г. по сегодняшний день.

 

Управление жизненным циклом информации

Приложениям, предназначенным для управления жизненным циклом информации (Information Lifecycle Management — ILM), часто требуется множество версий строк таблицы за какой-то определенный срок. Конструкция VERSIONS BETWEEN TIMESTAMP позволяет извлекать все версии строки или строк за определенный период времени, как показано в следующем примере:

SQL> SELECT * FROM patient_info
VERSIONS BETWEEN TIMESTAMP
to_timestamp ('2009-01-01 00:00:00',
'YYYY-MM-DD HH24:MI:SS')
AND
to_timestamp ('2009-06-30 00:00:00',
'YYYY-MM-DD HH24:MI:SS')
WHERE name='ALAPATI';

Показанный здесь запрос приведет к извлечению всех версий строк в таблице PATIENT_INFO за период с 1 января 2009 г. по 30 июня 2009 г.

Вас заинтересует / Intresting for you:

Ищем и исправляем ошибки в баз...
Ищем и исправляем ошибки в баз... 6770 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:05
Восстановление баз данных Orac...
Восстановление баз данных Orac... 9408 просмотров Дэн Tue, 21 Nov 2017, 13:18:05
Устранение ошибок в сеансах во...
Устранение ошибок в сеансах во... 7210 просмотров reset Tue, 21 Nov 2017, 13:18:05
Исправление поврежденных блоко...
Исправление поврежденных блоко... 4540 просмотров Андрей Волков Tue, 21 Nov 2017, 13:18:05
Войдите чтобы комментировать