Альтернативой Flashback Query является пакет

advertisement
Министерство образования РФ
ГОУ ВПО «Удмуртский государственный университет»
Физический факультет
Кафедра информатики и математики
Реферат
Тема: «Технологии Oracle FlashBack»
Выполнил:
студент гр. 38-41
Романов Евгений
Ижевск 2006.
Содержание
1.
2.
3.
4.
5.
6.
7.
8.
9.
Введение.
Технология Flashback Query.
Технология Flashback Versions Query.
Технология Flashback Transaction Query.
Технология Flashback Table.
Технология Flashback Drop.
Технология Flashback Database.
Настройки для работы с Oracle Flashback.
Список литературы
Введение
Согласно многим исследованиям, до 40% перебоев в работе приложений вызваны
ошибками операторов и пользователей. Все люди делают ошибки. Избежать этих ошибок
чрезвычайно трудно, а без опережающего планирования и использования правильной
технологии выполнить восстановление тем более трудно. Такие ошибки могут привести к
"логическому" повреждению данных или стать причиной большого времени простоя
одного или нескольких компонентов IT-инфраструктуры. В то время как относительно
просто исправить отказ отдельного компонента, обнаружение и исправление (repair)
логических повреждений данных, например, в результате случайного удаления важной
информации, представляет собой трудоёмкое действие, которое вызывает существенное
снижение бизнес-производительности. Типичными ошибками пользователей являются
случайное исключение полноценных данных в процессе удаления неверных данных или
уничтожения (drop) неправильной таблицы.
Когда человек, обладающий соответствующими привилегиями, допускает ошибку,
нужно иметь в своем арсенале инструмент, который мог бы ее исправить. В пакете Oracle
Database 10g присутствует целый букет технологий, предназначенных для этих целей, под
общим названием Flashback (Flashback – букв. - взгляд в прошлое, ретроспективный
эпизод). Эти технологии совершили настоящий переворот в области восстановления
данных. В прежние времена хватало нескольких минут, чтобы испортить базу данных, и
требовалось несколько часов, чтобы ее воскресить. Благодаря Flashback теперь и то, и
другое занимает считанные минуты. Но вместе с быстротой соседствует и поразительная
простота. В наши дни, чтобы восстановить прежнее состояние базы данных, вместо
долгой и запутанной процедуры достаточно отдать одну короткую команду. Flashback
поддерживает SQL-интерфейс для быстрого разбора и коррекции ошибок пользователя.
Технология предлагает детальный хирургически точный анализ и исправление локальных
погрешностей, таких как неверно удаленный заказ клиента. Flashback в состоянии за
короткий срок справиться и с более обширными повреждениями, например, такими как
потеря всех заказов клиентов, сделанных ими за текущий месяц. Технология Flashback
является фирменным знаком Oracle Database и позволяет выполнять откаты для объектов
любого уровня, будь то строка, транзакция, таблица, табличное пространство или вся база
данных целиком.
Технологии Oracle Flashback:
Совокупность технологий именуемых Oracle Flashback Technology включает в себя:






