|
|
|
ASA 10.0.1 - выполнение в отдельной транзакции
|
|||
|---|---|---|---|
|
#18+
Доброго дня ALL! Возможно ли теоретически сделать вот такую вещь: Открываем транзакцию (1) Выполняется часть кода - Вот здесь надо выполнить процедуру (либо часть кода) в отдельной транзакции! Не прерывая текущей и не зависящей от нее. (т.е. в случае отката транзакции (1) эта не должна откатиться! Выполняется оставшаяся часть кода commit/rollback транзакции (1) Пример: Требуется реализация counters (аналог автоинкремента но по нескольким полям). Продедура вставляет документ, вызывает функцию получения идентификатора из Counters (он выдает номер свободный и изменяет состояние счетчика, после изменения делает commit и доступен для вызова другим клиентом). Процедура продолжает обработку/вставку документа. В рамках ОДНОЙ единой транзакции реализовать этот механизм, как мне кажется, невозможно. Есть идеи, советы? P.S. Пока я вижу только один способ - вызов RPC процедуры которая ссылается на себя же ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2008, 12:26 |
|
||
|
ASA 10.0.1 - выполнение в отдельной транзакции
|
|||
|---|---|---|---|
|
#18+
v_smirnovВозможно ли теоретически сделать вот такую вещь:Нет. v_smirnovТребуется реализация counters (аналог автоинкремента но по нескольким полям). Продедура вставляет документ, вызывает функцию получения идентификатора из Counters (он выдает номер свободный и изменяет состояние счетчика, после изменения делает commit и доступен для вызова другим клиентом). Процедура продолжает обработку/вставку документа.Поменяй местами получение идентификатора и создание шапки документа. Тогда ты сможешь разрезать всю процедуру на две отдельных транзакции с коммитом первой части. v_smirnovP.S. Пока я вижу только один способ - вызов RPC процедуры которая ссылается на себя же ...Нет, не получится. Если у тебя уровень изоляции запрещает грязное чтение, то ты через внешнюю процедуру не сможешь прочитать созданную, но незакоммиченную шапку документа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2008, 18:07 |
|
||
|
ASA 10.0.1 - выполнение в отдельной транзакции
|
|||
|---|---|---|---|
|
#18+
Не уверен на 100%, но вроде-бы events выполняются в отдельной транзакции. все наши на www.corba.kubsu.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2008, 18:52 |
|
||
|
ASA 10.0.1 - выполнение в отдельной транзакции
|
|||
|---|---|---|---|
|
#18+
Ggg_oldНе уверен на 100%, но вроде-бы events выполняются в отдельной транзакции.Они выполняются в отдельном коннекте. А значит опять натыкаемся на вопрос разрешено грязное чтение или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2008, 20:47 |
|
||
|
ASA 10.0.1 - выполнение в отдельной транзакции
|
|||
|---|---|---|---|
|
#18+
http://www.sql.ru/forum/actualthread.aspx?tid=357788&hl=trigger+event ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2008, 07:39 |
|
||
|
ASA 10.0.1 - выполнение в отдельной транзакции
|
|||
|---|---|---|---|
|
#18+
в АСЕ 12 задавались тем-же вопросом... при этом в версии 11.9 можно было сделать RPC вне начальной транзакции, в 12-й версии это запретили делать :( боюсь что в АСА, RPC не спасет тоже... -- в связи с этим, реализовывали такой алгоритм: Код: plaintext т.е. взятие текущей ID - select max(id) ... с грязным чтением конечно грязное чтение может замедлить получение MAX, но не блокировать! => чистим регулярно таблицу, может быть делаем индексы вместо PK... а еще можно посмотреть в сторону GUID //здесь это все обсуждалось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2008, 10:03 |
|
||
|
ASA 10.0.1 - выполнение в отдельной транзакции
|
|||
|---|---|---|---|
|
#18+
White Owl - К сожалению поменять местами (выделить в отдельную транзакцию) невозможно ;( Т.к. идет процесс "размножения" документа и точно узнать сколько их получиться невозможно, т.е. получать идентификаторы надо по мере необходимости. От использования RPC отказался, что-то ASA с ним нестабильно работает, точнее не ASA а сам вызов. Пока реализовали через WebService - временно, пока не найдем лучшего решения (хотя ... нет ничего постояннее чем временное). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2008, 15:12 |
|
||
|
ASA 10.0.1 - выполнение в отдельной транзакции
|
|||
|---|---|---|---|
|
#18+
v_smirnovWhite Owl - К сожалению поменять местами (выделить в отдельную транзакцию) невозможно ;( Т.к. идет процесс "размножения" документа и точно узнать сколько их получиться невозможно, т.е. получать идентификаторы надо по мере необходимости.Ну так а кто и когда узнает сколько надо документов сделать? Клиент? Когда юзер нажал кнопку "Save"? В этот момент клиент запускает транзакцию и набирает себе пачку идентификаторов, закрывает транзакцию а потом открывает новую транзакцию и начинает спокойно создавать документы по полученным идентификаторам. Всегда можно зарезервировать ID для документа заранее. Всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 18:00 |
|
||
|
ASA 10.0.1 - выполнение в отдельной транзакции
|
|||
|---|---|---|---|
|
#18+
White Owl Всегда можно зарезервировать ID для документа заранее. Всегда. Поддерживаю. Если же действительно сложно(или неудобно) узнать кол-во нужных идентефикаторов, то "отвяжите" логику размножения документов по основному документу от транзакции обработки основного документа. Я к тому, что можно вставить кучу записей(других документов) с привязкой к документу, но это еще не значит, что документ проведен(обработан). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 11:34 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=55&tid=2011354]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 393ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...