| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > Одновременный доступ к файлу БД |
| Автор: GoBeer 6.12.2003, 11:49 |
| Есть файл .DBF на сетевом ресурсе (NetWare). Мне нужно его программно скопировать в другое место. С этим файлом постоянно работает куча операторов (read/write), файл достаточно велик и его копирование занимает некоторое время. Нужно ли принимать какие-либо меры при открытии файла для запрета доступа к нему другими пользователями? |
| Автор: podval 6.12.2003, 18:13 |
| Перенесено из "Алгоритмов". |
| Автор: AntonSaburov 8.12.2003, 10:41 | ||
Обязательно. Иначе фигня получается. DBF не многопользователский вариант и надо самому принимать меры. И если работает много человек одновременно, то очень сложно - надо отрубать пользователей, потом делать эксклюзивный доступ к файлу, потом копировать, потом опять разрешать пользователям работу с базой - вообщем очень много проблем. Поэтому совет на будущее - начинать сразу делать под SQL. Сейчас очень много Personal SQL-серверов - т.е. сервера работают локально на машине пользователя. Потом это перетащить на многопользовательский режим никаких трудов не представляет. И бэкап делать не проблема. |
| Автор: VisualCraft 8.12.2003, 13:58 |
| AntonSaburov "Сейчас очень много Personal SQL-серверов " Но какие они тяжелые... Посмотрите объем занимаемой памяти в менеджере процессов. Как думаете для P1 75-100Mhz RAM 16Мб такой вариант (Personal SQL-сервер) сгодится? А если не через специальный Engine (типа IB Express) работать, то еще нужно будет драйвер ставить, например BDE, ODBC, OLE DB. А в случае VFoxPro DBF можно обойтись только ODBC и/или OLE DB, сохранив SQL ориентированность программы. |
| Автор: AntonSaburov 8.12.2003, 17:55 |
| Здесь топик для выяснения совершенно определенного вопроса - и именно на него желательно отвечать. |
| Автор: Guest 9.12.2003, 15:05 | ||||||
Код для копирования файлов взял из дельфового хелпа:
Вопрос может ли файл измениться во время копирования? Неужели ОС (Novell 6.0) не предпринимает никаких мер по защите файла от одновременного доступа? Если нет, то можно ли это сделать программно? |
| Автор: AntonSaburov 9.12.2003, 15:35 | ||
В том то и дело, что прекрасно может. Обычно при открытии файла для редактирования он чаще всего делается доступным для чтения для других. Например - справочники. Один редактирует а другие в этот момент берут из них информацию. И также можно делать бэкап. В таком случае можно скопировать файл в тот момент, когда кто-то из него удаляет или меняет записи. Может оказаться. что запись одной половиной будет новая, а другой - старая. Или скопировать, что одна запись удалена, а другая еще нет, хотя должно быть либо обе, либо ни одной. Т.е. целостность данных не гарантируется. А это при бэкапе самое важное. Поэтому в принципе надо пытаться открыть файл в эксклюзивном режиме - только тебе Кроме того, обычно база данных не содержит один файл. Таких файлов много. И тут вообще полная задница - обеспечить "одновременный слепок" всех таблиц - архинеприятная задача. Надо фактически блокировать ВСЕ таблицы. Представляете сложность ? SQL-сервер ПОЛНОСТЬЮ устраняет такую проблему - у него есть свои механизмы для таких задач. Вообщем, если надо сдлеать бэкап одной таблицы, надо открыть этот файл в монопольном режиме, отрубив всех или разрешив только чтение, скопировать а потом отпустить файл опять. Такое открытие обеспечивается вызовами API самой ОС. Про Novell сказать ничего не могу - не знаю. Но уверен, что такое возможно. |
| Автор: GoBeer 9.12.2003, 16:03 |
| Дело в том, что сама программа работает под управлением windows, а файл читает с подключенного сетевого ресурса, который лежит на новеловском сервере. И я вообще не представляю можно ли программно лочить файл на сетевом ресурсе, который к тому же новеловский. Про SQL-серверы я знаю немало |
| Автор: Wladislav 13.12.2003, 14:30 |
| у Foxа есть функции типа flock(), rlock(). Вначале закрываем файл на добавление новых записей, затем, постепенно, каждую запись... |
| Автор: IVM 29.12.2003, 17:49 | ||
Зачем закрывать записи после закрытия файла? Закрытия файла недостаточно? |
| Автор: Wladislav 31.12.2003, 19:28 |
| Проверил - достаточно ;) |