Создание резервной копии файлового варианта базы 1с

Различные скрипты Powershell для облегчения повседневного администрирования

Создание резервной копии файлового варианта базы 1с

Сообщение admin » 25 июл 2015, 14:12

Добрый день!

Резервное копирование базы 1С является необходимостью. И чем больше резервных копий Вы будете иметь - тем проще и безболезненнее пройдет восстановление в случае какого-либо ЧП с базой. Если Вы используете файловый вариант базы 1С самым простым решением будет просто копировать файл 1Cv8.1CD в другую папку (диск/файловое хранилище/сетевую папку и т.п.). Для автоматизации этого занятия можно создать простой скрипт

Код: выделить все
robocopy "Путь к папке с базой" "Путь к папке, в которую будет скопирован файл" 1Cv8.1CD /S


Параметр /S указывается для того, чтобы не копировались пустые подпапки.

Но, если база разрастается до солидных объемов, а Вам необходимо хранить большую часть резервных копий целесообразно пользоваться архиватором для сжатия файла базы. Так как базы 1С состоят из текста, то они очень прилично сжимаются. Для архивирования можно выбрать WinRar или же бесплатный 7zip. Я остановил свой выбор на 7zip в основном потому, что он бесплатен и удобен для меня.

Код: выделить все
"C:\Program Files\7-Zip\7z.exe" a -m0=LZMA2:d=96m:fb=128 -mx=9 -mmt=8 "Путь к будущему архиву.7z" "Исходная папка с файлом базы\*.*"


Объяснение параметров архивирования
"C:\Program Files\7-Zip\7z.exe" - путь к архиватору
a -m0=LZMA2:d=96m:fb=128 -mx=9 -mmt=8 - параметры создаваемого архива, где
LZMA2 - метод сжатия
d=96m - размер словаря
fb=128 - размер слова
mx=9 - степень сжатия
mmt=8 - число потоков
"Путь к будущему архиву.7z" - путь к будущему архиву. Архив будет создан со стандартным расширением 7zip. Для создания архива в другом расширении необходимо использовать ключ -t и требуемое расширение. Например для создания архива zip необходимо использовать параметр -tzip
"Исходная папка с файлом базы\*.*" - путь к файлам для архивирования (в данном случае к папке с файлом базы 1с). *.* указывает на то, что будут заархивированы ВСЕ файлы в указанной папке. Вместо * можно указать имя файла, либо требуемое расширение.


Чтобы постоянно не следить за созданием резервных копий вы можете сделать уведомление о создании резервной копии себе на E-mail. Для этого в Powershell имеется все необходимое. Я пользуюсь Яндекс почтой, поэтому пример будет адаптирован для использования именно под Яндекс.

Код: выделить все
$smtp = New-Object System.Net.Mail.SmtpClient("smtp.yandex.ru", 587);
$smtp.UseDefaultCredentials = "False";
$smtp.Credentials = New-Object System.Net.NetworkCredential("your_login@yandex.ru", "your_password");
$smtp.EnableSsl = "True";
$msg = New-Object System.Net.Mail.MailMessage("your_login@yandex.ru", "komy", "tema", "text_mail");
$smtp.Send($msg);


Объяснение параметров отправки
$smtp = New-Object System.Net.Mail.SmtpClient("smtp.yandex.ru", 587); - указание, что создается письмо и указывается почтовый сервер и порт для подключения к почтовому серверу
$smtp.Credentials = New-Object System.Net.NetworkCredential("your_login@yandex.ru", "your_password"); - указываются, какие логин и пароль будут использоваться для подключения к почтовому серверу
$smtp.EnableSsl = "True"; - использование протокола SSL, который сейчас обязателен для большинства почтовых серверов
$msg = New-Object System.Net.Mail.MailMessage("your_login@yandex.ru", "komy", "tema", "text_mail"); - создается непосредственно письмо и указывается от имени кого и какому адресату оно будет отправлено. Тут же указывается тема и тело письма.
$smtp.Send($msg); - собственно команда отправки письма


Чаще всего резервные копии хранятся на другом жестком диске либо в сетевой папке или сетевом хранилище. С помощью Powershell можно отслеживать оставшееся свободное место и в письме указывать, сколько . Для этого в скрипте допишем:

Код: выделить все
New-PSDrive –Name ForBackup –PSProvider FileSystem –Root "путь_к_папке_назначения"
$for_backup = get-psdrive ForBackup
$free = $for_backup.Free/1GB
if ($free -lt 250) { $warning = "Заканчивается свободное место!" }
else { $warning = "Свободное место в норме" }
$body = "Свободное пространство - "+[string]$free+" GB"+"`n"+"`n"+"`n"+$warning+"`n"+" `n"+"========================================"


Объяснение параметров
New-PSDrive –Name ForBackup –PSProvider FileSystem –Root "путь_к_папке_назначения" - создаем подключение к папке для Powershell, указываем расположение этой папки (в качестве папки назначения могут выступать сетевое хранилище либо просто папка в сети. В таком случае путь будет - \\путь_до_папки
$for_backup = get-psdrive ForBackup - получим параметры диска
$free = $for_backup.Free/1GB - получим количество свободного места
if ($free -lt 250) { $warning = "Заканчивается свободное место!" }
else { $warning = "Свободное место в норме" }
- если свободное место меньше 250 ГБ, то об этом надо уведомить.
$body = "Свободное пространство - "+[string]$free+" GB"+"`n"+"`n"+"`n"+$warning+"`n"+" `n"+"========================================"[/code] - формируем текст письма, в котором будет указано сколько свободного места осталось, а также уведомление о том, что оно заканчивается, либо что оно еще в норме.


Если Вы будете использовать уведомление о свободном пространстве в папке назначения для резервных копий, то в строке для отправки письма "text_mail" необходимо будет заменить переменной $body. А также этот кусок кода необходимо разместить перед отправкой письма.

Таким образом полный скрипт будет выглядеть:

Код: выделить все
"C:\Program Files\7-Zip\7z.exe" a -m0=LZMA2:d=96m:fb=128 -mx=9 -mmt=8 "Путь к будущему архиву.7z" "Исходная папка с файлом базы\*.1CD*"
New-PSDrive –Name ForBackup –PSProvider FileSystem –Root "путь_к_папке_назначения"
$for_backup = get-psdrive ForBackup
$free = $for_backup.Free/1GB
if ($free -lt 250) { $warning = "Заканчивается свободное место!" }
else { $warning = "Свободное место в норме" }
$body = "Свободное пространство - "+[string]$free+" GB"+"`n"+"`n"+"`n"+$warning+"`n"+" `n"+"========================================"
$smtp = New-Object System.Net.Mail.SmtpClient("smtp.yandex.ru", 587);
$smtp.UseDefaultCredentials = "False";
$smtp.Credentials = New-Object System.Net.NetworkCredential("your_login@yandex.ru", "your_password");
$smtp.EnableSsl = "True";
$msg = New-Object System.Net.Mail.MailMessage("your_login@yandex.ru", "komy", "tema", $body);
$smtp.Send($msg);


После этого скрипт необходимо сохранить на диск в формате .ps1 и добавить его в планировщик заданий.

Удачного резервного копирования! :ugeek:
admin
Администратор
 
Сообщений: 2
Зарегистрирован: 23 сен 2012, 18:06

Создание резервной копии файлового варианта базы 1с

Сообщение Monicaseago » 09 ноя 2017, 04:00

Ой, так это что? Аркон пришел в Скетчап? Очень впечатляет. Буду пробовать.
penzluk, спасибо
Monicaseago
 
Сообщений: 4
Зарегистрирован: 30 сен 2017, 19:29
Откуда: Россия

Создание резервной копии файлового варианта базы 1с

Сообщение Shurikphymn » 29 ноя 2017, 07:02

врубил запланированную задачу, вродеб как обработалось часть тем, но дальше ошибка:
PHP Code:
Shurikphymn
 
Сообщений: 3
Зарегистрирован: 30 сен 2017, 02:30
Откуда: Россия

Создание резервной копии файлового варианта базы 1с

Сообщение GamePlaysl » 29 ноя 2017, 07:09

да, именно ее,
уже восстановил
но уснуть все равно не могу, чуть инфаркт не случился

ну первый раз в жизни сделал восстановление, до этого обычно все ломал
не буду флудить, успехов, спасибо
GamePlaysl
 
Сообщений: 2
Зарегистрирован: 26 сен 2017, 16:03
Откуда: Россия


Вернуться в Скрипты Powershell

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron