Visual FoxPro - Доступ к файлу запрещен

Наша ERP-система является гибридной. Фактические данные - это SQL, но таблицы, содержащие информацию о пользователях, профили, права, безопасность и т. д., находятся в Visual FoxPro.

Мне нужно получить эксклюзивный доступ к базе данных VFP. Я удаляю всех из системы с помощью самой программы, а она указывает, что все вне системы. Я получаю следующий ответ на следующий код:

set excl on
open data l:\M2MDATA\Util\util.dbc excl

Я получаю ответ: Доступ к файлу запрещен. Я зашел в диспетчер серверов, и ни у кого нет открытых файлов в нашем каталоге VFP.

Есть ли в VFP команда, которая позволит мне определить, кто/что открыл файл и/или способ убить любые сеансы в FoxPro, которые это делают?

Я пытался погуглить, но не повезло.


person DavidStein    schedule 26.08.2009    source источник


Ответы (8)


Возможно, вы захотите проверить Process Explorer от Sysinternals (Microsoft).

http://technet.microsoft.com/en-us/sysinternals/default.aspx

Вы можете использовать команду «Найти | Параметр меню File Handle или DLL и введите имя файла DBC. Process Explorer сообщит вам идентификатор процесса и процесс, в котором открыт файл.

Если вы делитесь файлом в сети (файловый сервер или одноранговая сеть), перейдите на «сервер» и запустите «Управление компьютером». Перейдите к разделу «Общие папки» > «Открыть файлы», и вы, надеюсь, увидите список файлов, открытых на компьютере другими пользователями в сети.

Рик

person Rick Schummer    schedule 28.08.2009

Как упомянул Джефф, одним может быть сбой на машине одного человека, и он отключается от сети. Сервер по-прежнему ДУМАЕТ, что файл открыт на каком-то низкоуровневом дескрипторе. Затем, когда пользователь повторно подключается, кажется, что все предыдущие настройки автоматически волшебным образом освобождаются, возвращаются в систему, после чего все кажется в порядке. Кроме того, проверьте С СЕРВЕРА в разделе «Управление компьютером», «Общие диски» и «У кого могут быть открыты файлы, даже если в противном случае у них могло быть неизящное отключение».

В качестве альтернативы предварительному тестированию такой исключительности в таблице вы можете попробовать выполнить запрос к .DBC, поскольку он тоже является не чем иным, как самой таблицей... Что-то вроде

nStatus = 0
try
   use L:\M2MData\Util\Util.dbc shared
   ** Ok so far, now try exclusive
   nStatus = 1
   use L:\M2MData\Util\Util.dbc EXCLUSIVE
   nStatus = 2

catch to loTrapMsg
   messagebox( "Can't get exclusive use of DBC" )

endtry 

if nStatus = 2
   ** you have exclusive use of it as a simple TABLE
   ** Now, what do you want to do
   use
   open database L:\M2MData\Util\Util.dbc EXCLUSIVE

endif 
person DRapp    schedule 27.08.2009

Возможно, какая-то программа дала сбой, когда база данных была открыта (оставив блокировку зомби), или база данных подключена через общий сетевой ресурс, который не освобождает ресурс.

В таких случаях мне обычно приходится либо перезагружать сервер, на котором расположена база данных, либо отключать/перемонтировать диск, на котором находится база данных (если он находится в SAN или на сетевом диске).

person Jeff Leonard    schedule 26.08.2009

Посмотрите на сайте поддержки Microsoft параметры уступающей блокировки сервера и кэшированного открытия. Вам может потребоваться установить EnableOplocks на 0 и CachedOpenLimit на 0, как описано в статьях. Кроме того, сканирование на вирусы при доступе печально известно подобными вещами.

В дополнение к упомянутому превосходному инструменту SysInternals Process Explorer я использую инструмент под названием UnLocker, который позволяет вам щелкнуть правой кнопкой мыши любой файл на сервере и увидеть процессы блокировки.

Существует также еще один инструмент SysInternals под названием «дескриптор», который запускается по запросу и дает много информации о том, какие процессы имеют дескрипторы для данного файла или файлов.

person Alan B    schedule 02.09.2009

Вы можете попробовать это:

  1. Перезагрузите сервер (если возможно). Сейчас этим никто не пользуется.

  2. Получите список таблиц, связанных с DBC, и напишите сценарий для открытия каждой таблицы отдельно и исключительно. Любое из открытий терпит неудачу?

  3. Возможно, одна из таблиц обратно связана с таблицей на другом сервере.

Просто некоторые идеи.

person user180011    schedule 28.09.2009

Возможно, стоит убедиться, что вы можете открыть его для общего доступа, чтобы убедиться, что это не проблема с разрешениями.

person Caltor    schedule 11.10.2011

Я получил это сообщение раньше, и проблема проста, запустите проводник Windows и попробуйте открыть папку, в которой находится файл. если вы не можете получить доступ к папке, визуальный foxpro тоже. Я предполагаю, что вы используете общую папку, поскольку вы упомянули, что используете диск L. cmiiw :)

person cakyus    schedule 19.10.2009

У меня была та же проблема (нет монопольного доступа к DBC), но другая причина.

Мы протоколируем доступ и определенные действия в текстовом файле, которые обрабатываются низкоуровневыми командами (FOPEN, FSEEK, FPUTS, FCLOSE, FCREATE). Мы делаем это с 1 апреля 2000 года, без каких-либо проблем.

После «серьезного неблагоприятного события в сети» наша система продолжала работать, но с невероятной скоростью. Каждое протоколируемое действие занимало около 5 минут. FoxPro, очевидно, повторял низкоуровневые процедуры в течение 5 минут и, наконец, пропустил их (кстати, без какого-либо уведомления).

Текстовый файл ни в коем случае не является частью самой базы данных. Тем не менее, DBC не был доступен с зомби-блокировкой с машины (выключенной), которая также была владельцем зомби-блокировки текстового файла. Блокировка DBC может быть снята только после того, как будет удалена блокировка файла xt.

Без понятия, как это связано, но потом все снова было хорошо и есть до сих пор. Сервер Novell Netware, с которым я не знаком.

person Klaus-Peter Thiele    schedule 18.05.2010