Необходимо менять базу [скрипты, файлы … неважно] и хочется подстраховаться? Копия нужна прямо сейчас, чтобы не тряслись коленки потом и можно было сделать “rollback”? Резервариус: сделай копию и делай, что хочешь! Универсальная система хранения копий любых файлов и папок. Поможет там, где нет смысла применять полноценную систему контроля версий или систему резервного копирования.
Хочу представить вам инструмент, которым уже давно пользуюсь в своей работе и считаю необходимым для каждого администратора и программиста.
Область применения
- Базы 1С всех версий.
- Базы сторонних программ (всякие налогоплательщики, пенсионки и прочие).
- Отдельные dbf файлы.
- Скрипты, файлы настроек.
- Любые файлы и папки с данными.
Плюсы
- Интегрирован в проводник (выбирайте нужные файлы и папки, чтобы отправить их в “Хранилище копий”).
- Поддерживается «drag and drop» на форму программы.
- Хранилище можно делать сетевым (при сохранении копии учитывается сетевое имя компьютера).
- Копии сжимаются замечательным архиватором 7-zip, интегрированным в программу.
- Перед копированием файлы блокируются на запись, что гарантирует целостность данных.
- Настраиваются исключения для файлов и папок при копировании.
Зачем
- Часто в работе возникает необходимость сделать снимок какой-нибудь группы файлов и отложить на полочку, чтобы потом, в случае чего, быстро оттуда достать.
- Если только это не исходники чего-либо, система контроля версий не подходит.
- Система резервного копирования тоже остается не удел, так как настраивается обычно для регулярной архивации определенного набора данных.
- Всегда было желание иметь некий инструмент для работы с такой полочкой. Что-то типа «одноразовой моментальной системы резервного копирования».
- Так возникла идея Резервариуса. Она была реализована и используется в моей практике вот уже 2 года как дополнение к системам резервного копирования и контроля версий.
Буду рад, если она пригодится кому-нибудь ещё.
С уважением, Алексей Карманов (helpme1c.ru)
а архиваторы 7zip, WinRAR не справляются с данной задачей?
(1) boolean,
со сжатием? Отлично справляются, именно поэтому я для сжатия использую любимый архиватор 7-zip, встроенный прямо в программу.
Раньше я так и делал. У меня была специальная папочка на компьютере (называлась, что-то типа «backup (manual)». И вот я каждый раз делал архив такой страховочной копии. Что мне не нравилось в таком подходе: нужно ручками правильно называть архив, прописывать число, указывать куда сохранять.
Помучался я так, а потом взял и написал Резервариус. Один раз настроил в нём папку для хранилища копий. Теперь, чтобы создать копию файлов и папок — я просто выделяю их в проводнике, меню отправить -> хранилище копий. Всё остальное Резервариус делает сам: называет с учетом пути к данным, указывает дату и время, жмет. Удобно получилось.
А потом я ещё и прикрутил, чтобы имя компьютера учитывалось. И сделал на всю локальную сеть на работе одно хранилище. Таким образом копии хранятся в одном месте, а создаваться могут на любом из компьютеров сети.
Подумал, что это не одному мне может быть полезно и выложил сюда.
(1) boolean,
плюс есть возможность задать исключения. Для баз 7.7 очень полезно: не нужно копировать те же cdx и всякие левые папки.
Ну и возможно самое главное: перед копированием набора файлов — сначала они все блокируются на запись, потом копируются и только потом разблокируются. Если просто жать архиватором — есть вероятность создать разсогласованную копию. Делая копии Резервариусом — можно быть уверенным в их целостности.
а под *nix оно работать будет? =)
(4) lamelioss,
Нет, к сожалению только Windows системы =))
А ведь действительно на *nix она была бы весьма кстати.
(5) вот вот )) я лет 6 назад писал что то похожее под линуху, напрягали всякие архиваторы ) если найду исходники, поделюсь )
(6) lamelioss, давай! Буду признателен =)) Было бы здорово сделать Резервариус кроссплатформенным.
(7) окей, старый винт найду, кину ))) или заново напишу на край 8)
(0) (3)
«перед копированием набора файлов — сначала они все блокируются на запись … можно быть уверенным в их целостности»(с)
Алексей (alexey.karmanov).
Опишите, пожалуйста, алгоритм блокировки для файловых версий 1С-а.
(0)
http://infostart.ru/public/15577/
http://infostart.ru/public/16158/
«сначала они все блокируются на запись»(с)
Алексей (alexey.karmanov).
1) Никакая «внешняя» блокировка не может обеспечить согласованную копию, если не учитывается логика блокировок самой СУБД.
2) Блокировка без учета логики блокировок СУБД приводит к подобным явлениям:
P.S. Ставлю «минус» под публикацию, дыбы обратить внимание потенциальных пользователей на мои замечания.
P.P.S. Жду от автора публикации ответа на (9) сообщение, чтобы убрать «минус».
(10) hogik,
или вы меня не до конца поняли, или я вас 🙂
Давайте на примере папки с базой какой-нибудь рассмотрим, пусть это будет 1С 7.7, там много файлов:
1) Вы нажимаете на папке с базой или на файлах базы правой кнопкой, отправить -> «Хранилище копий».
2) Резервариус составляет полный список файлов входящих в эту папку и пытается получить эксклюзивный доступ к каждому файлу (не попадающему под маску исключений).
3) Если хотя бы с одним файлом ему это не удается (например, база открыта в 1С Предприятии), то он пишет ошибку и отказывается создавать копию всей папки SSTDB.
4) Если эксклюзивный доступ ко всем файлам получен, то это означает, что они открыты на чтение в режиме разделения, при котором другие приложения могут только читать эти файлы, но не писать. Это значит, что после этого пункта ни 1С, ни какие другие приложения не смогут открыть базу и что-нибудь там менять, а будут писать ошибка эксклюзивного доступа, так как файлы уже заняты Резервариусом. Это я и имел под «блокируются на запись».
5) Все файлы жмутся в копию.
6) Эксклюзивная блокировка снимается.
(11)
«или вы меня не до конца поняли, или я вас 🙂 «(с)
Алексей (alexey.karmanov).
Оба. 🙂
1) Эксклюзивный режим открытия файла и блокировки некого «региона» файла — две большие разницы.
2) Открыть файл в эксклюзивном режиме невозможно, если он уже открыт в любом режиме.
3) Для файла открытого в эксклюзивном режиме понятие блокировка «региона» не имеет смысла.
4) 1С никогда не открывает файлы в разделенном режиме только для чтения.
5) В Win32 блокируется «регион» для «доступа» вообще, а не чтения и/или записи.
Дык, чего и как Вы открываете и блокируете?
(12) hogik,
1) я отрываю на чтение с эксклюзивным доступом весь файл, а не регион этого файла.
2) правильно, если он отрыт уже другой программой, у меня не получится получить эксклюзивный доступ к файлу и Резервариус напишет ошибку, что мол «возможно файлы заняты другой программой».
3) я и не говорил нигде ничего про блокировку «региона».
4) 1С не открывает, я открываю.
Приведу конструкцию на c#, в MSDN лень лезть сейчас искать
Stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
поток отрыт до конца копирования.
Попробуйте сами, откройте базу в 1С и у вас не получится её скопировать Резервариусом.
Теперь запустите копирование закрытой базы Резервариусом и у вас не получится её ничем больше открыть, пока Резервариус не закончит свою работу.
(12) hogik,
Я ещё раз хочу подчеркнуть, что Резервариус не ставит перед собой цель скопировать базу, которая УЖЕ открыта и обеспечить согласованность копии. Это действительно невозможно, поэтому в этом случае он и пишет ошибку.
Он будет копировать, только если база закрыта. И если он начнет копирование, то открыть базу в процессе этого не получится.
(13)
Алексей (alexey.karmanov).
«я отрываю на чтение с эксклюзивным доступом весь файл, а не регион этого файла»(с)
А где я написал про открытие региона? Вы чо? 😉
«я и не говорил нигде ничего про блокировку «региона». «(с)
Верно. Не говорили. Но, вы говорили про блокировку. А блокировка выполняется только для понятия «регион»: «The LockFile function locks a region in an open file. Locking a region prevents other processes from accessing the region.»
«Попробуйте сами, откройте базу в 1С и у вас не получится её скопировать Резервариусом.
Теперь запустите копирование закрытой базы Резервариусом и у вас не получится её ничем больше открыть, пока Резервариус не закончит свою работу. «(с)
Вот, думаю, ключевая Ваша фраза. 😉 Т.е. Ваша программа работает только, если в систем нет пользователей. Так? Тогда зачем говорить о блокировках файлов. Всё у Вас проще. Удалось открыть ВСЕ файлы в эксклюзивном режиме — копируем. Не удалось — не копируем.
(15) hogik,
Ну конечно же! Я, посмотрев список ваших работ, так и понял, что вас ввело в заблуждение слово блокируется на запись. Я имел в виду эксклюзивный доступ к файлу, а вовсе не LockFile.
Именно так и работает Резервариус: «Удалось открыть ВСЕ файлы в эксклюзивном режиме — копируем. Не удалось — не копируем.». Что и обеспечивает согласованность копии в конечном итоге.
(15) hogik, в следующей версии в описании исправлю слово «блокировка» на «эксклюзивный доступ», чтобы не вводить в заблуждение специалистов 🙂
(14)
Алексей (alexey.karmanov).
Вот Ваша фраза, которая путает:
«перед копированием набора файлов — сначала они все блокируются на запись, потом копируются и только потом разблокируются.»(с)
Т.е. файлы не блокируются, не блокируются на запись, не разблокируются.
Они, просто, открываются в эксклюзивном режиме. 🙂 Но, открываются ВСЕ, если удалось ВСЕ открыть. И только тогда делается копия.
Минус, конечно, снимаю под публикацией. Но, написать об эксклюзивном выполнении копирования, думаю, имеет смысл.
(15) hogik, и справедливости ради речь с моей стороны была фраза «блокируется на запись», а не «блокировка» 🙂
Потому, что не программисту эта фраза более понятна, чем «эксклюзивный доступ». Понял вас, распишу подробнее.
(16)
«Что и обеспечивает согласованность копии в конечном итоге.»(с)
Алексей (alexey.karmanov).
И вот этим не надо путать людей. 🙂 Т.к. если нет активных сессий, то получить НЕсогласованную копию не получится. А жаль… 🙂
Плюсую. За что? Всё просто. Мне тоже лень делать рутину, а тут автоматизация рутинной нудной работы (пусть кратковременной, но если подсчитать сколько я таких «горячих копий» делаю, то времени уходит много). Лень двигатель прогресса. Имхо, настоящий Айтишник должен быть ленивым, иначе он не Айтишник. Мы всё делаем для юзеров,а тут для нас. Короче, лови плюс.
(19)
«блокируется на запись»
Алексей (alexey.karmanov).
Нет такого понятия!!!
(20) hogik,
эту фразу я написал, чтобы подчеркнуть отличие копирования Резервариусом и просто скажем архиватором или проводником. Там эксклюзивный доступ к группе копируемых файлов не применяется и поэтому в процессе копирования файлы могут быть открыты субд, изменены и копия получится разсогласованной.
А если использовать Резервариус, который сначала открывает с эксклюзивным доступом, а потом копирует, то копия будет согласованной, благодаря именно этой защите от открытия.
То есть, вполне можно сказать, что эксклюзивный доступ обеспечивает согласованность копии.
(19)
Алексей (alexey.karmanov).
У Вас блокируется «на полный НЕ доступ».
(22) hogik, обещаю в самое ближайшее время описать всё по понятиям :)) Сейчас какое-нибудь изменение будет в программе и исправлю заодно. Всё же как ни крути, а утилита для айтишников. И описание должно быть грамотным. Спасибо.
Копии это наше все.
Почитал Вашу жаркую дискуссию.
Ничего нового я так и не увидел, все это можно организовать с помощью VBS или CMD + nncron, но для других думаю будет полезно. Плюс за старание =)
Спасибо за программу. Было бы замечательно если бы она еще и паролила архивы, указанным в настройках паролем.