Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2011, 07:09   #1
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию Как скопировать файл, который занят другим приложением?

Здравствуйте.
Есть необходимость скопировать файл, но есть и проблема.

Суть проблемы:
- есть специфичное клиент-серверное приложение, написанное по заказу сторонними разработчиками;
- исходников, естественно, нету;
- приложение использует неизвестный формат БД (один файл ~80 мб);
- сервер постоянно запущен и останавливать его крайне нежелательно, а уж о постоянных остановках и речи быть не может;
- недавно появилась необходимость бэкапить БД;
- когда я пытаюсь скопировать файл с базой данных, мне ОС пишет, что данный файл занят другим процессом;
- то же самое происходит, когда я пытаюсь создать поток TFileStream к этому файлу

Подскажите пожалуйста, можно ли прочитать такой файл из своей программы (это в идеале), или существуют ли какие-нибудь утилиты для копирования таких файлов?
Greek9000 вне форума Ответить с цитированием
Старый 09.02.2011, 09:08   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

зависит от способа открытия БД...

Но, даже если файловая система и позволит это сделать - это будет НЕПРАВИЛЬНО.
В момент копирования могут быть незавершённые транзакции - возможно (теоретически) получить битый набор данных.
Для начала попробуйте воспользоваться штатными средствами Backup'а данных, имеющихся в Вашей СУБД (впрочем, если это самописная БД - тогда всё намного хуже ).

p.s. кстати, попробуйте скопировать файл (или просмотреть файл по ALT-F3) в Far Commander. Если он не сумеет этого сделать, значит СУБД открыто в монопольном режиме и скопировать (без остановки процесса) не получится...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.02.2011, 11:09   #3
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Для начала попробуйте воспользоваться штатными средствами Backup'а данных, имеющихся в Вашей СУБД (впрочем, если это самописная БД - тогда всё намного хуже ).

p.s. кстати, попробуйте скопировать файл (или просмотреть файл по ALT-F3) в Far Commander. Если он не сумеет этого сделать, значит СУБД открыто в монопольном режиме и скопировать (без остановки процесса) не получится...
Я подозреваю, что именно в монопольном режиме файл и открыт.
Собственно, я надеялся, что может быть есть возможность прочитать файловую систему (NTFS), найти все смещения для требуемого файла и побайтно считать его напрямую с жёсткого диска в обход операционки.
Такое, в принципе, возможно (т.е. есть такая физ. возможность и про это можно найти материалы в интернете)? Потому что, если не получится - то придётся изгаляться с ночными отключениями и запусками сервера приложений.

P.S. кстати, у меня ни разу нигде не ёкнуло, что могут остаться незавершённые транзакции. Большое спасибо за предупреждение.
Greek9000 вне форума Ответить с цитированием
Старый 09.02.2011, 11:28   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> то придётся изгаляться с ночными отключениями и запусками сервера приложений

или поставить RAID
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли понять используется ли файл другим приложением? Парсифаль Общие вопросы C/C++ 1 24.01.2011 12:31
Работа с другим приложением Станкевич Вадим Общие вопросы Delphi 2 17.05.2010 16:17
Файл занят другим процессом Adonidi Общие вопросы Delphi 4 25.03.2010 21:38
Как снять с файла признак что он занят другим пользователем Chelentano Microsoft Office Excel 1 12.08.2009 10:56
Как скопировать проект под другим именем? Dimoney Свободное общение 4 17.12.2007 13:50