![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
GoBeer |
|
|||
Unregistered |
Есть файл .DBF на сетевом ресурсе (NetWare). Мне нужно его программно скопировать в другое место. С этим файлом постоянно работает куча операторов (read/write), файл достаточно велик и его копирование занимает некоторое время. Нужно ли принимать какие-либо меры при открытии файла для запрета доступа к нему другими пользователями?
|
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: нет Всего: 62 |
Перенесено из "Алгоритмов".
|
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Обязательно. Иначе фигня получается. DBF не многопользователский вариант и надо самому принимать меры. И если работает много человек одновременно, то очень сложно - надо отрубать пользователей, потом делать эксклюзивный доступ к файлу, потом копировать, потом опять разрешать пользователям работу с базой - вообщем очень много проблем. Поэтому совет на будущее - начинать сразу делать под SQL. Сейчас очень много Personal SQL-серверов - т.е. сервера работают локально на машине пользователя. Потом это перетащить на многопользовательский режим никаких трудов не представляет. И бэкап делать не проблема. |
|||
|
||||
VisualCraft |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 ориентированность программы. |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Здесь топик для выяснения совершенно определенного вопроса - и именно на него желательно отвечать.
|
|||
|
||||
Guest |
|
||||||
Unregistered |
Код для копирования файлов взял из дельфового хелпа:
Вопрос может ли файл измениться во время копирования? Неужели ОС (Novell 6.0) не предпринимает никаких мер по защите файла от одновременного доступа? Если нет, то можно ли это сделать программно? |
||||||
|
|||||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
В том то и дело, что прекрасно может. Обычно при открытии файла для редактирования он чаще всего делается доступным для чтения для других. Например - справочники. Один редактирует а другие в этот момент берут из них информацию. И также можно делать бэкап. В таком случае можно скопировать файл в тот момент, когда кто-то из него удаляет или меняет записи. Может оказаться. что запись одной половиной будет новая, а другой - старая. Или скопировать, что одна запись удалена, а другая еще нет, хотя должно быть либо обе, либо ни одной. Т.е. целостность данных не гарантируется. А это при бэкапе самое важное. Поэтому в принципе надо пытаться открыть файл в эксклюзивном режиме - только тебе ![]() Кроме того, обычно база данных не содержит один файл. Таких файлов много. И тут вообще полная задница - обеспечить "одновременный слепок" всех таблиц - архинеприятная задача. Надо фактически блокировать ВСЕ таблицы. Представляете сложность ? SQL-сервер ПОЛНОСТЬЮ устраняет такую проблему - у него есть свои механизмы для таких задач. Вообщем, если надо сдлеать бэкап одной таблицы, надо открыть этот файл в монопольном режиме, отрубив всех или разрешив только чтение, скопировать а потом отпустить файл опять. Такое открытие обеспечивается вызовами API самой ОС. Про Novell сказать ничего не могу - не знаю. Но уверен, что такое возможно. |
|||
|
||||
GoBeer |
|
|||
Unregistered |
Дело в том, что сама программа работает под управлением windows, а файл читает с подключенного сетевого ресурса, который лежит на новеловском сервере. И я вообще не представляю можно ли программно лочить файл на сетевом ресурсе, который к тому же новеловский.
Про SQL-серверы я знаю немало ![]() |
|||
|
||||
Wladislav |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 13.10.2003 Репутация: нет Всего: нет |
у Foxа есть функции типа flock(), rlock(). Вначале закрываем файл на добавление новых записей, затем, постепенно, каждую запись...
|
|||
|
||||
IVM |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 24.11.2003 Репутация: нет Всего: нет |
Зачем закрывать записи после закрытия файла? Закрытия файла недостаточно? |
|||
|
||||
Wladislav |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 13.10.2003 Репутация: нет Всего: нет |
Проверил - достаточно ;)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Общие вопросы по базам данных" | |
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |