Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Одновременный доступ к файлу БД, DBF 
:(
    Опции темы
GoBeer
Дата 6.12.2003, 11:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть файл .DBF на сетевом ресурсе (NetWare). Мне нужно его программно скопировать в другое место. С этим файлом постоянно работает куча операторов (read/write), файл достаточно велик и его копирование занимает некоторое время. Нужно ли принимать какие-либо меры при открытии файла для запрета доступа к нему другими пользователями?
  Вверх
podval
Дата 6.12.2003, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: нет
Всего: 62



Перенесено из "Алгоритмов".
PM WWW ICQ   Вверх
AntonSaburov
Дата 8.12.2003, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата
Нужно ли принимать какие-либо меры при открытии файла для запрета доступа к нему другими пользователями?


Обязательно. Иначе фигня получается. DBF не многопользователский вариант и надо самому принимать меры. И если работает много человек одновременно, то очень сложно - надо отрубать пользователей, потом делать эксклюзивный доступ к файлу, потом копировать, потом опять разрешать пользователям работу с базой - вообщем очень много проблем.

Поэтому совет на будущее - начинать сразу делать под SQL. Сейчас очень много Personal SQL-серверов - т.е. сервера работают локально на машине пользователя. Потом это перетащить на многопользовательский режим никаких трудов не представляет. И бэкап делать не проблема.
PM MAIL WWW ICQ   Вверх
VisualCraft
Дата 8.12.2003, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.11.2003

Репутация: нет
Всего: нет



AntonSaburov

"Сейчас очень много Personal SQL-серверов "

Но какие они тяжелые...

Посмотрите объем занимаемой памяти в менеджере процессов.
Как думаете для P1 75-100Mhz RAM 16Мб такой вариант (Personal SQL-сервер) сгодится?

А если не через специальный Engine (типа IB Express) работать, то еще нужно будет драйвер ставить, например BDE, ODBC, OLE DB.

А в случае VFoxPro DBF можно обойтись только ODBC и/или OLE DB, сохранив SQL ориентированность программы.
PM MAIL   Вверх
AntonSaburov
Дата 8.12.2003, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Здесь топик для выяснения совершенно определенного вопроса - и именно на него желательно отвечать.
PM MAIL WWW ICQ   Вверх
Guest
Дата 9.12.2003, 15:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(AntonSaburov @ 8.12.2003, 10:41)
Цитата
Нужно ли принимать какие-либо меры при открытии файла для запрета доступа к нему другими пользователями?


Обязательно. Иначе фигня получается. DBF не многопользователский вариант и надо самому принимать меры. И если работает много человек одновременно, то очень сложно - надо отрубать пользователей, потом делать эксклюзивный доступ к файлу, потом копировать, потом опять разрешать пользователям работу с базой - вообщем очень много проблем.

Код для копирования файлов взял из дельфового хелпа:
Код

   try
     AssignFile(f, fFrom);
     AssignFile(fnew, fTo);
     Reset(f, 1);
     ReWrite(fnew, 1);
     repeat
       BlockRead(f, Buf, SizeOf(Buf), NumRead);
       BlockWrite(fnew, Buf, NumRead, NumWritten);
       TotalNumWritten := TotalNumWritten + NumWritten;
       Proc := Round((TotalNumWritten/TotalNum)*100);
       tt := 'Êîïèðîâàíèå ôàéëîâ: ' + IntToStr(Proc) + '%';
       if (tt<>Status.Panels[1].Text) then begin
         Status.Panels[1].Text := tt;
         Status.RePaint;
       end;
     until (NumRead = 0) or (NumWritten <> NumRead);
   finally
     CloseFile(f);
     CloseFile(fnew);
   end;

Вопрос может ли файл измениться во время копирования? Неужели ОС (Novell 6.0) не предпринимает никаких мер по защите файла от одновременного доступа? Если нет, то можно ли это сделать программно?
  Вверх
AntonSaburov
Дата 9.12.2003, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата
Вопрос может ли файл измениться во время копирования


В том то и дело, что прекрасно может. Обычно при открытии файла для редактирования он чаще всего делается доступным для чтения для других. Например - справочники. Один редактирует а другие в этот момент берут из них информацию.
И также можно делать бэкап. В таком случае можно скопировать файл в тот момент, когда кто-то из него удаляет или меняет записи. Может оказаться. что запись одной половиной будет новая, а другой - старая. Или скопировать, что одна запись удалена, а другая еще нет, хотя должно быть либо обе, либо ни одной. Т.е. целостность данных не гарантируется. А это при бэкапе самое важное.

Поэтому в принципе надо пытаться открыть файл в эксклюзивном режиме - только тебе smile.gif

Кроме того, обычно база данных не содержит один файл. Таких файлов много. И тут вообще полная задница - обеспечить "одновременный слепок" всех таблиц - архинеприятная задача. Надо фактически блокировать ВСЕ таблицы.
Представляете сложность ?

SQL-сервер ПОЛНОСТЬЮ устраняет такую проблему - у него есть свои механизмы для таких задач.

Вообщем, если надо сдлеать бэкап одной таблицы, надо открыть этот файл в монопольном режиме, отрубив всех или разрешив только чтение, скопировать а потом отпустить файл опять.
Такое открытие обеспечивается вызовами API самой ОС. Про Novell сказать ничего не могу - не знаю. Но уверен, что такое возможно.
PM MAIL WWW ICQ   Вверх
GoBeer
Дата 9.12.2003, 16:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Дело в том, что сама программа работает под управлением windows, а файл читает с подключенного сетевого ресурса, который лежит на новеловском сервере. И я вообще не представляю можно ли программно лочить файл на сетевом ресурсе, который к тому же новеловский.

Про SQL-серверы я знаю немало smile.gif Просто здесь такая ситуация сложилась.
  Вверх
Wladislav
Дата 13.12.2003, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.10.2003

Репутация: нет
Всего: нет



у Foxа есть функции типа flock(), rlock(). Вначале закрываем файл на добавление новых записей, затем, постепенно, каждую запись...
PM MAIL   Вверх
IVM
Дата 29.12.2003, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 24.11.2003

Репутация: нет
Всего: нет



Цитата(Wladislav @ 13.12.2003, 14:30)
у Foxа есть функции типа flock(), rlock(). Вначале закрываем файл на добавление новых записей, затем, постепенно, каждую запись...

Зачем закрывать записи после закрытия файла? Закрытия файла недостаточно?
PM MAIL   Вверх
Wladislav
Дата 31.12.2003, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.10.2003

Репутация: нет
Всего: нет



Проверил - достаточно ;)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0758 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.