Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Кеширование, зависание транзакции, что еще?   Найти похожие ветки 

 
Rem ©   (2004-03-11 17:35) [0]

В локальной сети несколько компьютеров. На всех - WinXP Pro. Одна из машин выступает в роли файл-сервера. На ней размещен файл базы данных в формате *.mdb. К этой базе данных подсоединяются пользователи. Программа (пользовательская) использует связку ADO (компоненты Delphi) + MSJet 4.0 + *.mdb. Периодически возникает ситуация, когда база данных блокируется (?), то-есть, выдается сообщение: "Невозможно внести изменения. Установлена блокировка." При этом вносить данные не могут пользователи на всех машинах. Но это еще полбеды.
На одной (единственной) машине программа продолжает работать, данные заносятся в базу, читаются, тут же отображаются, синхронизируются и пр. При этом в реальном файле БД изменений никаких нет. То-есть, с чем работает программа - непонятно. Хуже всего то, что при открытии с этого же (!) компьютера файла БД при помощи MS Access, он (Access) видит реальную БД (ту, что на сервере), без тех изменений, которые вносятся программой. При перезапуске программы (пользовательской), она видит реальную базу данных. При этом данные, внесенные в прошлой сессии, теряются. Но вносимые вновь (именно на этом компьютере) данные опять отображаются только в этой программе, а Access их в упор не видит!
Единственный (найденный) выход из ситуации - перезагрузка всех компьютеров. Не известно даже, кто блокирует базу данных, и какого рода эта блокировка.

На всех компьютерах возможность работы с автономными файлами отключена.

Вот и вопрос: Что такое видит программа (на этом одном компьютере), чего все остальные не видят? Куда она записывает данные? Откуда их читает? И... как всего этого избежать?

Есть предположение, что это просто не подтверждается транзакция. Правда, все транзакции оформлены:
ADOConnection.BeginTrans;
try
  ...
  ADOConnection.CommitTrans;
except
  ADOConnection.RollbackTrans;
end;

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

Все пользователи входят в систему с одним логином (может, поэтому и висит транзакция, запущенная от имени одного пользователя?).

К сожалению, более подробно описать симптомы не получится, так как было это всего 2 раза. Возможно, это особенность работы транзакций в ADO? Тогда почему MS Access нормально все видит?

И вообще: Кто управляет транзакциями в ADO: сам движок ADO? MSJet? А может, ADO использует DCOM для подключения к движку БД на удаленном компьютере(эдакая кооперация)?


 
Rem ©   (2004-03-11 18:11) [1]

Никаких соображений? Или влом читать длинный вопрос? :)


 
sniknik ©   (2004-03-11 18:33) [2]

попробуй переделать все
ADOConnection.BeginTrans;
на
ADOCommand.CommandText:= "BEGIN TRANSACTION";
ADOCommand.Execute;
остальное соответственно.

но вообще база access не сетевая а локальная со всеми отсюда вытекаюшими ...
желательно перейти, хотябы на MSDE/MSSQL (минимум переделок), MSDE есть на дисках с MS Office.


 
Rem ©   (2004-03-11 20:03) [3]

Не хочется возится с MS SQL. В недалеком будущем - переход на трехзвенку.
Хочется разобраться в причинах возникновения таких вот ситуаций.
Кстати: может, кто знает, как снять блокировку с БД в случае аварийного отключения от сервера (кабель на рабочей станции отошел)? При этом блокировка БД остается или нет? Можно поэкспериментировать, но как-то со временем туго, система работает почти круглосуточно. И вообще, как проверить факт реальной записи данных в файл БД (мимо дискового/сетевого кеша)?



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.039 c
11-1059059557
_Polymorphic_
2003-07-24 19:12
2004.04.11
KOLmdvXLGrid. Изменение размеров колонок.


14-1079589762
able
2004-03-18 09:02
2004.04.11
LPT - порт


14-1082099661
Igorek
2004-04-16 11:14
2004.04.11
Есть идея - супер мотоцикл! Критикуйте!


14-1079329482
MPS
2004-03-15 08:44
2004.04.11
Как узнать текущий курс валюты...


6-1079116891
KyRo
2004-03-12 21:41
2004.04.11
В чем ошибка конекта в WinSock





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский