powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / set transaction isolation level 0 и insert
17 сообщений из 17, страница 1 из 1
set transaction isolation level 0 и insert
    #34610520
Не в курсе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select @@versionAdaptive Server Enterprise/12.5.3/EBF 13325 ESD#7/P/Sun_svr4/OS 5.8/ase1253/1951/64-bit/FBO/Fri Mar 24 11:00:22 2006
Как известно, конструкция типа
Код: plaintext
1.
2.
insert into #c
select * from c
set isolation  0 
не работает. А вот так
Код: plaintext
1.
2.
set transaction isolation level  0 
insert into #c
select * from c
выполняется, но действительно ли уровень изоляции при инсерте 0, неясно. Мнения разделились.
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34610734
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не в курсевыполняется, но действительно ли уровень изоляции при инсерте 0, неясно. Мнения разделились.

при чтении используется, если не указано специально, дефолтный уровень изоляции - 3.
соответственно, во временную таблицу придут закомиченные данные из таблицы С.

если нужно грязное чтение, то можно вот так попробовать:

Код: plaintext
1.
2.
3.
select *
into #c 
from c
at isolation read uncommitted
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34611392
Не в курсе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2komrad
Это я в первом посте ошибся. Там должно было быть так:
Код: plaintext
1.
2.
insert into #c
select * from c
at isolation  0 
Так вот, такой запрос не выполняется, конструкция insert into select (так же как и select into) не работает в совокупности с isolation. Заменять at isolation 0 на at isolation read uncommitted смысла нет, это ведь одно и то же.
Получается, что set transaction isolation level 0 работает только для селектов, игнорируя инсерт?
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34611832
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не в курсе2komrad
Это я в первом посте ошибся. Там должно было быть так:
Код: plaintext
1.
2.
insert into #c
select * from c
at isolation  0 
Так вот, такой запрос не выполняется, конструкция insert into select (так же как и select into) не работает в совокупности с isolation. Заменять at isolation 0 на at isolation read uncommitted смысла нет, это ведь одно и то же.
Получается, что set transaction isolation level 0 работает только для селектов, игнорируя инсерт?

чем не устраивает конструкция select ... into ... from ... ?
ни разу не слышал про "грязный" инсерт - что это такое? ;)
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34611996
Не в курсе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad Не в курсе2komrad
Это я в первом посте ошибся. Там должно было быть так:
Код: plaintext
1.
2.
insert into #c
select * from c
at isolation  0 
Так вот, такой запрос не выполняется, конструкция insert into select (так же как и select into) не работает в совокупности с isolation. Заменять at isolation 0 на at isolation read uncommitted смысла нет, это ведь одно и то же.
Получается, что set transaction isolation level 0 работает только для селектов, игнорируя инсерт
чем не устраивает конструкция select ... into ... from ... ?
ни разу не слышал про "грязный" инсерт - что это такое? ;)%) Вполне устраивает, но ведь select ... into ... from ... тоже не работает с at isolation 0. То есть
Код: plaintext
1.
2.
3.
select *
into #c 
from c
at isolation read uncommitted
выполнить невозможно!
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34612046
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю komrad прав. Что такое грязный инсерт???

set transaction isolation level 0
insert into #c
select * from c

В данном случае уровень изоляции будет влиять только на select from c
На insert может повлиять уровень изоляции в других соединениях, если вставляется не во временную таблицу.
Но у вас таблица временная, вряд ли кто-то другой с ней работает.
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34613193
Не в курсе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antandДумаю komrad прав. Что такое грязный инсерт???

set transaction isolation level 0
insert into #c
select * from c

В данном случае уровень изоляции будет влиять только на select from c
На insert может повлиять уровень изоляции в других соединениях, если вставляется не во временную таблицу.
Но у вас таблица временная, вряд ли кто-то другой с ней работает.%) Да в чём прав-то? Не понял. Он предлагает мне синтаксис, который невозможно выполнить, выдаётся ошибка.
Да, таблица временная, с ней больше никто не работает. Значит, в случае
set transaction isolation level 0
insert into #c
select * from c
всё-таки селект будет грязным?
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34613218
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы же сами написали
"А вот так
set transaction isolation level 0
insert into #c
select * from c
выполняется........."

select * from c будет грязным. Вроде как все ясно
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34613225
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не в курсе antandДумаю komrad прав. Что такое грязный инсерт???

set transaction isolation level 0
insert into #c
select * from c

В данном случае уровень изоляции будет влиять только на select from c
На insert может повлиять уровень изоляции в других соединениях, если вставляется не во временную таблицу.
Но у вас таблица временная, вряд ли кто-то другой с ней работает.%) Да в чём прав-то? Не понял. Он предлагает мне синтаксис, который невозможно выполнить, выдаётся ошибка.

синтаксис такой как оказалось не работает - мой косяк, не проверил сначала

да не про синтаксис тут имеется ввиду

Не в курсе
Да, таблица временная, с ней больше никто не работает. Значит, в случае
set transaction isolation level 0
insert into #c
select * from c
всё-таки селект будет грязным?
имеется ввиду, что грязных инсертов еще не придумали и что в данном случае будет начитка (и только она) данных методом "грязного" чтения

кстати, зачем вам на одинокой и всеми покинутой таблице isolation 0 ?
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34613268
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad
кстати, зачем вам на одинокой и всеми покинутой таблице isolation 0 ?
Да не... У него таблица с наверно не одинока.
Это у него #c одинока
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34614149
Не в курсе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antand komradкстати, зачем вам на одинокой и всеми покинутой таблице isolation 0 ?Да не... У него таблица с наверно не одинока.
Это у него #c одинокаТочно так :)
Спасибо за ответы!
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34615748
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad пишет:

> при чтении используется, если не указано специально, дефолтный уровень
> изоляции - 3.

Вообще-то в ASE по дефолту уровень - 1.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34615749
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не в курсе пишет:

> set transaction isolation level *0*
> insert into #c
> select * from c
>
> выполняется, но действительно ли уровень изоляции при инсерте 0, неясно.

Да, действует, но только на операцию чтения данных. На уровне изоляции
0 все равно обеспечивается защиа от т.н. "грязной записи" - аномалии,
возможно возникающей при одновременной записи нескольких транзакций.
Это значит, что на вставляемые записи накладываются блокировки XLock,
на уровне записей, страниц или даже всей таблицы ( в результете эскалации).
Эти блокировки должны применяться и при dirty read (он же 0),
поэтому при выполнении такого оператора уровень изоляции будет
действительно 0 . Но dirty read не означает dirty write, а меньшего
уровня изоляции ни в ASE, ни в стандарте не предусмотрено
(да он и невозможен, потому как наличие dirty write нарушает основные свойства
транзакций - DURABILITY & CONSISTENCY).
Так что от XLock на вставляемые данные вам не избавиться, если именно это
имелось в виду.

А чего хотелось достичь ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34617008
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
komrad пишет:

> при чтении используется, если не указано специально, дефолтный уровень
> изоляции - 3.

Вообще-то в ASE по дефолту уровень - 1.
Posted via ActualForum NNTP Server 1.4
мда, это я видно на работе "перегрелся" ;)
единица конечно!
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34621769
москит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad
Не в курсе
Да, таблица временная, с ней больше никто не работает. Значит, в случае
set transaction isolation level 0
insert into #c
select * from c
всё-таки селект будет грязным?
имеется ввиду, что грязных инсертов еще не придумали и что в данном случае будет начитка (и только она) данных методом "грязного" чтения

кстати, зачем вам на одинокой и всеми покинутой таблице isolation 0 ?

Начитка "грязной" не будет!
Запускаем по очереди
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
-- 1-й коннект
create table ForDirtyRead(id int)
go

insert into ForDirtyRead select  1 

select convert(varchar, getdate(),  108 ) as Start

begin tran

update ForDirtyRead set id =  2 

waitfor delay '00:02:00'

rollback tran
commit tran

select convert(varchar, getdate(),  108 ) as Finish

select id from ForDirtyRead

drop table ForDirtyRead

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
-- 2-й коннект
create table ForDirtyRead2(id int)
go
set transaction isolation level  0 

select convert(varchar, getdate(),  108 ) as Start

insert into ForDirtyRead2 select id from ForDirtyRead

select convert(varchar, getdate(),  108 ) as Finish

select * from ForDirtyRead2

drop table ForDirtyRead2

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
-- 3-й коннект
create table ForDirtyRead3(id int)
go
set transaction isolation level  1 

select convert(varchar, getdate(),  108 ) as Start

insert into ForDirtyRead3 select id from ForDirtyRead

select convert(varchar, getdate(),  108 ) as Finish

select * from ForDirtyRead3

drop table ForDirtyRead3

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
-- 4-й коннект
set transaction isolation level  0 

select convert(varchar, getdate(),  108 ) as Start

select id from ForDirtyRead

select convert(varchar, getdate(),  108 ) as Finish

и получаем:
1)
AStart07:31:58Finish07:33:58id1
2)
AStart07:32:01Finish07:33:58id1
3)
AStart07:32:04Finish07:33:58id1
4)
AStart07:32:07id2Finish07:32:07

В 2 получили то же, что и в 3, а не как в 4. Т.е. минимальный уровень изоляции при изменении все равно 1.
Это вполне логично. Запрос на чтение данных наложит разделяемые блокировки (а они накладывается независимо от уровня изоляции) и по окончании выполнения запроса(уровень 0 и 1), они снимутся. А запрос с последующим добавлением затребует блокировку на изменение таблицы, что может привести мертвой блокировке.

PS. 12.5.3
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34623678
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
москит пишет:

> Начитка "грязной" не будет!
Должна. Ты видимо что-то напутал в своем эксперименте.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
set transaction isolation level 0 и insert
    #34623998
москит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
москит пишет:

> Начитка "грязной" не будет!
Должна. Ты видимо что-то напутал в своем эксперименте.
Posted via ActualForum NNTP Server 1.4

Запусти 1, а потом 2.
Второй хоть и имеет уровент изоляции 0, будет ждать первого, а грязно не прочитает !
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / set transaction isolation level 0 и insert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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