Каков наилучший способ сделать "снимок" базы данных Oracle, которая постоянно обновляется?

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

Typcially TIBCO обновляет кучу таблиц сразу,а затем фиксирует. Если я пройду через все таблицы, делая снимок один раз в день, я мог бы захватить данные из таблицы A до фиксации и из таблицы B после фиксации, но если A и B имеют отношение, то они больше не будут соответствовать должным образом.

Is " установить транзакцию только для чтения" путь?
например,

COMMIT
SET TRANSACTION READ ONLY
SELECT * FROM A WHERE A.ADB_UPDATEDDATE > TODAY()-1 
SELECT * FROM B WHERE B.ADB_UPDATEDDATE > TODAY()-1 
etc.
COMMIT

(сегодня синтаксис может быть неправильным, не важно!)

или есть что-то лучшее, что я могу сделать?

6 ответов


Это очень легко сделать с помощью функции Oracle под названием воспоминания. Пока вы знаете, когда была предыдущая версия (time или scn), и она находится в окне flashback, вы можете просто запросить ее.


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

Если вы используете RMAN для резервного копирования и восстановления, есть команда "дублировать базу данных" с предложением времени, которое сделает это относительно безболезненным.

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

  • экспорт группы таблиц с помощью согласованный=y вариант (более старого) exp утилита
  • используйте новую утилиту expdp с опцией flashback_time

в дополнение к предложениям dpbradley, если это только несколько не слишком больших таблиц, и у вас есть запрос flashback, вы можете создать копию таблиц, используя запрос flashback с той же метки времени.


возможно, экспорт в согласованном режиме помогает. Взгляните на http://www.dba-oracle.com/tips_oracle_export_utility.htm


вы также можете использовать снимки на основе "уровня хранения", хотя oracle, похоже, считает, что использование RMAN-лучший способ: http://www.oracle.com/technetwork/database/features/availability/rman-fra-snapshot-322251.html


прежде всего, как другие ребята сказали, есть специальные инструменты для "snapshotting" в Oracle, и лучше использовать его для задачи для меня. Но если мы посмотрим на проблему в частности, мы увидим, что это non-repeatable читает & phantom читает проблема [1], так что все дело в транзакции уровни изоляции. У нас есть