Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Установка ISOLATION LEVEL по умолчанию для MSSQL 2000. [D7, MSSQL]


Страницы:   1 2

supervk ©   (2006-05-03 10:07:00) 

Использую связку: Delphi - BDE - драйвер "SQL Server" - MSSQL 2000

Есть ли возможность установить ISOLATION LEVEL по умолчанию для базы или всего сервера целиком, а может как нибудь настроить драйвер или BDE, чтобы при соединении с базой не надо было каждый раз устанавливать (прописывать в программе):
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ?
Если есть, то как это сделать?


supervk   (2006-05-06 09:14:00) [1]


> Nikolay M. c   (04.05.06 15:08) [20]
> То, что программа не моя.
> И это выясняется к 19 посту... :(

Прошу прощения, что так получилось.

Но я старался не загружать вопрос лишней информацией, к тому же в таких случаях мне обычно советуют обратиться к разработчикам, рассказывают, что программа не предназначена ... и т.д. и т.п.


Nikolay M.   (2006-05-04 15:08:00) [2]


> То, что программа не моя.


И это выясняется к 19 посту... :(


supervk   (2006-05-04 13:31:00) [3]


> Nikolay M. ©   (04.05.06 13:08) [18]
> До сих пор не понимаю, что мешает самостоятельно выполнить
> нужный запрос и установить необходимый уровень изоляции.

То, что программа не моя.


Nikolay M.   (2006-05-04 13:08:00) [4]


> И хрен подкрутишь этот уровень по умолчанию.


До сих пор не понимаю, что мешает самостоятельно выполнить нужный запрос и установить необходимый уровень изоляции.


supervk   (2006-05-04 11:43:00) [5]

Ну так вот, в моём случае и получается проблема - пока запускаются явные транзакции  - уровень изоляции устанавливается, как прописано в TDataBase.TransIsolation, т.е. READ UNCOMMITTED и всё работает как и должно. А при неявных транзакциях операции выполняются на уровне, установленном в SQL сервере по умолчанию, т.е. ReadCommitted и нихрена не работает. И хрен подкрутишь этот уровень по умолчанию.


supervk   (2006-05-04 11:35:00) [6]


> Ужас. Туда я не заглядывал. Возможно, это работает потому
> что, например, я использую _ODBC_ драйвер.

Нет. Попробовал родной драйвер BDE ("MSSQL") - тоже работает, переключается в READ UNCOMMITTED.


supervk   (2006-05-04 11:21:00) [7]


> Nikolay M. ©   (04.05.06 10:27) [14]
> Все правильно понимаешь.
> Кстати, хоть в хелпе и написано, что
> Sybase, MS-SQL tiDirtyRead          tiReadCommitted
>                      tiReadCommitted   tiReadCommitted
>                      tiRepeatableRead  Not supported
> однако на практике SET TRANSACTION ISOLATION LEVEL выставляется
> в каждом случае правильный.

Ужас. Туда я не заглядывал. Возможно, это работает потому что, например, я использую _ODBC_ драйвер.


Nikolay M.   (2006-05-04 10:27:00) [8]


> supervk ©   (04.05.06 04:28) [13]


Все правильно понимаешь.
Кстати, хоть в хелпе и написано, что

Sybase, MS-SQL tiDirtyRead           tiReadCommitted
                     tiReadCommitted   tiReadCommitted
                     tiRepeatableRead  Not supported


однако на практике SET TRANSACTION ISOLATION LEVEL выставляется в каждом случае правильный.


supervk   (2006-05-04 04:28:00) [9]


> Nikolay M.
> > Johnmen ©   (03.05.06 13:23) [9]
> > Про монопольный доступ не понял.
> > БДЕ сама "выставит" уровень, вызвав соотв.функцию клиентской
> > длл.
> Именно, и я о том же. В лучшем случае это "умение" сведется
> к вызову того же SET TRANSACTION ISOLATION, но этого, судя
> по [8], вообще не произойдет.

Именно к этому оно и сведётся. При начале явной транзакции (TDatabase.StartTransaction) происходит вызов SET TRANSACTION ISOLATION LEVEL. Собственно, как я понимаю, так и должно быть. Этим и обеспечивается соответствующий уровень изоляции.


supervk   (2006-05-04 04:19:00) [10]

Nikolay M. ©  
> Что значит "в BDE"? БДЕ - это способ доступа к данным, за
> уровень изоляции отвечает сервер, а не компоненты доступа.

Но BDE, например, могла бы установить соответствующий уровень изоляции для своего соединения с MSSQL после его установки.


supervk   (2006-05-04 04:06:00) [11]

Nikolay M.
Что значит "в BDE"? БДЕ - это способ доступа к данным, за уровень изоляции отвечает сервер, а не компоненты доступа.
Вопрос аналогичен "можно ли в БДЕ включить лампочку".

Например, в параметре InterBase есть DRIVERFLAGS, установив который, можно поменять уровень изоляции по умолчанию.


Nikolay M.   (2006-05-03 13:34:00) [12]


> Johnmen ©   (03.05.06 13:23) [9]
> Про монопольный доступ не понял.
> БДЕ сама "выставит" уровень, вызвав соотв.функцию клиентской
> длл.


Именно, и я о том же. В лучшем случае это "умение" сведется к вызову того же SET TRANSACTION ISOLATION, но этого, судя по [8], вообще не произойдет.


Johnmen   (2006-05-03 13:23:00) [13]


> Nikolay M. ©   (03.05.06 12:14) [7]


Про монопольный доступ не понял.
БДЕ сама "выставит" уровень, вызвав соотв.функцию клиентской длл.

А впрочем, ха, так ха, хоть тыщу раз...


isasa   (2006-05-03 13:19:00) [14]

А как же это? :)
Help D6

TDatabase.TransIsolation

Specifies the transaction isolation level for transactions managed by the Borland Database Engine (BDE).

type TTransIsolation = (tiDirtyRead, tiReadCommitted, tiRepeatableRead);
property TransIsolation: TTransIsolation;

Server               Specified Level     Actual Level
...
Sybase, MS-SQL tiDirtyRead           tiReadCommitted
                      tiReadCommitted   tiReadCommitted
                      tiRepeatableRead  Not supported
...


Nikolay M.   (2006-05-03 12:14:00) [15]


> Johnmen ©   (03.05.06 11:35) [6]
> БДЕ вполне может управлять уровнем изоляции тр-ий.


И как это будет в случае клиент-сервера? БДЕ само получит монопольный доступ к .mdf и .ldf фалам и само же выполнит запрос на необходимом уровне изоляции? 3 раза ха.
Речь здесь, естественно, не о том, как БДЕ умеет рулить локальными парадоксовскими файликами.


Johnmen   (2006-05-03 11:35:00) [16]


> Nikolay M. ©   (03.05.06 11:24) [5]


Твоя неправда про БДЕ. Про лампочку - правда...
БДЕ вполне может управлять уровнем изоляции тр-ий.


Nikolay M.   (2006-05-03 11:24:00) [17]


> supervk ©   (03.05.06 10:43) [2]
> А в BDE нельзя включить необходимый уровень изоляции?


Что значит "в BDE"? БДЕ - это способ доступа к данным, за уровень изоляции отвечает сервер, а не компоненты доступа.
Вопрос аналогичен "можно ли в БДЕ включить лампочку".


sniknik   (2006-05-03 10:58:00) [18]

в БДЕ много чего не поддерживается... например сама MSSQL 2000... гарантировано и проверялось только для версии 6.5. так что использование на свой страх и риск. (нового с ним лучше не начинать)


Johnmen   (2006-05-03 10:48:00) [19]

В БДЕ нет. Грязное чтение не поддерживается. По кр. мере для MSSQL.


supervk   (2006-05-03 10:43:00) [20]

А в BDE нельзя включить необходимый уровень изоляции?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо