powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как узнать timestamp бэкапа
42 сообщений из 42, показаны все 2 страниц
как узнать timestamp бэкапа
    #39992922
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oracle 12.2

подняли базу из бэкапа до последнего доступного архивлога.
как узнать, на какое точно время?))
в маунте SCN_TO_TIMESTAMP нету, а после open resetlogs, боюсь, что будет поздно)
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39992956
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> alter database open read only;
SQL> select scn_to_timestamp(CURRENT_SCN) from v$database;

SCN_TO_TIMESTAMP(CURRENT_SCN)
---------------------------------------------------------------------------
27-AUG-20 01.35.27.000000000 PM

SQL>  select open_mode from v$database;

OPEN_MODE
--------------------
READ ONLY
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993003
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ответ неверный(
это время open-а, а не точки, на который развернут бэкап
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993007
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexVin,

Кто мешает использовать интересующий SCN?
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993011
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexVin
ответ неверный(
это время open-а, а не точки, на который развернут бэкап


в mount CURRENT_SCN какой показывает? null?

.....
stax
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993013
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так ((

Код: plsql
1.
2.
3.
ERROR at line 1:
ORA-08181: specified number is not a valid system change number
ORA-06512: at "SYS.SCN_TO_TIMESTAMP", line 1
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993014
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в маунт 0
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993058
Тролин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS' ;

select * from V$RECOVERY_PROGRESS;

?
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993059
Тролин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS' ;

select fuzzy, status, error, recover, checkpoint_change#, checkpoint_time, count(*) from v$datafile_header group by fuzzy, status, error, recover, checkpoint_change#, checkpoint_time ;

?
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993060
Тролин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993075
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
база в опен ридонли, опен резетлогс ещё не делал

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
SQL> alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS' ;

Session altered.

SQL> select * from V$RECOVERY_PROGRESS;

no rows selected

SQL> col CHECKPOINT_CHANGE# format 9999999999999
SQL> select fuzzy, status, error, recover, checkpoint_change#, checkpoint_time, count(*) from v$datafile_header
 group by fuzzy, status, error, recover, checkpoint_change#, checkpoint_time ;

FUZZY        STATUS
------------ ----------------------------
ERROR                                                             RECOVER
----------------------------------------------------------------- ------------
CHECKPOINT_CHANGE# CHECKPOINT_TIME                 COUNT(*)
------------------ ----------------------------- ----------
NO           ONLINE

       19988875138 01-MAY-2020 08:44:43                   3

NO           ONLINE

       21589873591 12-AUG-2020 01:45:51                  42

FUZZY        STATUS
------------ ----------------------------
ERROR                                                             RECOVER
----------------------------------------------------------------- ------------
CHECKPOINT_CHANGE# CHECKPOINT_TIME                 COUNT(*)
------------------ ----------------------------- ----------


SQL> select scn_to_timestamp(21589873591) from dual;
select scn_to_timestamp(21589873591) from dual
       *
ERROR at line 1:
ORA-08181: specified number is not a valid system change number
ORA-06512: at "SYS.SCN_TO_TIMESTAMP", line 1


SQL> select to_char(max(time_dp), 'DD.MM.YYYY HH24:MI:SS') dt from sys.SMON_SCN_TIME;

DT
----------------------------------------------------------------------------
11.08.2020 20:39:42

SQL> select to_char(min(time_dp), 'DD.MM.YYYY HH24:MI:SS') dt from sys.SMON_SCN_TIME;

DT
----------------------------------------------------------------------------
06.08.2020 19:38:24
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993077
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот так чтоль? это похоже на правду

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> select scn_to_timestamp(max(scn)) dtt, max(scn) dt from sys.SMON_SCN_TIME;

DTT
---------------------------------------------------------------------------
            DT
--------------
12-AUG-20 01.39.42.000000000 AM
   21589852576



или есть ещё варианты как выбрать?
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993105
Тролин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
21589873591 12-AUG-2020 01:45:51                  42



больше похоже это

42 датафайла от 12-AUG-2020 01:45:51

там 3 датафала возможно в tablespace read only были.
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993149
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
3 штуки, это да, это pdbseed

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  List of Archived Logs in backup set 4023
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
  ---- ------- ---------- --------- ---------- ---------
  1    1145    21589820384 12-AUG-20 21589873591 12-AUG-20

  List of Archived Logs in backup set 4022
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
  ---- ------- ---------- --------- ---------- ---------
  1    1146    21589873591 12-AUG-20 21589873727 12-AUG-20



ресторено и рековерено until sequence 1146

странно, что
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select scn_to_timestamp(21589873591) from dual;
select scn_to_timestamp(21589873591) from dual
       *
ERROR at line 1:
ORA-08181: specified number is not a valid system change number
ORA-06512: at "SYS.SCN_TO_TIMESTAMP", line 1
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993233
Тролин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexVin,

А если
Код: plsql
1.
select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;



и только потом подставить в

Код: plsql
1.
select scn_to_timestamp( X ) as timestamp from dual;
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993244
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тролин
AlexVin,

А если

так ж на любой базе
select scn_to_timestamp(21589873591) from dual;
даст ошибку
мож 21589873591 не в формате сцн

.....
stax
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993261
Тролин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ORA-08181 When Select Scn_to_timestamp

Код: plsql
1.
2.
3.
4.
This is expected behavior as the SCN must be no older than 5 days as part of the current flashback database
features.

Currently, the flashback query feature keeps track of times up to a maximum of 5 days. This period reflects server uptime, not wall-clock time. You must record the SCN yourself at the time of interest, such as before doing a DELETE.



Все объяснимо.
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993274
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приекращай нести херню
Все берется из таблички SMON_SCN_TIME, которая (внезапно) тоже восстановлена из бэкапа
Т.е. все что больше -- там и ругается
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993280
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, если там коммуналка, то оно должно быть в cdb, вроде
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993304
Тролин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,
кто несет херню?
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993307
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты, дружок
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993308
Тролин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

с чего это если я привел ответ тех.поддержки. Если доступ в металинк есть в поиске ищется статья "ORA-08181 When Select Scn_to_timestamp"
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993398
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да фиолетово
Надо просто понять как работатет функция scn_to_timestamp
А так же, что у каждой БД (тут речь, естественно, не про коммуналку и не про линки) скорость роста SCN своя
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993411
Тролин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,
ты походу опять нажрался и пытаешься умничать... но гений с тебя так себе. И по вопросу ушел в лес...причем тут "рост scn у кадой БД своя..." это все знают и говорить об этом факте незачем.
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993449
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо
Расскажи как работает функция scn_to_timestamp
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39993451
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а что, я настолько часто нажираюсь, что несу чушь?
Ты только моему работодателю об этом не говори...
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994059
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сорян, дошли руки глянуть внимательнее
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> select to_char(sysdate, 'DD.MM.YYYY HH24:MI:SS') dt,
 ''||DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER, ''||current_scn, SCN_TO_TIMESTAMP(current_scn) st from v$database d;

DT
----------------------------------------------------------------------------
''||DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER
--------------------------------------------------------------------------------
''||CURRENT_SCN
--------------------------------------------------------------------------------
ST
---------------------------------------------------------------------------
31.08.2020 13:39:46
21589873590
21589873590
27-AUG-20 04.49.00.000000000 PM


21589873590 - ожидаемо)
с него - SCN_TO_TIMESTAMP - это почти дата опена в ридонли того, что восстановлено из бэкапа)

Код: plsql
1.
2.
2020-08-27T16:48:45.222346+05:00
Completed: alter database open read only



а вот это ещё один вариант оно)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> select scn_to_timestamp(max(scn)) oo, ''||max(scn) m_scn from sys.SMON_SCN_TIME;

OO
---------------------------------------------------------------------------
M_SCN
--------------------------------------------------------------------------------
12-AUG-20 01.39.42.000000000 AM
21589852576
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994299
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
итог-то какой? где достоверно смотреть достоверное время до секунд?
пробовать методом тыка?)
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994324
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе нужно посмотреть, до какого SCN можно восстановить, чтоб открыть без проблем?

Или тебе просто нужно узнать время, к которому будет относиться RESETLOGS ?

На момент восстановления у тебя архивлоги закаталогизированы (или информация о них изначально находится в восстановленном контролфайле)
А тут к тебя и V$ARCHIVED_LOG и V$BACKUP_ARCHIVELOG_DETAILS -- если ты целиком катил этот лог, то NEXT_TIME скорее всего то, что тебе нужно

А SCN_TO_TIMESTAMP, как я уже говорил, работает на основании обычной таблицы SYS.SMON_SCN_TIME, которая доступна только при открытой (в том числе в READ ONLY) БД. Ну и дальше банальная интерполяция (хотя возможно, последние 1-5-10-60 минут могут храниться и в какой-нибудь динамической вьюхе)
Да, она часто (как правило, каждую минуту, но зависит от нагрузки) обновляется, поддерживая небольшое кол-во записей (до 11g там вообще фиксированное количество строк было), где-то 5-7 дней, но при открытии в RO ты точно не перезапишешь старые (восстановленные с бэкапа) записи, поэтому время будет правильное

PS. Ну и очень похоже, что TIME_DP таки хранится в UTC
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994388
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров
Или тебе просто


просто нужно узнать точное время)
целиком катил лог 1145 (ресторе и рековер until sequence 1146)

тогда глупый вопрос:
(в архивлоге 1145 Next SCN) 21589873591 останется накачен или нет?
AlexVin
(он же в 1146 Low SCN)


current_scn = 21589873590 в развернутой из бэкапа и открытой на чтение базе на 1 меньше почему-то

в заголовках файлов 21589873591 12-AUG-2020 01:45:51

в SMON_SCN_TIME максимальный 12-AUG-20 01.39.42.000000000 AM 21589852576

TIME_DP таки хранится в UTC - похоже)

Код: plsql
1.
2.
3.
4.
5.
SQL> select to_char(l.next_time, 'DD.MM.YYYY HH24:MI:SS') dt from V$ARCHIVED_LOG l where l.sequence# = 1145;

DT
----------------------------------------------------------------------------
12.08.2020 01:45:51



так на 01.39.42 или на 01:45:51 будет база после RESETLOGS?
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994414
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде как не включается
+- 1 к SCN это там вообще какая-то чехарда (насколько помню, это обсуждалось в топике что-то типа "прыжок через resetlogs")
Кстати, в контролфайле текущий SCN увеличивается при каждой попытке открытия (есть и более радикальные способы)

В твоем случае получается что таки ближе к "01:45:51", из NEXT_TIME
Но ты мог попробовать и проинтерполировать значения из SYS.SMON_SCN_TIME на значение RESETLOGS_CHANGE# (после открытия), да или просто запросить scn_to_timestamp(resetlogs_change#) from v$database, но тут проблема, как быстро оно перезапишет содержимое таблички под актуальные данные.

Ну и на какой SCN (точно) у тебя произошел RESETLOGS ты можешь посмотреть в V$DATABASE или alert.log

Что-то я вообще перестал понимать, что именно тебе непонятно
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994425
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя там тоже иногда погоду показывают
Код: plsql
1.
2.
3.
4.
5.
tst> select resetlogs_time, resetlogs_change#, scn_to_timestamp(resetlogs_change#) from v$database;

RESETLOGS_TIME      RESETLOGS_CHANGE# SCN_TO_TIMESTAMP(RESETLOGS_CHANGE#)
------------------- ----------------- ------------------------------------------------------------------
31-08-2020 15:26:27      126823247866 30-08-2020 14:33:20.000000000


Лог RMAN DUPLICATE
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
contents of Memory Script:
{
   set until scn  126823154156;
   set newname for datafile  1 to
...
   restore
...
...
contents of Memory Script:
{
   set until time  "to_date('AUG 30 2020 14:34:15', 'MON DD YYYY HH24:MI:SS')";
   recover
...

alert.log
Код: plaintext
1.
2.
Mon Aug 31 15:25:45 2020
Incomplete Recovery applied until change 126823247865 time 08/30/2020 14:34:15


Но все-таки DUPLICATE это там, где не очень-то повлияешь на такие мелочи
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994484
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров
В твоем случае получается что таки ближе к "01:45:51", из NEXT_TIME

мне не надо ближе)
в итоге мне надо поднять базу на максимально возможное время и сказать его с точностью до секунды)
на какое время в ней данные
казалось бы просто всё
until да, не включает указанное значение как between. вроде бы)

а что в SCN_TO_TIMESTAMP чехарда, это я уже в курсе)
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994492
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexVin

не включает указанное значение как between

between включает (>= and <=)

....
stax
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994495
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, не чехарда

Я подзабыл это за давностью и ненужностью
Но именно с 10g SMON_SCN_TIME хранит базовое время/scn (time_dp/scn) для совместимости, обеспечивая точность как минимум в 5 мин +- интерполяция, дополнительно к этому хранится еще и более мелкая карта (TIM_SCN_TIME) которая позволяет хранить до 300 "уточнений" повышая точность до 1 сек.

А scn_to_timestamp(resetlogs_change#) from v$database вполне себе точное время RESETLOGS-а
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994498
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
AlexVin

until да, не включает указанное значение как between

between включает (>= and <=)

....
stax
-- Грузины лучше чем армяне
-- Чем, чем лучше?
-- Чем армяне
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994522
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров
Stax
пропущено...

between включает (>= and <=)

....
stax
-- Грузины лучше чем армяне
-- Чем, чем лучше?
-- Чем армяне


until да, не включает указанное значение как включает between ))
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994642
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров
дополнительно к этому хранится еще и более мелкая карта (TIM_SCN_TIME) которая позволяет хранить до 300 "уточнений" повышая точность до 1 сек.

TIM_SCN_TIME = TIM_SCN_MAP ?
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39994847
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, я тут немного поковырял новое содержимое SMON_SCN_TIME
Получилось примерно следущее
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
set serveroutput on
declare
	num_rows constant integer := 3;
	endianess constant number := utl_raw.machine_endian;

/*	endian_format varchar2(8);
*/
	raw_line raw(12);
	raw_piece raw(4);
	time_unix date;
	scn_wrap number;
	scn_base number;
	scn_full number;
	opts_or_thread number;
begin
/*	select endian_format into endian_format
	from v$transportable_platform t, v$database d
	where d.platform_name = t.platform_name;
*/
	for r in (select * from (select * from sys.smon_scn_time order by scn desc
				)where rownum <= num_rows) loop
		for i in reverse 1..r.num_mappings loop
			raw_line := utl_raw.substr(r.tim_scn_map, (i-1)*12+1, 12);
			time_unix := date '1970-01-01' +
				utl_raw.cast_to_binary_integer(
						utl_raw.substr(raw_line, 1, 4), endianess
								)/24/60/60;
/*			scn_base := utl_raw.cast_to_binary_integer(
						utl_raw.substr(raw_line, 5, 4), endianess);
*/
/*			raw_piece := case when endian_format='Big'
					then utl_raw.substr(raw_line, 5, 4)
					else utl_raw.reverse(utl_raw.substr(raw_line, 5, 4))
					end;
			scn_base := to_number(rawtohex(raw_piece), 'XXXXXXXX');
*/
			scn_base := utl_raw.cast_to_binary_integer(
						utl_raw.substr(raw_line, 5, 4), endianess);
			scn_base := scn_base + case when scn_base < 0
						then power(2, 32)
						else 0
						end;
			scn_wrap := utl_raw.cast_to_binary_integer(
						utl_raw.substr(raw_line, 9, 2), endianess);
			scn_full := scn_wrap * power(2, 32) + scn_base;

/*			raw_piece := case when endian_format='Big'
					then utl_raw.substr(raw_line, 11, 2)
					else utl_raw.reverse(utl_raw.substr(raw_line, 11, 2))
					end;
			opts_or_thread := to_number(rawtohex(raw_piece), 'XXXX');
*/
			opts_or_thread := utl_raw.cast_to_binary_integer(
						utl_raw.substr(raw_line, 11, 2), endianess);
			opts_or_thread := opts_or_thread + case when opts_or_thread < 0
						then power(2, 16)
						else 0
						end;

			dbms_output.put_line('. '||to_char(i, '990')||rpad(' ...', 15)||
					to_char(time_unix, 'yyyy-mm-dd hh24:mi:ss')||'  scn: '||
					to_char(scn_wrap, 'FMXXXX')||'.'||
					to_char(scn_base, 'FM0XXXXXXX')||': '||
					to_char(scn_full, 'FM9999999999999990')||' opts_or_thread:'||
					to_char(opts_or_thread, '0XXX'));
		end loop;
		time_unix := date '1970-01-01' + r.time_mp/24/60/60;
		scn_wrap := r.scn_wrp;
		scn_base := r.scn_bas;
		scn_full := r.scn;
		dbms_output.put_line(to_char(time_unix, 'yyyy-mm-dd hh24:mi:ss')||' ('||
					to_char(r.time_dp, 'yyyy-mm-dd hh24:mi:ss')||') scn: '||
					to_char(scn_wrap, 'FMXXXX')||'.'||
					to_char(scn_base, 'FM0XXXXXXX')||': '||
					to_char(scn_full, 'FM9999999999999990'));
	end loop;
end;
/

Все эти приседания с Big/Little Endian связаны с тем, что utl_raw.cast_to_binary_integer работает со знаковым INTEGER, а нужен беззнаковый -- тут либо превращать в HEX используя соответствующий порядок байт (закоментировано), либо тупо таки добавить недостающее -- кто работал с машинным представлением, тот не увидит ничего необычного
По-хорошему это надо делать со всеми значениями, но смещение от UNIX_DATE пока положительно и SCN_WRAP (у меня по крайней мере, но подозреваю, что у всех) тоже положительно, поэтому не парился :-(

Последние 2 байта названы как opts_or_thread ибо мне не понятно, что там -- после 12.2 там всегда 0 (но у меня single instance), а до этого там попадались и более другие значения, возможно просто мусор
Т.е., как правило, каждая запись генерируется раз в 5 мин, и может хранить до 100 уточнений, но в зависимости от нагрузки там может быть и 3 сек и 1 SCN
Ну и дырки от клонирования тоже вполне присутствуют -- БД после DUPLICATE из предыдущих постов
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
tst> select min(mins), max(mins), min(scns), max(scns) from
  2   (select (time_dp-lag(time_dp) over (order by scn))*24*60 mins,
  3           scn-lag(scn) over (order by scn) scns
  4    from sys.smon_scn_time)
  5  where scns is not null;

   MIN(MINS)    MAX(MINS)    MIN(SCNS)    MAX(SCNS)
------------ ------------ ------------ ------------
         .05 1499.5333333           10     95685911


На нормально работающих БД это значение лежит в районе 5 мин.


старые версииЧто еще смешнее, в 10g смещение для TIME_MP было вообще каким-то странным
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
asv> select * from v$version where rownum=1;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

asv> select distinct time_dp-(time_mp/24/60/60) from sys.smon_scn_time;

TIME_DP-(TIME_MP/24
-------------------
26-05-1987 00:00:00

asv> connect system@tst
Enter password: *******
Connected.
tst> select * from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

tst> select distinct time_dp-(time_mp/24/60/60) from sys.smon_scn_time;

TIME_DP-(TIME_MP/24
-------------------
01-01-1970 00:00:00

Это все на Solaris SPARC (Big endian)
9-ку развернуть уже сложно, не поддерживается новой соляркой :-(
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39995665
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexVin

current_scn = 21589873590 в развернутой из бэкапа и открытой на чтение базе на 1 меньше почему-то

в заголовках файлов 21589873591 12-AUG-2020 01:45:51

в SMON_SCN_TIME максимальный 12-AUG-20 01.39.42.000000000 AM 21589852576

Код: plsql
1.
2.
3.
4.
5.
SQL> select to_char(l.next_time, 'DD.MM.YYYY HH24:MI:SS') dt from V$ARCHIVED_LOG l where l.sequence# = 1145;

DT
----------------------------------------------------------------------------
12.08.2020 01:45:51



так на 01.39.42 или на 01:45:51 будет база после RESETLOGS?


после alter database open resetlogs:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> select scn_to_timestamp(resetlogs_change#) rch, ''||resetlogs_change# from v$database;

RCH
---------------------------------------------------------------------------
''||RESETLOGS_CHANGE#
--------------------------------------------------------------------------------
12-AUG-20 01.41.00.000000000 AM
21589873592


а next_time действительно не включен.
пока не резетлогнешь, не узнаешь до скольки накатили?))
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39995988
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чем checkpoint_time не подходит...
...
Рейтинг: 0 / 0
как узнать timestamp бэкапа
    #39996069
AlexVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DВА
чем checkpoint_time не подходит...

где, когда и как его посмотреть?
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как узнать timestamp бэкапа
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]