Как использовать метку времени для scn и Scn для метки времени в Oracle?

У меня это в результате запрос:

select cast(to_date(a.start_time,'mm/dd/yyyy hh:mi:ss pm') as timestamp) date_of_call,
ora_rowscn from calling_table a where rownum <= 10;

       DATE_OF_CALLING          ORA_ROWSCN

26-JUL-13 12.29.28.000000000 PM 8347567733892
26-JUL-13 12.29.35.000000000 PM 8347567733892
26-JUL-13 12.29.35.000000000 PM 8347567733892
26-JUL-13 12.29.38.000000000 PM 8347567733892
26-JUL-13 12.29.44.000000000 PM 8347567733892
26-JUL-13 12.29.47.000000000 PM 8347567733892
26-JUL-13 12.29.48.000000000 PM 8347567733892
26-JUL-13 12.29.48.000000000 PM 8347567733892
26-JUL-13 12.29.48.000000000 PM 8347567733892
26-JUL-13 12.29.56.000000000 PM 8347567733892

но когда я пытаюсь преобразовать эту метку времени в scn, используя функцию timestamp_to_scn, Я получаю следующую ошибку:

ORA-08180: моментальный снимок не найден на основе указанного времени ORA-06512: at " SYS.TIMESTAMP_TO_SCN", строка 1 08180. 00000 - " моментальный снимок не найден на основе указанного времени" * Причина: не удалось сопоставить время с SCN из таблицы сопоставления. * Действие: попробуйте использовать больший время.

и когда я использую scn_to_timestamp на ora_rowscn для преобразования этого столбца в метку времени, я получаю следующую ошибку:

ORA-08181: указанный номер не является допустимым номером изменения системы ORA-06512: at " SYS.SCN_TO_TIMESTAMP", строка 1 08181. 00000 - " указанный номер не является допустимым номером изменения системы" * Причина: предоставленный scn был за пределами допустимого scn. * Действие: используйте допустимый scn.

что я делаю не так?

2 ответов


вы пытаетесь заглянуть слишком далеко. Вы можете конвертировать только в и из SCNs, которые находятся в окне повтора/flashback, поддерживаемом вашей системой. Как только изменения стареют, то отображение теряется.

Это объясняется документации:

связь между SCN и меткой времени при создании SCN запоминается базой данных в течение ограниченного периода времени. Этот период является максимумом автоматически настроенного периода хранения отмены, если база данных работает в режиме автоматического управления отменой, и время хранения всех архивов flashback в базе данных, но не менее 120 часов. Время устаревания ассоциации истекает только тогда, когда база данных открыта. Ошибка возвращается, если SCN, указанный для аргумента SCN_TO_TIMESTAMP слишком старый.

имейте в виду, что они являются частью внутреннего механизма Oracle и поэтому имеют ограниченное использование для нас; хотя они полезны для запросов flashback конечно-опять в том же окне.


установите UNDO_MANAGEMENT в AUTO и UNDO_RETENTION в значение, которое будет охватывать период вашего самого длинного запроса назад во времени. Также установите гарантию хранения, чтобы предотвратить перезапись отмены.

для Oracle 10g вы не можете flashback дольше 5 дней. Это жестко ограничить. Для Oracle 11g нет никаких ограничений.