Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

блокировка таблиц


igm.1963 ©   (25.03.19 15:13

Добрый день.

Есть работающая база на сервере. BDE, таблицы PARADOX, всё работает хорошо.
Базу переносят на новый, более быстрый, сервер, все пользователи работают через удалённые рабочие столы, для них это просто переключение между серверами.
Операционная система та же [WIN SERVER 2012 R2 STD], та же конфигурация дискового пространства.

Педантично переносим все настройки, aliases приводим в полное соответствие.

При работе начинается блокировка взаимная блокировка пользователей, при этом, опция "закрывать таблицы после их использования" не помогает ни во включенном, ни в выключенном состоянии. Занятая таблица закрывается сразу после окончания её использования при сохранении накладной, блокировки подвисают в таблице блокировки, а не на самом файле.

Не думаю, что это первый случай такого сбоя.
Если есть опыт, подскажите, пожалуйста.

--
С уважением, Игорь.


igm.1963 ©   (26.03.19 06:46[1]

Тест по проблеме, переписка с программистом.
В тексте DBSRV и DC2 - серверы.

> Ситуация усложняется...
>
> Выполняю скрипт d:\solaris\db\scripts\testlock.pas (на dbsrv).
>
> Скрипт простой:
>
>
> var
>
>   table :ttable;
> begin
>
>   table :=  ttable.create(selfscript);
>   table.databasename := 'solaris.test';
>   table.tablename := 'pr_tovar.db';
>   table.open;
>
>   if not BDELockTable(table) then exit;
>  
>   bvMessage('Блокировка осуществлена');
>   BDEUnlockTable(table);
>   bvMessage('Блокировка завершена. Закрываем таблицу.');
>    
> end.
>
>
> Что делает:
>
> 1) открывает таблицу pr_tovar.db.
>
> 2) блокирует. Здесь, если блокировка не получается, скрипт висит до 20
> секунд,  потом  диалог, где говорит, что блокировка невозможна и, либо
> выходим,  либо  продолжаем блокировку. Если-таки не получится, то есть
> отказались, то скрипт завершает работу.
>
> 3)  если  заблокировал,  то  пишет  "Блокировка  осуществлена"  и ждет
> реакции пользователя. Пока пользователь думает, таблица заблокирована,
> и  скрипт тот же, выполняемый на другом юзере, будет висеть на попытке
> блокировки.
>
> 4).   как   только  нажимаем  Ok  в  окне  "Блокировка  осуществлена",
> происходит разблокировка таблица, но пока еще не закрытие её, и скрипт
> на  втором  юзере тут же заблокирует сам таблицу и напишет "Блокировка
> осуществлена".  У  нас  же  пока окно "Блокировка завершена. Закрываем
> таблицу".   Мы   можем   его   спокойно  закрыть,  тогда  таблица  уже
> закрывается, скрипт завершает работу.
>
> если  мы  снова  запустим  скрипт,  а у второго юзера окно "Блокировка
> осуществлена"  работает,  то  мы  сами зависнем на попытке блокировки,
> пока  второй скрипт не отпустит таблицу. Как только отпустит, мы сразу
> заблокируем.
>
> Это проверено как на DBSRV\DB, так и на SSD, так и на DC2.
>
> Что  озадачивает:  я  рассчитывал, что подтвердится мой прогноз, что в
> проблемных  местах  блокировка снимается только после закрытия таблиц,
> то  есть  мы  бы  увидели  невозможность блокировки вторым юзером даже
> после  закрытия  окошка  "Блокировка  осуществлена",  и  только  после
> закрытия окна "Блокировка завершена. Закрываем таблицу" мы бы получили
> возможность  блокировки.  Но  нет!  Всё  работает  как часы: один снял
> блокировку,   второй   тут   же   захватил,   потом  первый  не  может
> заблокировать,  пока  второй  не отпустит, и незакрытие таблиц никакой
> роли не играет.
>
> То  есть  проблема возникает где-то в процессе сохранения накладных на
> массовых  последовательных  блокировках  таблиц.  Опять  же:  на одних
> дисках норм, на других - не норм.

>


--


Германн ©   (27.03.19 02:57[2]


> igm.1963 ©   (25.03.19 15:13)

Ни BDE, ни тем более PARADOX не рассчитаны на многопользовательскую работу. Чёрт (не иначе) вас заставил использовать именно их.
Тем более лезть в весьма туманную область BDE-процедур.


bde engine   (27.03.19 09:09[3]

БДЕ прекрасно работает (работало) в многопользовательском режиме.
Парадокс тоже нормально работает в честном (без всяких rdp костылей) в многопользовательском режиме.

но проблема в том, что путешественник во времени (автор вопроса) переместился не в тот год.
ему бы лет на 19-20 пораньше надо было настроить свой потоковый конденсатор


Германн ©   (30.03.19 03:20[4]


> bde engine   (27.03.19 09:09) [3]
>
> БДЕ прекрасно работает (работало) в многопользовательском
> режиме.
> Парадокс тоже нормально работает в честном (без всяких rdp
> костылей) в многопользовательском режиме.
>

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


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо