Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: CL | DM;

Вниз

Установка ISOLATION LEVEL по умолчанию для MSSQL 2000.   Найти похожие ветки 

 
supervk ©   (2006-05-03 10:07) [0]

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

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


 
Nikolay M. ©   (2006-05-03 10:14) [1]


> Есть ли возможность установить ISOLATION LEVEL по умолчанию
> для базы или всего сервера целиком


Нет, по крайней мере для 2000.


> чтобы при соединении с базой не надо было каждый раз устанавливать
> (прописывать в программе):


Религия не позволяет выполнить это один раз при установке соединения?
Вообще, если не позволяет, то это правильная религия. Программист каждый раз должен отдавать себе отчет, что именно он читает и на каком уровне изоляции. За такой пофигизм к незакомиченным данным пользователи рано или поздно побьют.


 
supervk ©   (2006-05-03 10:43) [2]

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


 
Johnmen ©   (2006-05-03 10:48) [3]

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


 
sniknik ©   (2006-05-03 10:58) [4]

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


 
Nikolay M. ©   (2006-05-03 11:24) [5]


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


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


 
Johnmen ©   (2006-05-03 11:35) [6]


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


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


 
Nikolay M. ©   (2006-05-03 12:14) [7]


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


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


 
isasa ©   (2006-05-03 13:19) [8]

А как же это? :)
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
...


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


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


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

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


 
Nikolay M. ©   (2006-05-03 13:34) [10]


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


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


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

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

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


 
supervk ©   (2006-05-04 04:19) [12]

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

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


 
supervk ©   (2006-05-04 04:28) [13]


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

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


 
Nikolay M. ©   (2006-05-04 10:27) [14]


> 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 11:21) [15]


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

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


 
supervk ©   (2006-05-04 11:35) [16]


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

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


 
supervk ©   (2006-05-04 11:43) [17]

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


 
Nikolay M. ©   (2006-05-04 13:08) [18]


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


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


 
supervk ©   (2006-05-04 13:31) [19]


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

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


 
Nikolay M. ©   (2006-05-04 15:08) [20]


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


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


 
supervk ©   (2006-05-06 09:14) [21]


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.07.02;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.055 c
1-1148225495
Андрей Молчанов
2006-05-21 19:31
2006.07.02
не работает ComboBox.SelStart


2-1150446404
Gon
2006-06-16 12:26
2006.07.02
StringGrid


2-1150370616
КиТаЯц
2006-06-15 15:23
2006.07.02
Форма из DLL поверх вызвавшего окна


15-1149578469
Der Nechk@ssoff
2006-06-06 11:21
2006.07.02
iKernel.exe


15-1149282888
Tack
2006-06-03 01:14
2006.07.02
Нужна простенькая однопользовательская система контроля версий