Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
anatoliybugaenko
Member

Откуда:
Сообщений: 96
FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP

Такой запрос возвращает данные

SELECT *
FROM table
AS OF SCN 40095610

а такой нет. Выполняется с ошибкой

ORA-01466: невозможно прочитать данные - описание таблицы изменилось

Даже если смотреть минуту назад

SELECT *
FROM table
AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '4' MINUTE);

Это может быть из-за формата. По сесси и базе стоят одинаковые форматы даты и времени.

undo_management string AUTO
undo_retention integer 216000

Размер UNDO 16G, это тестовая база и UNDO
12 апр 07, 17:55    [4013946]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
select banner from v$version;
12 апр 07, 18:36    [4014207]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
anatoliybugaenko
Member

Откуда:
Сообщений: 96
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for 64-bit Windows: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
12 апр 07, 18:40    [4014234]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
Может быть просто времени с момента создания таблицы прошло меньше 4-х минут?
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production

SQL> SET TIME ON
19:20:39 SQL> COLUMN SCN NEW_VALUE SCN;

19:20:39 SQL> DROP TABLE killme_emp;
Table dropped.

19:20:39 SQL> CREATE TABLE killme_emp
19:20:39   2  as
19:20:39   3  select * from emp WHERE ROWNUM = 0;
Table created.

19:20:39 SQL> INSERT INTO killme_emp SELECT * FROM emp;
14 rows created.

19:20:40 SQL> COMMIT;
Commit complete.

19:20:40 SQL> select dbms_flashback.get_system_change_number AS SCN from dual;

       SCN
----------
  44213109

-- Ожидание 10 секунд
19:20:40 SQL> EXEC dbms_lock.sleep(10);
PL/SQL procedure successfully completed.

19:20:50 SQL> SELECT count(*) FROM killme_emp
19:20:50   2  AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '3' MINUTE);
SELECT count(*) FROM killme_emp
                     *
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed
-- Три минуты назад этой таблицы еще не было!

19:20:50 SQL> SELECT count(*) FROM killme_emp
19:20:50   2  AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '5' SECOND);

  COUNT(*)
----------
        14
-- 5 секунд назад таблица уже была.

19:20:50 SQL> SELECT count(*) FROM killme_emp
19:20:50   2  AS OF SCN (&SCN);
old   2: AS OF SCN (&SCN)
new   2: AS OF SCN (  44213109)

  COUNT(*)
----------
        14
12 апр 07, 19:24    [4014414]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
anatoliybugaenko
Member

Откуда:
Сообщений: 96
По SCN показывает и 3 часа назад, у меня такое впечатление что неправильно вычисляется SCN по времени, посмотрел трассировкой - там есть запрос

select time_mp, scn, num_mappings, tim_scn_map
FROM sys.smon_scn_time where scn = (select max(scn) from sys.smon_scn_time where
thread=0 and orig_thread=0 and time_mp <= 619723200 )

И SCN, который он дает действительно очень старый

Вот только как преобоазовать 619723200 в дату, или time_mp это не дата?
12 апр 07, 19:54    [4014511]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
HX
Member

Откуда: Moscow
Сообщений: 2454
anatoliybugaenko
По SCN показывает и 3 часа назад, у меня такое впечатление что неправильно вычисляется SCN по времени, посмотрел трассировкой - там есть запрос

select time_mp, scn, num_mappings, tim_scn_map
FROM sys.smon_scn_time where scn = (select max(scn) from sys.smon_scn_time where
thread=0 and orig_thread=0 and time_mp <= 619723200 )

И SCN, который он дает действительно очень старый

Вот только как преобоазовать 619723200 в дату, или time_mp это не дата?


SQL> select scn_to_TIMESTAMP(TIMESTAMP_TO_SCN(current_timestamp-1)) from dual;

SCN_TO_TIMESTAMP(TIMESTAMP_TO_SCN(CURRENT_TIMESTAMP-1))
---------------------------------------------------------------------------
11-APR-07 07.58.08.000000000 PM
12 апр 07, 20:02    [4014543]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
anatoliybugaenko
Member

Откуда:
Сообщений: 96
что-то у меня этот запрос дал

17-JUN-06 07.10.27.000000000 PM

это как так? Не понимаю?
12 апр 07, 20:27    [4014618]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
anatoliybugaenko
Member

Откуда:
Сообщений: 96
select scn_to_TIMESTAMP(TIMESTAMP_TO_SCN(current_timestamp-1)), current_timestamp, SYSDATE, systimestamp from dual;

дает

17-JUN-06 07.10.27.000000000 PM	12-APR-07 07.23.06.468000 PM +02:00	12.04.2007 19:23:06	12-APR-07 07.23.06.468000 PM +02:00
12 апр 07, 20:29    [4014624]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
anatoliybugaenko
Member

Откуда:
Сообщений: 96
На других базах этот запрос возвращает то что и ожидалось

почему так - не понимаю
12 апр 07, 20:31    [4014639]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
anatoliybugaenko
Member

Откуда:
Сообщений: 96
наверно все-таки форматы неправильно настроены?
12 апр 07, 20:32    [4014643]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
HX
Member

Откуда: Moscow
Сообщений: 2454
anatoliybugaenko
наверно все-таки форматы неправильно настроены?

Я просто привел вам пример как из timestamp перейти к scn и наоброт. Легальным и более точным в 10g способом, чем запрос к sys.smon_scn_time 9i.
12 апр 07, 22:10    [4014860]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
anatoliybugaenko
Member

Откуда:
Сообщений: 96
я понял что для примера, не понял почему
запрос select scn_to_TIMESTAMP(TIMESTAMP_TO_SCN(current_timestamp-1)) from dual;
вернул июнь 2006 года (17.06.2006 19:10:27,000000000) а не 11 апреля 2007

запрос из трассировки возвращает время и SCN

select scn_to_TIMESTAMP(6432873) from dual;

тоже июнь 2006

17.06.2006 19:06:14,000000000

поэтому и flash back запрос не работает

вот только не пойму почему так - вот и подумал, что из-за формата
12 апр 07, 22:38    [4014917]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
anatoliybugaenko
Member

Откуда:
Сообщений: 96
форматы по базе

NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_LANGUAGE RUSSIAN
NLS_TERRITORY RUSSIA
NLS_CURRENCY ?.
NLS_ISO_CURRENCY RUSSIA
NLS_NUMERIC_CHARACTERS ,
NLS_CHARACTERSET CL8MSWIN1251
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD.MM.RR
NLS_DATE_LANGUAGE RUSSIAN
NLS_SORT RUSSIAN
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD.MM.RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY ?.
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_RDBMS_VERSION 10.2.0.3.0

Форматы по инстансу

NLS_LANGUAGE AMERICAN
NLS_TERRITORY CIS
NLS_SORT
NLS_DATE_LANGUAGE
NLS_DATE_FORMAT DD.MM.YYYY
NLS_CURRENCY
NLS_NUMERIC_CHARACTERS .
NLS_ISO_CURRENCY
NLS_CALENDAR
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD.MM.YYYY HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD.MM.YYYY HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY
NLS_COMP
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE

форматы по сессии

NLS_LANGUAGE AMERICAN
NLS_TERRITORY CIS
NLS_CURRENCY р.
NLS_ISO_CURRENCY CIS
NLS_NUMERIC_CHARACTERS .
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD.MM.YYYY
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD.MM.YYYY HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD.MM.YYYY HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY р.
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE

и всеравно 2006 год
подскажите почему?
12 апр 07, 23:03    [4014973]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
anatoliybugaenko
Member

Откуда:
Сообщений: 96
Подскажите, что еще можно посмотреть
16 апр 07, 15:42    [4026546]     Ответить | Цитировать Сообщить модератору
 Re: FlashBack запрос работает если писать AS OF SCN и не работает если AS OF TIMESTAMP  [new]
AI
Member

Откуда: Москва
Сообщений: 2817
Проблемы соответствия timestamp и scn есть в случае миграции базы данных с 9 на 10. Возможно, это Ваш случай. На металинке есть статейки на эту тему.
16 апр 07, 17:02    [4027231]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить