Каков наилучший способ сделать "снимок" базы данных 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], так что все дело в транзакции уровни изоляции. У нас есть