Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 А где защита транзакций-то?  [new]
Пилотажный
Member

Откуда: NGC 6137
Сообщений: 2771
Приветствую
Уже не раз - сбои не сервере - выключения компа (например, один раз перезагрузка сервера) или
глюко-отказы ОС - и порчи данных (что-то, что должно было перезаписаться - только удалено,
что-то недозаписано, ...) из-за того, что только КАК БЫ часть транзакции выполнена оказывается.

А разве ВСЕ незавершенные из-за аварии транзакции не откатываются после включения? Картинка с другого сайта.


SQL Server 2000 EE (8.00.2036 (SP4))
9 дек 09, 11:40    [8039342]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Пилотажный


А разве ВСЕ незавершенные из-за аварии транзакции не откатываются после включения?

Откатываются. Об этом даже в лог запуска пишется.
9 дек 09, 11:43    [8039371]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Пилотажный
Member

Откуда: NGC 6137
Сообщений: 2771
Glory
Пилотажный


А разве ВСЕ незавершенные из-за аварии транзакции не откатываются после включения?

Откатываются. Об этом даже в лог запуска пишется.


Даже если вложенные завершились, то и они должны откатываться, если откатывается надтранзакция.
Так ведь? (В Oracle 8 так совершенно четко - проверено. Во всех нормальных СУБД так должно быть.).
9 дек 09, 12:00    [8039559]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Пилотажный
Glory
Пилотажный


А разве ВСЕ незавершенные из-за аварии транзакции не откатываются после включения?

Откатываются. Об этом даже в лог запуска пишется.


Даже если вложенные завершились, то и они должны откатываться, если откатывается надтранзакция.
Так ведь? (В Oracle 8 так совершенно четко - проверено. Во всех нормальных СУБД так должно быть.).

В MSSQL нет вложенных транзакций
9 дек 09, 12:01    [8039571]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Пилотажный
Member

Откуда: NGC 6137
Сообщений: 2771
Glory

В MSSQL нет вложенных транзакций


Как понимать слова уважаемого модератора?
Так именно и называются у Microsoft
Вложение транзакций

неявные не могут быть вложенные

Но что вообще с данными случалось? Клиенты с сервера берут пачку данных, обрабатывают-дополн-меняют
и пачку возвращают на сервер - и впечатление, что только часть пачки возращалась в тех случаях.
9 дек 09, 13:09    [8040231]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Пилотажный
Glory

В MSSQL нет вложенных транзакций


Как понимать слова уважаемого модератора?
Так именно и называются у Microsoft
Вложение транзакций

неявные не могут быть вложенные

Но что вообще с данными случалось? Клиенты с сервера берут пачку данных, обрабатывают-дополн-меняют
и пачку возвращают на сервер - и впечатление, что только часть пачки возращалась в тех случаях.

А вы сами то ссылку эту читали ?
Вложенные команды BEGIN TRANSACTION есть, а вот вложенных транзакций таки нет

"Фиксация внутренних транзакций игнорируется компонентом SQL Server Database Engine. Транзакция либо фиксируется, либо откатывается в зависимости от предпринятого действия в конце самой внешней транзакции. Если внешняя транзакция зафиксирована, внутренние вложенные транзакции также будут зафиксированы. Если внешняя транзакция откатывается, то все внутренние транзакции также будут отменены, независимо от того, были ли отдельные внутренние транзакции зафиксированы."
9 дек 09, 13:16    [8040272]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Пилотажный
Member

Откуда: NGC 6137
Сообщений: 2771
Glory,
ладно - говоря компромиссно - вложенные транзакции - не совсем транзакции по ряду моментов, например, не могут быть сами собой завершены, то есть внешняя их откатить, но с другой стороны они сами по себе могут быть
откатены-rollback как нормальные транзакции


Но все же по теме топика - что будет, если во время пересылки данных на сервер вдруг, например, вытащить сетевой кабель?
9 дек 09, 13:29    [8040372]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Пилотажный


Но все же по теме топика - что будет, если во время пересылки данных на сервер вдруг, например, вытащить сетевой кабель?

Как только сервер определит, что какой-то коннект прерван, то он сразу же начнет отмену незавершенных транзакций. Если, конечно, они есть
9 дек 09, 13:39    [8040448]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Пилотажный
Member

Откуда: NGC 6137
Сообщений: 2771
Glory,
клиент обработал пачку данных, переслал пачку на сервер, запустил хранимку (в которой вызывают несколько хранимок)

Вот если во время запуска хранимки кнопкой выключить сервер - ведь всё сделанное хранимкой отменяется?
Но впечатление, что - нет, то есть первые по порядку хранимки в хранимке оказываются заcommit-ены.
9 дек 09, 13:50    [8040543]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Пилотажный


Вот если во время запуска хранимки кнопкой выключить сервер - ведь всё сделанное хранимкой отменяется?
Но впечатление, что - нет, то есть первые по порядку хранимки в хранимке оказываются заcommit-ены.

А почему должно отменяться все то ?
То, что было зафиксировано, с какой стати должно отменяться ?
9 дек 09, 13:52    [8040559]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31201
Пилотажный
Вот если во время запуска хранимки кнопкой выключить сервер - ведь всё сделанное хранимкой отменяется?
Но впечатление, что - нет, то есть первые по порядку хранимки в хранимке оказываются заcommit-ены.
Если всё это обёрнуто в общую транзакцию, то все изменения откатятся. У вас не было этой общей транзакции.
9 дек 09, 13:56    [8040582]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
OffTop Заметка: Сообщения типа RaiseError пользовательского уровня явно не влияет на транзакции, и на прерывания пакета/процедуры, также на прерывание не влияет и сама команда RollBack. Для этого есть множество разнородных механизмов. XACT_ABORT, TRY/CATCH, контроль на клиенте ... (и понеслась).
9 дек 09, 14:01    [8040628]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Пилотажный
Member

Откуда: NGC 6137
Сообщений: 2771
sorry не сразу ответил - отвлекли

Glory
Пилотажный

Вот если во время запуска хранимки кнопкой выключить сервер - ведь всё сделанное хранимкой отменяется?
Но впечатление, что - нет, то есть первые по порядку хранимки в хранимке оказываются заcommit-ены.

А почему должно отменяться все то ?
То, что было зафиксировано, с какой стати должно отменяться ?


То есть хранимка вовсе не является неявной транзакцией?

Да уж, явная транзакция внутри этой хранимки, в теле которой и будут вызываться все хранимки в хранимке, должна "спасти отца русской демократии".
Вообще та ИС в основном составе уже работает более 4 лет - во ошибки находятся. Эдак при тестировании надо
и сервер отрубать как тест.

[url=][/url]
alexeyvg
Пилотажный
Вот если во время запуска хранимки кнопкой выключить сервер - ведь всё сделанное хранимкой отменяется?
Но впечатление, что - нет, то есть первые по порядку хранимки в хранимке оказываются заcommit-ены.
Если всё это обёрнуто в общую транзакцию, то все изменения откатятся. У вас не было этой общей транзакции.


Опять же вопрос - сеанс связи с каким-либо клиентом - не есть неявная транзакция? И когда сеанс не закрыт нормально, то это abort-ная ситуация ведь для SQLServer?

Mnior
OffTop Заметка: Сообщения типа RaiseError пользовательского уровня явно не влияет на транзакции, и на прерывания пакета/процедуры, также на прерывание не влияет и сама команда RollBack. Для этого есть множество разнородных механизмов. XACT_ABORT, TRY/CATCH, контроль на клиенте ... (и понеслась).


А ведь по умолчанию SET XACT_ABORT OFF, а клиент ждет ответа - выполнилась ли хранимка. И если вдруг вырубается сеть, то для SQL Server это какое событие?
9 дек 09, 15:22    [8041213]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Пилотажный
sorry не сразу ответил - отвлекли

Glory
Пилотажный

Вот если во время запуска хранимки кнопкой выключить сервер - ведь всё сделанное хранимкой отменяется?
Но впечатление, что - нет, то есть первые по порядку хранимки в хранимке оказываются заcommit-ены.

А почему должно отменяться все то ?
То, что было зафиксировано, с какой стати должно отменяться ?


То есть хранимка вовсе не является неявной транзакцией?

Процедура - это просто набор команд, который хранится на сервере. Никаких особых самостоятельных явных/неявных действия с транзакциями при выполнении этого набора команд сервер не делает. И это правильно
9 дек 09, 15:29    [8041305]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31201
Пилотажный
То есть хранимка вовсе не является неявной транзакцией?

Вообще та ИС в основном составе уже работает более 4 лет - во ошибки находятся. Эдак при тестировании надо
и сервер отрубать как тест.
Да тестировать надо. 4 года работы с неправильным управлением транзакциями...

Пилотажный
То есть хранимка вовсе не является неявной транзакцией?

Опять же вопрос - сеанс связи с каким-либо клиентом - не есть неявная транзакция? И когда сеанс не закрыт нормально, то это abort-ная ситуация ведь для SQLServer?

А ведь по умолчанию SET XACT_ABORT OFF, а клиент ждет ответа - выполнилась ли хранимка. И если вдруг вырубается сеть, то для SQL Server это какое событие?
Сеанс и ХП - не транзакции, а сеанс и процедура :-)

Если вдруг вырубается сеть, то для SQL Server-а это не событие, он просто откатывает текущую транзакцию.

У сиквела есть установка параметра соединения SET IMPLICIT TRANSACTION - тогда при первой команде сервер начнёт транзакцию. Но лучьше управлять транзакциями самому.
9 дек 09, 15:37    [8041386]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 887
Если в хранимке явно указано Begin transaction .... commit ...rollback, то если во время выполнения этой хранимки вытащить кабель, тогда все откатится назад, что было сделано этой хранимкой, а если нет, то откатится, что было не зафиксирвано. Вроде так.
9 дек 09, 16:26    [8041866]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Пилотажный
Member

Откуда: NGC 6137
Сообщений: 2771
Ладно. Это одно, но тут же ещё одна проблема.
Когда нет связи с сервером, но при этом клиенты, пациенты, плательщики, автомобили в сервис, покупатели, ...
ломятся и толпятся и ругаются, а у оператора один ответ - Ждите связи в сервером.

Опять же несколько операторов вводили-вводили и отрпаивли на сервер, а там жо - данные пропали.

Вот делаю локальные БД клиенских программ - на XML-файлах, на Paradox-файлах. Пока нет связи с сервером - работа не стоит. А когда связь появляется, то программ всё, что требуется, отправляет на сервер и получает с сервера, что нужно.

А какие ещё работающие приемы справится с такой ситуацией?
10 дек 09, 07:13    [8044083]     Ответить | Цитировать Сообщить модератору
 Re: А где защита транзакций-то?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Пилотажный


А какие ещё работающие приемы справится с такой ситуацией?

Локальный сервер+репликация
10 дек 09, 10:31    [8044837]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить