|
|
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
Если его можно заменить каким-то индексом,который не подразумевает того,что он отсортирован-я бы посоветовал попробывать.Убрать совсем-разве что,если таблица небольшая-только для эксперемента,да и то не очень корректного-инсерты пойдут на ура,селекты будут застревать,но не смертельно,если таблица до 1000,так скажем.Мёртвых блокировок не то что бы не будет-скажем так,не должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 13:11 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
ищи кто кого блокирует на уровне базы. какая база-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 23:27 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
Если нет обработок по триггеру, через процедуру вставлять строки не хочется, а проблема не решается, то может все таки попробовать сделать то, что советовали в самом начале ? SQLCA.autocommit=True , ну и немного изменить обработку : DRodСоединение в приложении: SQLCA.autocommit=false; .... В DW под событие dberror стоит ROLLBACK; и сообщение "Повторите попытку...". Под кнопкой "Сохранить": ll_ret = dw.Update() if ll_ret <> 1 then MessageBox("Ошибка","Нельзя записать ЗАГОЛОВОК документа!) return end if COMMIT; .... Блокировка таблицы продолжается пока заблокировавший пользователь не выйдет из приложения, т.е. разорвёт соедиенение. Конечно не мое собачье дело, но если произошло событие "DBERROR", то есть необходимость в ROLLBACK ? Или необходимо обеспечивать запись только блока строк ? Во вторых, даже если autocommit=false, почему бы после этих операций не "разорвать соедиенение" самому, без выхода из приложения ? Да и воспользоваться, не SQLCA, а своей транзакцией, которую потом можно и уничтожить ( для гарантии :-) ) ? Transaction tran tran = CREATE Transaction ... tran.autocommit=false ... COMMIT USING tran; DISCONNECT USING tran; DESTROY tran И в третьих - у нас похожая проблема добавления связанных записей в нескольких таблиц, при которой происходить куча проверок, добавление вычисляемых значений, работа триггеров, при одновременной работе большого количества пользователей - успешно решается при использовании процедуры ( Microsoft SQL ). CREATE PROCEDURE .... ..... select @lock=1 while (@lock=1) select @lock=lock from aaaaaaa BEGIN TRANSACTION update aaaaaaa set lock=1 ..... if @@error<>0 begin Rollback transaction return end ....... update aaaaaaa set lock=0 ...... COMMIT TRANSACTION ...... GO Good Luck ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 10:28 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
Dmitry.ищи кто кого блокирует на уровне базы. какая база-то? См [4933666] вверху страницы: - В сообщении об ошибке указано имя пользователя, - Adaptive Server Anywhere 5.5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 13:36 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
DRod wrote: > - Adaptive Server Anywhere 5.5. Сразу видно глубину знаний (точнее, отсутствие таковой). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 14:07 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
To Chv 1) SQLCA.autocommit=False. Это мне досталось о предыдущих поколений программистов, разрабатывавших данную корпоративную систему. "...Иных уж нет, а те - далече...". Боюсь поменять на autocommit=True. "...есть необходимость в ROLLBACK?...". А как же завершить транзакцию? Можно откат поставить после dw.Update(), но я ставлю в событие "DBERROR". 2) Пробовал уничтожать транзакционный объект. Не помогло. 3) Добавление записи не на уровне приложения (DataWindow), а на уровне базы данных (процедура), мне кажется самый перспективный путь решения моей проблемы. Буду пробовать... Спасибо за конструктивные предложения! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 14:33 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
DRod wrote: > 1) SQLCA.autocommit=False. Это мне досталось о предыдущих поколений > программистов, разрабатывавших данную корпоративную систему. "...Иных > уж нет, а те - далече...". Боюсь поменять на autocommit=True. И не нужно. Транзакции - вещь довольно полезная в хозяйстве ;). > Можно откат поставить после dw.Update(), но я ставлю в событие "DBERROR". Нужно поставить после Update(). Или вообще переписать эту халтуру на Embedded SQL. > 3) Добавление записи не на уровне приложения (DataWindow), а на уровне > базы данных (процедура), мне кажется самый перспективный путь решения > моей проблемы. Стрельба из пушки по воробьям. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 14:53 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
ChVесли произошло событие "DBERROR", то есть необходимость в ROLLBACK ? Или необходимо обеспечивать запись только блока строк ? Rollback всегда нужно делать после неуспешного dw.Update() (и не в dberror, а после Update() ) Это связано с тем, что в этом случае статусы измененных строк в DW не сбрасываются и если не сделать rollback, то при последующих Update() произойдет повторное проведение операций DML, что в случае Insert вызовет ошибку из-за дубля Primary key, а в случае Delete/Update - Row changed between retrieve and update (в DW с настройками update по умолчанию). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 15:07 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
то есть, кто то нажмет два раза сохранить и получит ту ошибку о которой идет речь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 15:16 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
1. "[Sybase][ODBC Driver]Serialization failure: user 'Kilinskaya' has the row in 'TLK_O_demands' locked" не помню такой ошибки. по моему это не родной АСА драйвер... что пользуем? 2. запустите утилиту dbwatch чтобы посмотреть коннекты и у кого сколько незакомиченых транзакций. альтернативная утилита для АСА 5.0 есть здесь 3. помнится в аса при определенном уровне чтения (isolation level) после ретрайва данных лочились записи. так что на "retrieve end" приходилось вешать роллбек или коммит. какой isolation level ? 4. если в DW стоит "Retrieve As Needed" то этот DW на ретрайве может блокировать строки т.к. держит открвтвм курсор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 16:37 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
To Dmitry 1) SQLDBCODE[-210]. ASA 5.5. 2) Спасибо за DbWatch+. 3) isolation level = 0. 4) "Retrieve As Needed" не указаною ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 19:05 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
Какой-то абсурд. Мы делаем коммиты там и роллбеки всякие а блокировки стоят намертво пока из приложения не выйдем? Так не бывает. Есть тут спецы по ASA которые в курсе как там с вложенными транзакциями. Такое можно было бы устроить с MSSQL если начать транзакцию, потом начать вложенную. но даже в этом случае при первом же ROLLBACK блокировки снимаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 19:32 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
DRod , начните с того, что научитесь стабильно повторять ошибку. В 90% случаев после этого будет ясно, что надо исправить. А пока ошибка нестабильна - это все гадание на кофейной гуще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 20:08 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
Не особо спец в ASA, но можно было бы проверить, что из блокировок используется на таблицу APL или Datarow ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 09:53 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky ChVесли произошло событие "DBERROR", то есть необходимость в ROLLBACK ? Или необходимо обеспечивать запись только блока строк ? Rollback всегда нужно делать после неуспешного dw.Update() (и не в dberror, а после Update() ) Это связано с тем, что в этом случае статусы измененных строк в DW не сбрасываются и если не сделать rollback, то при последующих Update() произойдет повторное проведение операций DML, что в случае Insert вызовет ошибку из-за дубля Primary key, а в случае Delete/Update - Row changed between retrieve and update (в DW с настройками update по умолчанию). Неуспешные dw.Update() я отрабатываю, но спасибо, буду иметь ввиду. "Век живи - век учись, а ..." Good Luck ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 10:11 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
spas2001 wrote: > проверить, что из блокировок используется на таблицу APL или Datarow Блин. У человека SA 5.5, при чём тут все эти ASEшные заморочки??? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 10:17 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрей wrote: > Какой-то абсурд. Мы делаем коммиты там и роллбеки всякие а блокировки > стоят намертво пока из приложения не выйдем? Так не бывает. Мой опыт показывает, что блокировки там, где их не ждали, возникают по одной из 2 причин: 1) не сделан COMMIT/ROLLBACK после INSERT/UPDATE/DELETE; 2) временно поднят и не опущен уровень изоляции. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 10:44 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky DRod , начните с того, что научитесь стабильно повторять ошибку. Эх! Если бы я мог повторять ошибку, я бы конечно её нашёл и исправил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 15:07 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
DRodЭх! Если бы я мог повторять ошибку, я бы конечно её нашёл и исправил. Поставьте юзерам где наблюдаются ошибки и блокировки отладочную версию программы, где протоколируйте каждое действие юзера (пункты меню, действия с документами - открытие, создание, сохранения, выход без сохранения, и т.д. вплоть до изменения каждого поля), каждый messagebox. Потом по логу пытайтесь повторить и детализируйте лог если не удается повторить ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 16:40 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
Можно пойти и немного другим путем: найти все места в программе с операторами commit/rollback и протоколировать их вызов и какая ф-я вызывала. Потом после возникновения ошибки анализировать этот лог сравнивая его с логом полученным без ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 16:46 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
To Anatoly Moskovsky Спасибо. Буду записывать в лог контрольные точки с именами пользователей и компьютеров после: - begin transaction, - rollback, - commit. Затем буду анализирвать лог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 18:43 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
DRodБуду записывать в лог контрольные точки с именами пользователей и компьютеров после: - begin transaction, - rollback, - commit. Затем буду анализирвать лог. Есть еще места где commit/rollback происходят неявно - disconnect/re-connect/ и потенциально Execute Immediate (с DDL). У меня был случай, когда кодер вместо того, чтобы использовать специально выделенный метод of_getconnect, в котором сеансы повторно использовались, по незнанию использовал просто connect using. И другой код, в котором по ошибке не было commit, по случайности работал верно из-за неявного коммита при disconnect. Когда же код привели в соответсвие со стандартом, в том коде, где не было коммита вылезло непонятное поведение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2007, 00:03 |
|
||
|
Ошибка сериализации
|
|||
|---|---|---|---|
|
#18+
А ларчик вот так открывался: SQLCA.DBParm = "ConnectString='...' " + ",CursorLock='OptValue',CursorScroll='Dynamic' " В хелпе PB6.5 параметр соединения CursorScroll (ODBC) DBParm: Dynamic scrolling in SQL Anywhere 5.x and Watcom SQL 4.0b If you are accessing a SQL Anywhere Version 5.x or Watcom SQL Version 4.0b database and want to execute an embedded SQL FETCH FIRST, FETCH PRIOR, or FETCH LAST statement when you retrieve a row from a cursor, you must set CursorScroll to 'Dynamic'. Otherwise, the default for these DBMSs is to do forward scrolling (FETCH NEXT) only. Спасибо моему другу "Великому GAA"! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2008, 13:33 |
|
||
|
|

start [/forum/topic.php?fid=15&gotonew=1&tid=1336821]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
3ms |
| others: | 233ms |
| total: | 378ms |

| 0 / 0 |

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