Oracle Flashback Query позволяет просмотреть содержание таблицы, которое
существовало в указанное время.
Oracle Flashback Version Query позволяет просмотреть все варианты всех строк,
существовавших в таблицах в указанный период времени.
Oracle Flashback Transaction Query позволяет просмотреть изменения в базе,
которые произошли в результате транзакций в течении указанного периода
времени.
Oracle Flashback Table возвращает таблицу в состояние, в котором она была в
конкретное время в прошлом.
Oracle Flashback Drop возвращает из корзины удаленную таблицу и все
связанные с ней объекты. (возвращает после команды DROP TABLE)
Oracle Flashback Database возвращает таблицу в прошлое состояние (в
конкретное время)
Flashback Query
Благодаря механизму ретроспективных запросов, впервые представленному в Oracle9i
Database, администратор или обычный пользователь могут извлекать интересующие их
данные на любой момент прошлого. Это мощное средство дает возможность прочесть и
воссоздать информацию, стертую или измененную вследствие невнимательного или
неосторожного обращения. Рассмотрим следующий пример:
SELECT * FROM ПРОДАВЦЫ AS OF TIMESTAMP
TO_TIMESTAMP('2003-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
WHERE ФИО = 'Петров Сидор Сидорович';
INSERT INTO employee
(SELECT * FROM ПРОДАВЦЫ AS OF TIMESTAMP
TO_TIMESTAMP('2003-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
WHERE ФИО = 'Петров Сидор Сидорович');
Первый запрос отображает выборку работников с именем John из таблицы EMPLOYEE
по состоянию на 9. 30 04 апреля 2004г. Вторая часть примера «занимается» тем, что
восстанавливает утраченные данные.
CREATE VIEW hour_ago AS
SELECT * FROM ПРОДАВЦЫ AS OF
TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE);
Данный пример показывает, что дату для отката можно задавать с помощью интервала. В
нашем случае для каждого запроса откат будет производиться на час назад, считая от
системного времени, т.е. когда поступил запрос.
Технология Flashback Query дает возможность работать с результатами запроса как с
множествами. Чаще всего это применятся для сравнения состояний одной и той же
таблицы в разное время, тем самым можно отследить произошедшие в ней изменения.
INSERT INTO ПРОДАВЦЫ
(SELECT * FROM ПРОДАВЦЫ AS OF
TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE))
MINUS SELECT * FROM ПРОДАВЦЫ);
В данном примере восстанавливаются утраченные данные по работникам с именем John
из таблицы EMPLOYEE. Однако, в отличие от первого примера, где также шло
восстановление данных, в данном случае восстанавливаются именно утраченные данные.
В том же случае шла перезапись всех строк, соответствующих работникам с именем John,
т.е. как существующих так и утраченных строк.
Разработчики, предусмотревшие в своих приложениях функцию автокоррекции ошибок,
основанную на предложенном алгоритме, дадут в руки конечных пользователей
инструмент для мгновенного и самостоятельного исправления ошибок, освободив, тем
самым, администраторов БД, по крайней мере, от одной лишней заботы. Работать с
Flashback Query чрезвычайно просто, поскольку база данных автоматически запоминает
всю информацию, необходимую для реконструкции данных в определенный момент
времени прошлого.
Альтернативой Flashback Query является пакет DBMS_FLASHBACK. Этот пакет
предоставляет такие же возможности, что и Flashback Query, но Flashback Query может
быть в некоторых ситуациях более подходящим.
Пакет DBMS_FLASHBACK работает как машина времени: вы можете повернуть время вспять,
выполнять запросы как – будто вы в конкретном времени в прошлом, а затем вернуться в
настоящее. Для создания запросов при использовании данного пакета не нужно
пользоваться такими командами как AS OF или VERSIONS BETWEEN.
Для пользования данными возможностями у вас должна быть привилегия EXECUTE.
Для того чтобы работать с данным паектом нужно выполнить следующие действия:
1. Вызовите DBMS_FLASHBACK.ENABLE_AT_TIME или
чтобы вернуть часы в
конкретное время в прошлом. После этого, все запросы будут извлекать
информацию, которая была текущей в указанное время.
DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER
2. Исполняйте «нормальные» запросы, т.е. без специального flashback- синтаксиса
(AS OF) . База данных автоматически обращается к указанному времени в прошлом.
Исполняйте только запросы; не пытайтесь выполнить DDL или DML операции.
3. Вызовите DBMS_FLASHBACK.DISABLE для возврата в настоящее время. (Вы должны
сначала вызвать DISABLE прежде чем снова вернуться в какое-то прошлое время).
С помощью данной технологии можно найти утерянные данные, сравнить состояние
таблиц в разное время.
Flashback Versions Query
Технология Flashback Versions Query служит для просмотра изменений, имевших место в
базе данных на уровне строк. Являясь расширением языка SQL, она помогает находить
различные версии конкретной записи таблицы в пределах указанного промежутка
времени.
Синтаксис запроса имеет следующий вид
VERSIONS {BETWEEN {SCN | TIMESTAMP} start AND end}
Каждая строка содержит псевдостолбцы метаданных о версии строки, с помощью
которых можно посмотреть какие изменения встречались в данной строке.
Таблица 1 Flashback Version Query Row Data Pseudocolumns
Имя псевдостолбца
Описание
VERSIONS_STARTSCN,
VERSIONS_STARTTIME
Starting System Change Number (SCN) or TIMESTAMP. Указывают
на время создания данной версии строки. Эти данные можно
использовать для указания (идентификации) точного времени в
прошлом для операций Flashback Table или Flashback Query.
Если значение данного поля равно NULL, то это означает, что
версия строки была создана раньше чем нижняя граница
временного интервала, указанного в операторе BETWEEN.
VERSIONS_ENDSCN,
VERSIONS_ENDTIME
SCN or TIMESTAMP, указывающие на время «исчезновения»
данной версии строки.
Если значение данного поля равно NULL, то это означает, что
данная версия строки была текущей в интервале, указанном в
запросе, либо строка была удалена (в оригинале – строка
соотносится с операцией DELETE).
VERSIONS_XID
Идентификатор транзакции, создавшей данную версию строки.
VERSIONS_OPERATION
Операции выполненные транзакцией: I
для добавления
(insertion), D для удаления (deletion) , или U для обновления
(update).
Версия - это та часть строки, которая была добавлена, удалена
или обновлена; это строка после добавления, строка до
удаления или строка, которая была обновлена.
Псевдостолбец VERSIONS_XID содержит уникальный идентификатор транзакции, которая
перевела строку в данное состояние. Он может быть использован для работы с командами
Flashback Transaction Query.
Замечание: При получении результата запроса важно знать, что данная строка
«действительна» начиная с VERSIONS_START*
включительно и до VERSIONS_END*, но
не включая данный момент времени, т.е. содержание (версия) строки действительно в
течении времени t : VERSIONS_START* <= t < VERSIONS_END*.
VERSIONS_START_TIME
------------------09-SEP-2003
VERSIONS_END_TIME
----------------25-NOV-2003
SALARY
-----10243
В данном случае зарплата была равна 10243 с 09.09.03, включительно, по 25.11.03. Но 25
ноября 2003 года зарплата уже не была равна 10243 .
Типичный запрос Flashback Versions Query выглядит следующим образом:
SELECT versions_startscn, versions_starttime,
versions_endscn, versions_endtime,
versions_xid, versions_operation,
name, salary
FROM ПРОДАВЦЫ
VERSIONS BETWEEN TIMESTAMP
TO_TIMESTAMP('2003-07-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('2003-07-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE ФИО = 'Петров Сидор Сидорович';
Результатом данного запроса будет таблица, состоящая из всех версий строк, содержащих
в столбце name имя ‘'Петров Сидор Сидорович'’, существовавших в период времени с
14.00 до 17.00 часов 18 июля 2003 года. Столбцами данной таблицы будут все
псевдостолбцы, описанные ранее, а также имя и зарплата.
Действуя в соответствии с приведенным алгоритмов, АБД всегда может выяснить как и
когда запись была изменена и кто был инициатором изменений - пользователь,
приложение или транзакция. Таким образом, администратор способен отыскать и
устранить ошибку, повлекшую за собой нарушение целостности данных. Кроме этого, у
разработчиков появляются условия для отладки программного кода.
Flashback Transaction Query
Технология Flashback Transaction Query служит для просмотра изменений, имевших место
в базе данных на уровне транзакций. Являясь расширением языка SQL, она помогает
находить все изменения, произошедшие в БД с момента запуска той или иной транзакции.
Взглянем на следующий пример:
SELECT xid, operation, start_scn,commit_scn, logon_user, undo_sql
FROM flashback_transaction_query
WHERE xid = HEXTORAW('000200030000002D');
Данная инструкция отображает список результатов транзакции, одновременно возвращая
набор инструкции SQL, которые, при желании, могут быть использованы для
преобразования строк, участвовавших в транзакции, к их первоначальному виду.
В предыдущем пункте мы рассматривали псевдостолбцы Flashback Version Query Row
Data, среди которых был идентификатор транзакции. Далее мы рассмотрим примеры,
иллюстрирующий совместную работу технологий Flashback Version Query и Flashback
Transaction Query:
1) SELECT xid, logon_user FROM flashback_transaction_query
WHERE xid IN (SELECT versions_xid FROM ПРОДАВЦЫ VERSIONS BETWEEN
TIMESTAMP
TO_TIMESTAMP('2003-07-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS') AND
TO_TIMESTAMP('2003-07-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS'));
Результатом данного запроса будет таблица, демонстрирующая изменения, имевшие
место на уровне транзакций, изменивших таблицу ПРОДАВЦЫ с 14.00 до 17.00 часов
18 июля 2003 года.
2) Далее будет представлен более детальный пример совместной работы Flashback Version
Query и Flashback Transaction Query:
В данном примере будут продемонстрированы простые изменения таблиц employee и
Departments в схеме HR.
connect hr/hr
CREATE TABLE emp
(empno number primary key, empname varchar2(16), salary number);
INSERT INTO emp VALUES (111, 'Mike', 555);
COMMIT;
CREATE TABLE dept (deptno number, deptname varchar2(32));
INSERT INTO dept VALUES (10, 'Accounting');
COMMIT;
В данный момент обе таблицы имеют по одной строке. Каждая таблица имеет только одну
версию каждой строки. Предположим, что ошибочная транзакция удалила строку с
идентификатором рабочего 111 из таблицы emp:
UPDATE emp SET salary = salary + 100 where empno = 111;
INSERT INTO dept VALUES (20, 'Finance');
DELETE FROM emp WHERE empno = 111;
COMMIT;
Впоследствии, новая транзакция поместила в таблицу emp строку с идентификатором
рабочего 111, но с новым именем.
INSERT INTO emp VALUES (111, 'Tom', 777);
UPDATE emp SET salary = salary + 100 WHERE empno = 111;
UPDATE emp SET salary = salary + 50 WHERE empno = 111;
COMMIT;
В этот момент администратор БД обнаруживает ошибку и ему необходимо разобраться в
сложившейся ситуации. Он использует следующие запросы, чтобы просмотреть строки
таблицы emp , поле empno которых
было равным или равно 111. В запросах
используются псевдостолбцы Flashback Version Query.
connect dba_name/password
SELECT versions_xid XID, versions_startscn START_SCN,
versions_endscn END_SCN, versions_operation OPERATION,
empname, salary FROM hr.emp
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
where empno = 111;
XID
---------------0004000700000058
000200030000002D
000200030000002E
3 rows selected
START_SCN END_SCN
OPERATION EMPNAME
SALARY
---------- --------- ---------- ---------- ---------113855
I
Tom
927
113564
D
Mike
555
112670
113564
I
Mike
555
Таблицу результатов нужно читать снизу вверх, т.е. верхняя строка
последнему состоянию.
соответствует
Третья строка соответствует тому, что данная запись (111, ‘ Mike’, 555) была внесена в
таблицу во время ее создания. Вторая строка показывает, что данная запись была удалена
ошибочной транзакцией. Третья строка соответствует тому, что запись (111, ‘Tom’, …)
была внесена в таблицу.
Администратор устанавливает, что «ошибочная» транзакция имела идентификатор
000200030000002D
и вызывает Flashback Transaction Query, чтобы отследить все
изменения, которые были произведены данной транзакцией.
SELECT
xid, start_scn START, commit_scn COMMIT,
operation OP, logon_user USER,
undo_sql FROM flashback_transaction_query
WHERE xid = HEXTORAW('000200030000002D');
XID
START
COMMIT OP
USER
UNDO_SQL
---------------- ---------- ------------------------------000200030000002D 195243 195244 DELETE
HR
insert into "HR"."EMP"
("EMPNO","EMPNAME","SALARY") values ('111','Mike','655');
000200030000002D 195243 195244 INSERT
where ROWID = 'AAAKD4AABAAAJ3BAAB';
HR
delete from "HR"."DEPT"
000200030000002D 195243 195244 UPDATE
HR
update "HR"."EMP"
set "SALARY" = '555' where ROWID = 'AAAKD2AABAAAJ29AAA';
000200030000002D
195243
113565
BEGIN
HR
Столбец undo_sql содержит SQL код, показывающий какие изменения были
произведены. Столбец logon_user
содержит информацию об ответственном за
транзакцию пользователе.
Администратор может быть заинтересован в знании всех изменений. В нашем примере,
администратор, с помощью следующих запросов, может посмотреть информацию о всех
транзакциях, выполненных начиная с определенного времени:
SELECT xid, start_scn, commit_scn, operation, table_name, table_owner
FROM flashback_transaction_query
WHERE table_owner = 'HR' AND
start_timestamp >=
TO_TIMESTAMP ('2002-04-16 11:00:00','YYYY-MM-DD HH:MI:SS');
XID
---------------0004000700000058
0004000700000058
0004000700000058
000200030000002D
000200030000002D
000200030000002D
6 rows selected
START_SCN
--------195245
195245
195245
195243
195243
195243
COMMIT_SCN
---------195246
195246
195246
195244
195244
195244
OPERATION
--------UPDATE
UPDATE
INSERT
DELETE
INSERT
UPDATE
TABLE_NAME
---------EMP
EMP
EMP
EMP
DEPT
EMP
TABLE_OWNER
----------HR
HR
HR
HR
HR
HR
Flashback Table
Когда встречаются программные или пользовательские ошибки, возникает необходимость
откатить одну или несколько таблиц в состояние, которое было до ошибки. Flashback
Table предоставляет администратору возможность вернуть таблицу или множество таблиц
в определенное точку в прошлом быстро, легко и не выключая базу данных. Flashback
Table возвращает таблицу в прежнее состояние с автоматическим поддерживанием
(сохранением) связанных с ней атрибутов : текущие индексы, триггеры и т.д..
Для использования возможностей Flashback Table необходимо:



Вам должны быть предоставлены привилегии FLASHBACK ANY TABLE (системная
привилегия) или FLASHBACK (на конкретную таблицу).
У вас должны быть права SELECT, INSERT, DELETE, and ALTER на данную таблицу.
«Движение» строк должно быть доступно( включено) в таблице для которой вы
вызываете FLASHBACK TABLE. Вы можете включить данную опцию с помощью
следующего SQL выражения:
ALTER TABLE table ENABLE ROW MOVEMENT;
Следующее выражение выполняет операцию FLASHBACK TABLE над таблицей employee:
FLASHBACK TABLE ПРОДАВЦЫ TO TIMESTAMP
TO_TIMESTAMP('2003-04-04 09:30:00', `YYYY-MM-DD HH24:MI:SS');
Таблица employee возвращена в состояние, в котором она была в указанное время.
Можно указать время в прошлом используя SCN:
FLASHBACK TABLE ПРОДАВЦЫ TO SCN 123456;
Далее мы рассмотрим типичную ситуацию, в которой Flashback Table оказывается
очень удобным инструментом для решения проблемы:
В 17.00 администратор заметил что запись о работнике “John” исчезла из таблицы
EMPLOYEE. Эта запись еще существовала в 14.00 этого же дня, но кто-то случайно
удалил ее в промежутке с 14.00 до настоящего времени. Администратор использует
Flashback Table, чтобы вернуть таблицу в прежнее состояние:
FLASHBACK TABLE ПРОДАВЦЫ TO TIMESTAMP
TO_TIMESTAMP('2003-04-04 14:00:00','YYYY-MM-DD HH:MI:SS');
Flashback Drop
Случайный сброс или, другими словами, случайное удаление объектов базы данных
происходило раньше, происходит сейчас и, скорее всего, будет происходить в будущем.
Сколько раз специалистам из группы поддержки пользователей Oracle приходилось
слышать фразы типа: “Странно, а мне казалось, что я удалял таблицу из тестовой базы
данных”. Пользователи спохватываются, когда становится слишком поздно и нет никакой
возможности вернуть таблицу со всеми ее индексами, триггерами и ограничениями из
небытия. Объект, утраченный однажды утрачивается безвозвратно. В случае удаления
действительно важной таблицы или объекта, например, индекса, раздела или кластера,
администратору приходится тратить уйму времени на их восстановление, рискуя потерять
результаты последних транзакций.
Flashback Drop выполняет роль страховочной сетки при сбросе объектов в Oracle
Database 10g. Когда пользователь удаляет таблицу, Flashback Drop помещает ее корзину.
Объекты хранятся в корзине до тех пор, пока пользователь окончательно не сочтет их
ненужными и пока в табличном пространстве, которому они принадлежат, остается
свободное место. Корзина представляет собой виртуальный контейнер, где содержатся
любые удаленные структуры. Открыв корзину, пользователь может достать оттуда
“выброшенную” ранее таблицу вместе с сопутствующими ей объектами. Следующая
команда возвращает таблицу и сопутствующие ей объекты в разряд активных:
FLASHBACK TABLE HR.INT_ADMIN_EMP TO BEFORE DROP;
Flashback Drop – это своеобразная кнопка отмены сброса таблицы и связанных объектов
Рассмотрим на примерах работу с данной технологией:
SQL> DROP TABLE ПРОДАВЦЫ;
После выполнения данной команды таблица и все связанные с ней объекты помещаются в
корзину. Чтобы окончательно удалить данные объекты и таблицу нужно выполнить
следующую команду:
DROP TABLE ПРОДАВЦЫ PURGE;
При помещении таблицы в корзину ей присваивается уникальное имя (с сохранением
старого). Делается это для того, чтобы избежать конфликты названий таблиц и объектов.
Содержимое корзины можно просмотреть с помощью команды SHOW RECYCLEBIN.
SQL> show recyclebin;
ORIGINAL NAME
RECYCLEBIN NAME
OBJECT TYPE DROP TIME
---------------- --------------------------------- ------------ -----------------ПРОДАВЦЫ
BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0
TABLE 2003-06-11:17:08:54
Существует два способа просмотра содержимого таблицы
View
Описание
USER_RECYCLEBIN
Позволяет пользователям посмотреть их собственные
удаленные в корзину. Синонимом является RECYCLEBIN.
DBA_RECYCLEBIN
Позволяет администратору просмотреть все удаленные объекты
SQL> SELECT object_name as recycle_name, original_name, object_type
объекты,
FROM recyclebin;
RECYCLE_NAME
-------------------------------BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0
BIN$JKS983293M1dsab4gsz/I249==$0
BIN$NR72JJN38KM1dsaM4gI348as==$0
BIN$JKJ399SLKnaslkJSLK330SIK==$0
ORIGINAL_NAME
--------------------ПРОДАВЦЫ
I_EMP_DEMO
LOB_EMP_DEMO
LOB_I_EMP_DEMO
OBJECT_TYPE
------------TABLE
INDEX
LOB
LOB INDEX
Вы можете запрашивать объекты из корзины, если



У вас есть права FLASHBACK.
У вас должны быть права, которые были необходимы для формирования запросов
к той таблице, которая была удалена.
Вы должны использовать в запросе имя объекта, которое было присвоено ему при
помещении в корзину (предпочтительнее чем оригинальное имя объекта).
Например:
SQL> SELECT * FROM "BIN$KSD8DB9L345KLA==$0";
Сейчас, я бы хотел обсудить некоторые вопросы, связанные с оригинальными именами
таблиц, помещенных в корзину.
Допустим, что мы создаем и затем удаляем таблицы с одним и тем же именем:
CREATE TABLE EMP ( ...columns ); # EMP version 1
DROP TABLE EMP;
CREATE TABLE EMP ( ...columns ); # EMP version 2
DROP TABLE EMP;
CREATE TABLE EMP ( ...columns ); # EMP version 3
DROP TABLE EMP;
Если мы захотим «вытащить» таблицу EMP из корзины, то мы можем воспользоваться
уникальным именем таблицы в корзине, а можем воспользоваться и оригинальным, т.е.
EMP.
FLASHBACK TABLE EMP TO BEFORE DROP;
В результате будет восстановлена таблица которая была удалена последней (version 3).
Oracle предоставляет возможность переименования таблицы в момент восстановления ее
из корзины (RENAME TO):
FLASHBACK TABLE "BIN$KSD8DB9L345KLA==$0" TO BEFORE DROP
RENAME TO hr.int2_admin_emp;
Итак, для того, чтобы «вытащить» все три таблицы из корзины, при этом не создав
конфликтной ситуации, нужно поступить следующим образом:
FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_3;
FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_2;
FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_1;
Flashback Database
Традиционный метод возврата базы данных Oracle к предыдущему состоянию
предполагает восстановление сохраненной версии, датируемой нужным числом. Однако
указанный процесс, как правило, занимает не один час, а иногда, и не один день,
поскольку требует не только замены базы данных ее резервной копией, но обновления ее
содержимого до той минуты, когда, собственно, и произошло разрушение данных.
Учитывая постоянный рост объемов современных БД, могут потребоваться часы и даже
дни только на то, чтобы вернуть накопившуюся гору информации на ее законное место.
Flashback Database предлагает новое решение старой проблемы. Суть его заключается в
устранении последствий, вызванных нарушением целостности данных или ошибкой
пользователя, путем быстрого отката базы данных к определенной временной отметке.
Flashback ведет журнальные файлы, где фиксируются исходные варианты каждого
измененного блока. Это чем-то напоминает непрерывную фотосъемку, с той лишь
разницей, что ее объектом является не человек, а фрагменты база данных. Когда требуется
восстановить работоспособность системы, Flashback “отматывает” журнальные файлы до
момента, непосредственно предшествующего ошибке, и извлекает только те блоки,
которые с тех пор изменились. Процедура настолько коротка, что период восстановления
сокращается с нескольких часов до считанных минут. А где быстрота, там и простота.
Чтобы вернуться к состоянию системы на 2:05 по полудни достаточно ввести однуединственную команду:
FLASHBACK DATABASE to ‘2:05 PM’
Никаких тебе магнитных лент, бесконечного ожидания или запутанных манипуляций. По
окончании работы Flashback можно открыть базу данных в режиме “только чтение” и
проверить ее содержимое. Если по Вашему мнению, Вы оказались слишком далеко от
цели, повторите попытку и так пока максимально не приблизитесь к желаемой точке.
Механизм Flashback интегрирован с функцией Data Guard, поэтому путешествовать во
времени Вы можете сразу с двумя базами данных: основной и резервной (подробности в
разделе Data Guard).
Flashback Database - это своего рода пульт дистанционного управления базой данных,
снабженный кнопками перемотки и отмены.
Настройки для работы с Oracle Flashback.
Перед тем как использовать возможности Oracle Flashback, администратору необходимо
произвести некоторые настройки в конфигурации базы данных.




Необходимо создать область на диске для хранения данных, необходимых для
выполнения операций flashback. Необходимо помнить, что чем чаще обновляются
данные , тем больше места на диске требуется.
Необходимо включить Automatic Undo Management. В особенности, важны
следующие параметры конфигурации базы данных: UNDO_MANAGEMENT,
UNDO_TABLESPACE, and UNDO_RETENTION.
Установите метку RETENTION GUARANTEE для той области, которую вы выделили
«под flashback». Это необходимо сделать для того, чтобы быть уверенным в том,
что нужные данные не будут уничтожены (UNDO_RETENTION сама по себе не
является строгой гарантией) . Если система испытывает недостаток свободного
места, то на место нужных данных могут быть записаны новые. RETENTION
GUARANTEE помогает избежать этого.
Предоставить пользователям, ролям и приложениям следующие права,
необходимые для использования возможностей flashback:
 Пакет DBMS_FLASHBACK – Права EXECUTE на DBMS_FLASHBACK для
доступа к возможностям этого пакета.
 Flashback Query and Flashback Version Query - Права FLASHBACK и SELECT на
конкретные объекты, к которым должен быть осуществлен доступ во время
запроса, или права FLASHBACK ANY TABLE для того, чтобы разрешить доступ
ко всем таблицам..
 Flashback Transaction Query – Права SELECT ANY TRANSACTION.
Список литературы
1.
2.
3.
4.
http://it.komitelecom.ru/Oracle10gR2Doc/doc
http://mordor.tengry.com/db/oracle/db101/server.101/b10734/rcmflash.htm
http://www.oracle.com/global/ru/oramag/march2004/gen_10g_flash.html
http://www.oracle.com/global/ru/oramag/may2004/gen_10g_grid1.html
Download