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

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

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

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

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

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

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

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

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

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

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

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

v_smirnovP.S. Пока я вижу только один способ - вызов RPC процедуры которая ссылается на себя же ...Нет, не получится. Если у тебя уровень изоляции запрещает грязное чтение, то ты через внешнюю процедуру не сможешь прочитать созданную, но незакоммиченную шапку документа.
...
Рейтинг: 0 / 0
ASA 10.0.1 - выполнение в отдельной транзакции
    #35566126
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не уверен на 100%, но вроде-бы events выполняются в отдельной транзакции.
все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
ASA 10.0.1 - выполнение в отдельной транзакции
    #35566314
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldНе уверен на 100%, но вроде-бы events выполняются в отдельной транзакции.Они выполняются в отдельном коннекте. А значит опять натыкаемся на вопрос разрешено грязное чтение или нет.
...
Рейтинг: 0 / 0
ASA 10.0.1 - выполнение в отдельной транзакции
    #35568768
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.sql.ru/forum/actualthread.aspx?tid=357788&hl=trigger+event
...
Рейтинг: 0 / 0
ASA 10.0.1 - выполнение в отдельной транзакции
    #35568949
Dmitry..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в АСЕ 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
ASA 10.0.1 - выполнение в отдельной транзакции
    #35569936
v_smirnov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl - К сожалению поменять местами (выделить в отдельную транзакцию) невозможно ;( Т.к. идет процесс "размножения" документа и точно узнать сколько их получиться невозможно, т.е. получать идентификаторы надо по мере необходимости.

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

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


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