Конференция "Начинающим" » блокировка таблиц
 
  • igm.1963 © (25.03.19 15:13) [0]
    Добрый день.

    Есть работающая база на сервере. 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
    > костылей) в многопользовательском режиме.
    >

    Ну БДЕ возможно, где-то, когда-то, как-то и работает в многопользовательском режиме. Не буду спорить, но сильно сомневаюсь.
    Но тот урезанный Парадокс, который купил папаша Борланд уж точно не готов работать в многопользовательском режиме. Кроме некоторых отдельных случаев.
 
Конференция "Начинающим" » блокировка таблиц
Есть новые Нет новых   [98603   +20][b:0.002][p:0.001]