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

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

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


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

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

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

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

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

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

А тебе это зачем?
...
Рейтинг: 0 / 0
START SCN для SELECT
    #39651633
MaXie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В книге Льюиса "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
START SCN для SELECT
    #39651643
MaXie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

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

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

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

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

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

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


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