Резервное копирования в среде MS SQLEXPRESS

Резервное копирования в среде MS SQLEXPRESS
Задать вопрос
Наши специалисты ответят на любой интересующий вопрос по услуге

Добрый день мои дорогие читатели.

На днях перед мной встала задача сделать резервное копирования в SQLEXPRESS, но так как в данной версии в отличии от полной нет планировщика заданий скрипты пришлось писать самому + к этому необходимо было запланировать чтобы скрипты запускались в определенное время и через определенные промежутки.

И так что нам необходимо для того чтобы выполнить все действия:

  1. Установить Microsoft SQL Express Edition 2012
  2. Установить Microsoft SQL Managment Studio 2012
  3. прямые руки и голова на плечах.

Подробнее о задаче. 

Необходимо было сделать чтобы с двух баз снимались логи транзакций каждые пол часа (30мин). каждую ночь допустим в 01:00 снимался полный бекап базы ну и нужно было настроить задание на очистку жесткого диска для того чтобы не засерать сервер.

Ну начнем.

Для начала нам необходимо создать два текстовых файла, у которого в последствии нужно будет поменять расширение на .sql

В одном файле мы пишем скрипт на снятие логов в другом на снятие полного бэкапа.

Первый файл:

DECLARE @Diskstr varchar (255)
SET @Diskstr = 'C:\Backup\trn\1\log_' + replace(Convert(char(19), GETDATE(), 120),':','-') + '.bak' 
BACKUP LOG [test] TO  DISK = @Diskstr WITH NOFORMAT, NOINIT, NAME = N'test_log', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
DECLARE @Diskstr1 varchar (255)
SET @Diskstr1 = 'C:\Backup\trn\2\log_' + replace(Convert(char(19), GETDATE(), 120),':','-') + '.bak' 
BACKUP LOG [test_1] TO  DISK = @Diskstr1 WITH NOFORMAT, NOINIT, NAME = N'test_log', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO 

здесь мы создаем переменные, присваиваем им путь + добавляем к файлу дату и время ну и указываем как будет называться файл.

Далее пишем 2 файл:

DBCC CHECKDB (test)
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS
GO
DECLARE @Diskstr varchar (255)
SET @Diskstr = 'C:\Backup\full\1\Full_' + replace(Convert(varchar(19), GETDATE(), 120),':','-') + '.bak' 
BACKUP DATABASE [test] TO  DISK = @Diskstr WITH NOFORMAT, NOINIT,  NAME = N'test_full', SKIP, NOREWIND, NOUNLOAD,  STATS = 10,CHECKSUM
GO
DBCC SHRINKDATABASE (test)
GO
DBCC CHECKDB (test_1)
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS
GO
DECLARE @Diskstr1 varchar (255)
SET @Diskstr1 = 'C:\Backup\full\2\Full_' + replace(Convert(varchar(19), GETDATE(), 120),':','-') + '.bak' 
BACKUP DATABASE [test_1] TO  DISK = @Diskstr1 WITH NOFORMAT, NOINIT,  NAME = N'test_full', SKIP, NOREWIND, NOUNLOAD,  STATS = 10,CHECKSUM
GO
DBCC SHRINKDATABASE (test_1)
GO  

Здесь мы делаем проверку базы:

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTSGO

Здесь мы делаем тоже самое что и с файлом который отвечает за бэкап логов:

DECLARE @Diskstr varchar (255) 
SET @Diskstr = 'C:\Backup\full\1\Full_' + replace(Convert(varchar(19), GETDATE(), 120),':','-') + '.bak'  
BACKUP DATABASE [test] TO  DISK = @Diskstr WITH NOFORMAT, NOINIT,  NAME = N'test_full', SKIP, NOREWIND, NOUNLOAD,  STATS = 10,CHECKSUM  
GO

Далее мы делаем шринк базы данных для того чтобы база не росла в объеме:

DBCC SHRINKDATABASE (test)GO

ВСЕ скрипты мы написали: дальше нужно создать 2 исполняющих файла для того чтобы эти скрипты запускались.

В новый текстовый файл добавляем строку

sqlcmd -Usa -P1234567 -S SERVER\SQLEXPRESS -i "c:\SQL_Skript\log.sql"

где U - это имя пользователя на базы SQL (обычно он sa)

P - это пароль для пользователя

S - полное имя сервера

Также, необходимо указать, где лежит скрипт для снятия логов (в моем случае он лежит по пусти C:\SQL_Skript\log.sql)

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

sqlcmd -Usa -P1234567 -S SERVER1C\SQLEXPRESS -i "c:\SQL_Skript\full.sql"

как видите здесь все тоже самое что и в примере выше за исключением названия базы. После создания обоих файлов расширение с txt необходимо изменить на cmd

Дальше нам нужен исполняемый файл для того чтобы резервные копии не копились и удалялись после определенного срока,создаем новый текстовый файл в который делам такую запись:

@echo offforfiles -p "c:\BackUp\full" /M *.bak /C "cmd /c del /q/f @path" /d -30forfiles -p "c:\BackUp\trn" /M *.bak /C "cmd /c del /q/f @path" /d -2

здесь мы указываем путь где лежат резервные копии, расширение, и количество в ДНЯХ файлы старше указанных 30 и 2 дней будут удалятся.

Ну и в конечном итоге необходимо запланировать в обычном планировщике 3 задания на снятие логов, на бекап баз ну и на очистку устаревших файлов резервных копий.

Спасибо что были со мной.

Если статья оказалась полезной - поделись ссылкой с друзьями - кнопки ниже!

Цель нашей компании - предоставление высококачественных ИТ-услуг предприятиям малого и среднего бизнеса.