Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 10.0.1 - выполнение в отдельной транзакции / 9 сообщений из 9, страница 1 из 1
29.09.2008, 12:26
    #35564932
v_smirnov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 10.0.1 - выполнение в отдельной транзакции
Доброго дня ALL!

Возможно ли теоретически сделать вот такую вещь:

Открываем транзакцию (1)

Выполняется часть кода

- Вот здесь надо выполнить процедуру (либо часть кода) в отдельной транзакции! Не прерывая текущей и не зависящей от нее. (т.е. в случае отката транзакции (1) эта не должна откатиться!

Выполняется оставшаяся часть кода

commit/rollback транзакции (1)

Пример:
Требуется реализация counters (аналог автоинкремента но по нескольким полям).
Продедура вставляет документ, вызывает функцию получения идентификатора из Counters (он выдает номер свободный и изменяет состояние счетчика, после изменения делает commit и доступен для вызова другим клиентом). Процедура продолжает обработку/вставку документа.

В рамках ОДНОЙ единой транзакции реализовать этот механизм, как мне кажется, невозможно.

Есть идеи, советы?

P.S. Пока я вижу только один способ - вызов RPC процедуры которая ссылается на себя же ...
...
Рейтинг: 0 / 0
29.09.2008, 18:07
    #35566046
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 10.0.1 - выполнение в отдельной транзакции
v_smirnovВозможно ли теоретически сделать вот такую вещь:Нет.

v_smirnovТребуется реализация counters (аналог автоинкремента но по нескольким полям).
Продедура вставляет документ, вызывает функцию получения идентификатора из Counters (он выдает номер свободный и изменяет состояние счетчика, после изменения делает commit и доступен для вызова другим клиентом). Процедура продолжает обработку/вставку документа.Поменяй местами получение идентификатора и создание шапки документа. Тогда ты сможешь разрезать всю процедуру на две отдельных транзакции с коммитом первой части.

v_smirnovP.S. Пока я вижу только один способ - вызов RPC процедуры которая ссылается на себя же ...Нет, не получится. Если у тебя уровень изоляции запрещает грязное чтение, то ты через внешнюю процедуру не сможешь прочитать созданную, но незакоммиченную шапку документа.
...
Рейтинг: 0 / 0
29.09.2008, 18:52
    #35566126
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 10.0.1 - выполнение в отдельной транзакции
Не уверен на 100%, но вроде-бы events выполняются в отдельной транзакции.
все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
29.09.2008, 20:47
    #35566314
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 10.0.1 - выполнение в отдельной транзакции
Ggg_oldНе уверен на 100%, но вроде-бы events выполняются в отдельной транзакции.Они выполняются в отдельном коннекте. А значит опять натыкаемся на вопрос разрешено грязное чтение или нет.
...
Рейтинг: 0 / 0
01.10.2008, 07:39
    #35568768
panu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 10.0.1 - выполнение в отдельной транзакции
http://www.sql.ru/forum/actualthread.aspx?tid=357788&hl=trigger+event
...
Рейтинг: 0 / 0
01.10.2008, 10:03
    #35568949
Dmitry..
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 10.0.1 - выполнение в отдельной транзакции
в АСЕ 12 задавались тем-же вопросом...
при этом в версии 11.9 можно было сделать RPC вне начальной транзакции,
в 12-й версии это запретили делать :(

боюсь что в АСА, RPC не спасет тоже...

--
в связи с этим, реализовывали такой алгоритм:
Код: plaintext
table id_table (tname char( 30 ), id numeric( 15 ), primary key (tname,id) )
идея: генерация ID это не UPDATE а INSERT (чтобы не блокировать другие процессы)
т.е. взятие текущей ID - select max(id) ... с грязным чтением

конечно грязное чтение может замедлить получение MAX, но не блокировать!
=> чистим регулярно таблицу, может быть делаем индексы вместо PK...

а еще можно посмотреть в сторону GUID
//здесь это все обсуждалось
...
Рейтинг: 0 / 0
01.10.2008, 15:12
    #35569936
v_smirnov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 10.0.1 - выполнение в отдельной транзакции
White Owl - К сожалению поменять местами (выделить в отдельную транзакцию) невозможно ;( Т.к. идет процесс "размножения" документа и точно узнать сколько их получиться невозможно, т.е. получать идентификаторы надо по мере необходимости.

От использования RPC отказался, что-то ASA с ним нестабильно работает, точнее не ASA а сам вызов.

Пока реализовали через WebService - временно, пока не найдем лучшего решения (хотя ... нет ничего постояннее чем временное).
...
Рейтинг: 0 / 0
02.10.2008, 18:00
    #35573133
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 10.0.1 - выполнение в отдельной транзакции
v_smirnovWhite Owl - К сожалению поменять местами (выделить в отдельную транзакцию) невозможно ;( Т.к. идет процесс "размножения" документа и точно узнать сколько их получиться невозможно, т.е. получать идентификаторы надо по мере необходимости.Ну так а кто и когда узнает сколько надо документов сделать? Клиент? Когда юзер нажал кнопку "Save"?
В этот момент клиент запускает транзакцию и набирает себе пачку идентификаторов, закрывает транзакцию а потом открывает новую транзакцию и начинает спокойно создавать документы по полученным идентификаторам.
Всегда можно зарезервировать ID для документа заранее. Всегда.
...
Рейтинг: 0 / 0
03.10.2008, 11:34
    #35574275
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 10.0.1 - выполнение в отдельной транзакции
White Owl Всегда можно зарезервировать ID для документа заранее. Всегда.
Поддерживаю.
Если же действительно сложно(или неудобно) узнать кол-во нужных идентефикаторов,
то "отвяжите" логику размножения документов по основному документу от транзакции обработки основного документа. Я к тому, что можно вставить кучу записей(других документов) с привязкой к документу, но это еще не значит, что документ проведен(обработан).
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 10.0.1 - выполнение в отдельной транзакции / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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