Архивирование БД. v7. v8. DBF. SQL

Простые примеры архивирования БД. Простой вариант для решения резервного копирования DBF и SQL баз данных. Для автоматического резервного копирования достаточно добавить задание «планировщик заданий», которое будет выполняться раз в сутки, и установить WinRar.

Решение дает возможность создавать резервные копии «на лету» без выхода пользователей из БД. В выбранном каталоге создается семь копий рекурсивно, одна копия за каждый день недели. Также при наличии большого количества каталогов с БД, чтобы не писать для каждого пути свою команду, достаточно указать имя выше уровнем каталога.

Для SQl версии так же в выбранном каталоге создается семь копий рекурсивно, одна копия за каждый день недели, как самой БД, так и журнала транзакции, а после сжимается БД и журнал транзакции, что решает проблему растущего журнала транзакции для 8-ых версий.

Предварительно надо создать структуру каталогов для хранения архивов и логов на примере:

«E:Backup» — корневой каталог архива

«E:Backuplog» — каталог для логов

«E:BackupSklad» —  каталог для файлов *.rar архивов

«E:BackupDump» — каталог SQL архива

«E:BackupBUH»   — каталог для файлов *.rar архивов из примера для нескольких подкаталогов

 

Пояснения по командной строке WinRAR:

u                             — Обновить файлы в архиве

-m5                       — Установить метод сжатия

-r                            — Обрабатывать вложенные папки

-ed                        — Не добавлять пустые папки 

-dh                        — Открывать совместно используемые файлы

-y                           — Подразумевать ответ «Да» на все запросы

-ibck                      — Запустить WinRAR как фоновый процесс в системном лотке

-as                         — Синхронизировать содержимое архива

-ep2                      — Сохранять полные пути файлов

-agA                      — Добавить к имени архива текущую дату и время (А  — день недели)                           

-inul                      — Не выводить сообщения об ошибках

-ilogE:Backuplogerror.log      — Записывать протокол ошибок в файл  

E:BackupSkladdb_.rar             — создать файл архива

-x*Log*                                          — Не обрабатывать указанный файл

D:1C_DBDB*.*                           — путь к каталогу источнику

 


Первый пример. Создание rar архивов для каталог БД 1С DBF. Хранится 7 последних архивов.


::BackupDBF.bat
@ECHO OFF
cd E:Backup\r
ECHO Begin Backup: %DATE% %TIME% > E:Backuplogdb.log
:: создание rar архива для каталога D:1C_DBDB
"E:BackUpWinRARWINRAR.EXE" u -m5 -r -ed -dh -y -ibck -as -ep2 -agA -inul -ilogE:Backuplogerror.log E:BackupSkladdb_.rar -x*Log* D:1C_DBDB*.*
ECHO End Backup: %DATE% %TIME% >> E:Backuplogdb.log
ECHO. >> E:BackuplogDB.log

:: обход подкаталогов "DB_1 DB_2 DB_3 DB_4 DB_5" в каталоге "D:1C_DB" и создание rar архива для каждого найденого подкаталога в "DB_1 DB_2 DB_3 DB_4 DB_5"

ECHO Begin BackupBUH: %DATE% %TIME% >> E:Backuplogdb.log
for %%n in (DB_1 DB_2 DB_3 DB_4 DB_5) do (
For /F "delims=" %%A In ('Dir "D:1C_DB\%%n" /AD /B') Do (
"E:BackUpWinRARWINRAR.EXE" u -m5 -r -ed -dh -y -ibck -as -ep2 -agA -inul -ilogE:Backuplogerror.log E:BackupBuh\%%n_%%A_.rar -x*Log* D:1C_DB\%%n\%%A*.*
))
ECHO End BackupBUH: %DATE% %TIME% >> E:Backuplogdb.log

Второй пример. Создание архивов для БД 1С SQL и сжатие. Хранится 7 последних архивов.


