Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разделить транзакцию / 22 сообщений из 22, страница 1 из 1
18.11.2002, 08:52:24
    #32068798
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
может кто-то имеет опыт работы с нарядами, извещениями и т.д. и т.п. Короче говоря, структура данных такова:
Код: plaintext
[исполнители]->---[наряд]---<-[работы]

(стрелочки - один ко многим)
Как проще и эффективнее организовать ввод данных для такой схемы?
1 вариант - по кусочкам. Т.е. формируется [наряд], затем к нему можно нарастить исполнителей и перечень работ. На каждую запись - отдельная транзакция.
2 вариант - все одной транзакцией (как по идее и должно быть). Все манипуляции с данными происходят на клиенте, а потом кэш сбрасываем в рамках одной транзакции. Но! все равно мы должны соблюдать последовательность ввода данных в базу. Т.е. нельзя сбросить данные об исполнителях, не имея там информации по наряду (что предусмотрено схемой базы).

Тем не менее, я выбрал 1 вариант. Конечно чистая бизнес-транзакция здесь как-таковая отсутствует. Однако есть преимущество во времени - снижается вероятность блокировок. Для модемной связи пакетная транзакция тем более не есть хорошо.
...
Рейтинг: 0 / 0
18.11.2002, 13:30:32
    #32068952
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
м-да... рабочий день к концу подходит, похоже никто с OLTP сейчас не работает. всех 1С устраивает... надо переходить на OLAP :)
...
Рейтинг: 0 / 0
18.11.2002, 13:53:35
    #32068972
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
Я применял в такой ситуации один в один стакой подход! Отдельно создавался/изменялся наряд и работы! А потом по работам расписывали исполнителей! Очень удобно! Все это использовалось в автосервисе и тормозов замечено небыло!
...
Рейтинг: 0 / 0
19.11.2002, 09:09:15
    #32069371
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
ерунда получается на клиенте. Для того чтобы откатить все изменения по одному наряду (нажав кнопку "Отмена") надо хранить либо перечень всех действий - изменение списка работ, исполнителей; либо... есть вариант все действия проводить в темповой табличке, а потом в рамках одной транзакции данные переносить в "нормальные" таблицы.



Как-то все мудрено. Может есть более простое решение? Как откатить действия при вводе данных в схеме один ко многим?
...
Рейтинг: 0 / 0
19.11.2002, 10:44:32
    #32069428
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
открыть еще одну сессию(со своей транзакцией..)....
...
Рейтинг: 0 / 0
19.11.2002, 11:34:57
    #32069486
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
гм... ну да. Так можно. Ну допустим завел пользователь 30 значений на один наряд. Т.е. будет 31 сессия. Берем 10 пользователей, т.е. 310 соединений на сервере? или что-то не так? :)
...
Рейтинг: 0 / 0
19.11.2002, 12:26:30
    #32069545
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
не... есть еще вложенные транзакции...
ты детально алгоритм опиши(бизнес логику по шагам)
и где у тебя затык...
...
Рейтинг: 0 / 0
19.11.2002, 12:45:34
    #32069560
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
ну ладно. Попытка №2...
необходимо занести в базу данные по наряду. Вот примерный состав данных -

Наряд: дата, номер, подразделение. Суррогатный ключ identity.
Работы: операция, время, деньги.

На один наряд несколько работ.

С удалением нарядов проблем нет :) Есть проблемы с вставкой и обновлением. Какой-то тормоз здесь.

Допустим заводим новый наряд. Открывается на клиенте форма, указывает он номер, дату, подразделение, затем начинает вводить по работам. Как я могу занести данные по работам в таблицу, если еще нет ключевого поля по наряду?
Форма содержит внизу две кнопки - "OK" и "Отмена". Т.е. пользователь может откатить вообще все изменения при вводе наряда.
Завести одну транзакцию на ввод всей информации? Так она ведь заблокирует весь наряд! И длиться она может неопределенное количество времени.
...
Рейтинг: 0 / 0
19.11.2002, 13:04:40
    #32069576
nandji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
А что мешает сначала вставить наряд а потом его наполнить ?
Не понял где возникает блокировка ?
Используй оптимистичные блокировки.

При открытии формы открывать соединение или начинать транзакцию по отмене роллбэк. Только отслеживать ошибку соединения (типа кто-то другой уже успел че то сделать с данными нового наряда) забивать болт или обрабатывать как надо и все .

Или нужно именно "неоптимистично" блокировать ?
...
Рейтинг: 0 / 0
19.11.2002, 13:21:50
    #32069595
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
нельзя вставить пустой наряд. Он должен быть заполнен.

Если я буду изменять перечень работ по наряду в рамках одной транзакции, то при repeatableread эти данные будут заблокированы
...
Рейтинг: 0 / 0
19.11.2002, 13:37:32
    #32069606
nandji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
вопрос зачем здесь repeatableread
...
Рейтинг: 0 / 0
19.11.2002, 13:42:46
    #32069610
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
Вы предлагаете грязное чтение?
...
Рейтинг: 0 / 0
19.11.2002, 13:47:43
    #32069615
nandji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
зачем грязное? readcommitted
...
Рейтинг: 0 / 0
19.11.2002, 13:49:38
    #32069616
nandji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
на самом деле нужен ответ на вопрос зачем здесь repeatableread
...
Рейтинг: 0 / 0
19.11.2002, 13:57:44
    #32069624
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
что-то я не пойму...
открываю QA, делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE [t_n] (
	[id_n] [int] NULL ,
	[name_n] [varchar] ( 50 ) NULL 
) 
GO

begin tran
insert into t_n (id_n, name_n)
values ( 1 , 'Hello')


открываю второе окно:
Код: plaintext
1.
2.
select * 
from t_n with (READCOMMITTED)

блокировано!
...
Рейтинг: 0 / 0
19.11.2002, 14:05:17
    #32069631
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
REPEATABLE READ конечно же моя ошибка
...
Рейтинг: 0 / 0
19.11.2002, 14:08:30
    #32069633
nandji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
все правильно ...
транзакция не закончена вставленные ряды эксклюзивно заблокированы
селект ждет
...
Рейтинг: 0 / 0
19.11.2002, 14:11:07
    #32069634
nandji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
при таком раскладе выход либо NOLOCK либо READPAST
...
Рейтинг: 0 / 0
19.11.2002, 14:18:56
    #32069641
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
да-да. Грязное чтение. А READPAST наверняка лучше :)

Ладно. Буду пробовать. Вариант с транзакциями чем плох - продолжительное время удерживания ресурсов.
...
Рейтинг: 0 / 0
20.11.2002, 01:52:47
    #32069896
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
нельзя вставить пустой наряд. Он должен быть заполнен.
почему так?
...
Рейтинг: 0 / 0
20.11.2002, 02:06:51
    #32069899
1077803
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
Я тоже так думаю: что за ерунда, зачем городить себе сложности...

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

Абсолютно никаких проблем не вижу.
...
Рейтинг: 0 / 0
20.11.2002, 06:09:52
    #32069926
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить транзакцию
2Mice: патамучто! :)
значение имеет не наряд, а выполненные работы.

Вместо метки "черновик" можно сделать к в банковском документообороте - состояние "закрыт/незакрыт". Соответственно всю дальнейшую работу (аналитику) проводить только с закрытым нарядом.

С другой стороны, если наряд блокирован транзакцией на изменение, то его, собственно, никто и не увидит. Так что может быть все получится и без дополнительного признака.

Посмотрим. Мне эту задачу необходимо реализовать в течении недели.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разделить транзакцию / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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