timestamp_to_scn
дает приблизительный результат. В любой момент времени база данных, вероятно, будет проходить через тысячи SCN, поэтому результат не может быть точным. И было бы ужасно дорого поддерживать таблицу, которая ассоциировала бы временную метку с каждым SCN, с которым когда-либо сталкивалась система. Под обложками Oracle поддерживает таблицу, которая хранит текущий SCN каждые несколько секунд и хранит эти данные в течение нескольких дней. В последних версиях гранулярность этой таблицы составляет 1 SCN каждые 3 секунды, хотя это может меняться со временем.
Когда вы вызываете timestamp_to_scn
, вы получаете SCN, который был создан в течение нескольких секунд от даты, в которой вы заинтересованы, но это никогда не будет точно, и это не будет работать вечно. Это, как правило, достаточно близко для восстановления момента времени - вы знаете, что хотите восстановить до 20 мая 2015 года в 12:05:00, но вам все равно, если вы вернетесь к состоянию на секунду или два раньше или позже. Если вы идентифицируете конкретную плохую транзакцию, которую хотите восстановить систему (или только раньше), вы не захотите использовать timestamp_to_scn
.