::BackupSQL.bat
@ECHO OFF
cd E:Backup\r
ECHO Begin Backup: %DATE% %TIME% > E:Backuplogdb.log
:: создание архива для БД 1C SQL. Хранится 7 последних архивов.
set /a y=%date:~6,4%
set /a m=1%date:~3,2%-100
set /a d=1%date:~0,2%-100
set /a i=(%y%-1901)*365 + (%y%-1901)/4 + %d% + (!(%y% %% 4))*(!((%m%-3)#k8SjZc9Dxk&16))
set /a i=(%i%+(%m%-1)*30+2*(!((%m%-7)#k8SjZc9Dxk&16))-1+((65611044#k8SjZc9Dxk>#k8SjZc9Dxk>(2*%m%))#k8SjZc9Dxk&3))%%7+1
for %%n in (DB_1 DB_2 DB_3 DB_4 DB_5) do (
OSQL -Usa2 -Psqlsaktm -n -Q "BACKUP DATABASE [%%n] TO DISK = N'E:BackupDump\%i%_%%n.dat_bak' WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10" -o E:Backuplogdumps_%i%_%%n.log
OSQL -Usa2 -Psqlsaktm -n -Q "BACKUP LOG [%%n] TO DISK = N'E:BackupDump\%i%_%%n.log_bak' WITH FORMAT, INIT, NAME = N'%%n-Журнал транзакций Резервное копирование', SKIP, NOREWIND, NOUNLOAD, STATS = 10" -o E:Backuploglog_%i%_%%n.log
OSQL -Usa2 -Psqlsaktm -n -Q "DBCC SHRINKDATABASE(N'%%n', 10 )" -o E:Backuplogshrinkd_%i%_%%n.log
OSQL -Usa2 -Psqlsaktm -n -Q "DBCC SHRINKFILE (N'%%n_log' , 0, TRUNCATEONLY)" E:Backuplogshrinkt_%i%_%%n.log
)
ECHO End Backup: %DATE% %TIME% >> E:Backuplogdb.log

6 Comments

  1. AlexeyPapanov

    я в батниках не силен, объясните.

    для теста переписал батник, чтобы папка «D:1C_DB» архивировалась в «D:1C_backup».

    после запуска бат-файл создает архив с именем «db_2.rar» в папке «D:1C_backup».

    и еще создается файл D:1C_backuplogerror2.log размером как и сам созданный архив.

    для чего он нужен? ведь это получается копия архива. мы же его и так получили…

    как можно в имя создаваемого архива добавить дату и время создания?

    вот мой файлик:

    cd d:1C_backup\r
    ECHO Begin Backup: %DATE% %TIME% > D:1C_backuplogdb.log
    «D:1C_backupWinRARWINRAR.EXE» u -m5 -r -ed -dh -y -ibck -as -ep2 -agA -inul -ilogD:1C_backuplogerror.log D:1C_backupdb_.rar -x*Log* D:1C_DB*.*
    ECHO End Backup: %DATE% %TIME% >> D:1C_backuplogdb.log
    ECHO. >> D:1C_backuplogDB.log
    Reply
  2. LavinVadik
    Reply
  3. AlexeyPapanov

    спасибо вам за простой и понятный пример!

    а вы написали, что хранится последние 7 копий.

    а в коде я не нашел соответствующего параметра.

    как дописать еще удаление старых копий?

    Reply
  4. LavinVadik

    (3) El_Loco,

    вот ключ отвечает за номер копии -agA, то есть от 1 до 7

    если архив уже существует то он его обновляет, то есть архивирует только те файлы которые изменились.

    Reply
  5. PVG_73

    Чтобы решить «решает проблему растущего журнала транзакции для 8-ых версий» — нужно у БД SQL поставить модель восстановления Simple(Простая) в случае, если не используется дифференциальный бакап….

    А вообще для MS SQL удобно использовать планы обслуживания. Вот только хранение последних 7 архивов что-то не смог настроить через план — пришлось админу копирование отдельно настроить…

    Reply
  6. gunner_Hans

    +1 спасибо

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *