Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / START SCN для SELECT / 13 сообщений из 13, страница 1 из 1
28.05.2018, 13:11
    #39651046
MaXie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
Доброго времени суток.

Где можно увидеть значение SCN(START SCN), на момент которого выполнен запуск обычного SELECT запроса(не DML)?
Для DML запросов, насколько я понимаю, значение START SCN можно увидеть в V$TRANSACTION.

Спасибо всем кто откликнется.
...
Рейтинг: 0 / 0
29.05.2018, 09:16
    #39651501
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
...
Рейтинг: 0 / 0
29.05.2018, 09:41
    #39651521
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
MaXieДля DML запросов, насколько я понимаю, значение START SCN можно увидеть в V$TRANSACTION.Понимание неправильное. В одной транзакции может быть много DML-ей и у каждого свой SCN.
Этот SCN - это свойство курсора.


Staxс гугля, не подойдет?Ты не понял вопроса.
...
Рейтинг: 0 / 0
29.05.2018, 10:43
    #39651584
MaXie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
Stax, спасибо за отклик.

Необходим SCN, на момент запуска активного запроса, а не "текущий"("current") на данный момент SCN.

Насколько я понимаю, серверный процесс где то должен хранить это значение, т.к. именно по нему("стартовому" значению SCN) определяет момент, на который, в случае необходимости, будет выполнять восстановление блоков данных, измененных за время выполнения запроса(" консистентное чтение ").
Или другими словами, данные, возвращаемые запросом, должны быть согласованы по времени и соответствовать моменту запуска запроса, а момент запуска запроса определяется текущим( на момент запуска ) SCN.

Возможно ли как то "увидеть" это значение SCN для уже выполняющегося запроса?
...
Рейтинг: 0 / 0
29.05.2018, 10:52
    #39651595
MaXie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
Elic, все верно! Вы правильно поняли мой вопрос. :)

авторВ одной транзакции может быть много DML-ей и у каждого свой SCN.

Насколько я понимаю, это "стартовый" SCN для транзакции - SCN, к которому, в случае сбоя или ROLLBACK, будет выполнен откат транзакции.
Есть ли нечто подобное для обычных SELECT запросов(не DML)?
...
Рейтинг: 0 / 0
29.05.2018, 11:25
    #39651628
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
MaXieЕсть ли нечто подобноеНичего подобного в твоём понимании нет и у DML.
Ещё раз:
ElicЭтот SCN - это свойство курсора.И "достать" его вряд ли получится.

А тебе это зачем?
...
Рейтинг: 0 / 0
29.05.2018, 11:28
    #39651633
MaXie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
В книге Льюиса "Oracle Core: Essential Internals for DBAs and Developers" есть следующее утверждение:
автор "Every process that can access the SGA can read and modify the SCN. Typically, processes read the current value of the location at start of each query or transaction (through a routine named kcmgss—Get Snapshot SCN), ..."

Возможно конечно "трудности перевода" и к SELECT это не имеет отношения.
...
Рейтинг: 0 / 0
29.05.2018, 11:40
    #39651643
MaXie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
Elic,

авторА тебе это зачем?
каким образом в этом случае выполняется "консистентное чтение" блоков при выполнении запросов? Ведь блоки должны быть восстановлены на момент запуска запроса.

Есть "долгоиграющий" запрос, который в самом конце своего выполнения обращается к таблице Tn . С момента запуска запроса, данные в блоках таблицы были изменены и зафиксированы(в заголовках блоков указан более "старший" SCN, нежели SCN на момент запуска запроса). Запрос прочитает блоки таблицы Tn , откатит изменения в блоках до SCN своего "старта", после чего прочтет CR-блоки и вернет конечный набор данных.

Если заблуждаюсь, просьба поправить. )
...
Рейтинг: 0 / 0
29.05.2018, 11:41
    #39651645
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
MaXieВозможно конечно "трудности перевода"Скорее неадекватность восприятия.

Ещё раз:
ElicА тебе это зачем?
...
Рейтинг: 0 / 0
29.05.2018, 11:43
    #39651648
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
MaXieЕсли заблуждаюсь, просьба поправить. )В целом, правильно. Но никак не объясняет желания
MaXieувидеть значение SCN
...
Рейтинг: 0 / 0
29.05.2018, 12:34
    #39651700
MaXie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
авторНо никак не объясняет желания

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table tbl1(f number);

create function f_sleep(p_sec number) return varchar2
is
begin
    dbms_lock.sleep(p_sec);
    return 'Y';
end;

insert into tbl1 values(1);

commit;



Далее из одной сессии запускаем запрос №1 :
Код: sql
1.
2.
3.
4.
5.
6.
update tbl1 
set f = 2 
where f = 1 
    and f_sleep(20) = 'Y';

commit;



Через 10 секунд из другой сессии запускаем запрос №2 :
Код: sql
1.
2.
3.
4.
5.
update tbl1 
set f = 3 
where f = 1;

commit;



Дожидаемся завершения обоих запросов и смотрим что в таблице:
Код: sql
1.
select * from tbl1;



Получаем:
Код: plaintext
1.
2.
F
-
3

Получается, что несмотря на то, что запрос №1 был запущен раньше(с предположительно "меньшим" SCN), чем запрос №2 , данные для обновления он сформировал на момент "позже", чем момент запуска запроса №2 .

Правильно ли я понимаю, что в момент запуска запроса №1 , у него был один "стартовый" SCN, после чего его SCN еще раз изменился, в следствии повторного запуска запрос №1 ?
...
Рейтинг: 0 / 0
29.05.2018, 12:37
    #39651704
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
...
Рейтинг: 0 / 0
29.05.2018, 12:46
    #39651709
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
START SCN для SELECT
MaXieПолучается, что несмотря на то, что запрос №1 был запущен раньше(с предположительно "меньшим" SCN), чем запрос №2 , данные для обновления он сформировал на момент "позже", чем момент запуска запроса №2 .

Правильно ли я понимаю, что в момент запуска запроса №1 , у него был один "стартовый" SCN, после чего его SCN еще раз изменился, в следствии повторного запуска запрос №1 ?А насчет этого поискать [по форуму] по слову "миниоткаты", "consistent write"
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / START SCN для SELECT / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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