Saturday, June 07, 2008

Бэкапирование баз MS SQL

Вчера закончил документировать реестр всех баз MS SQL, в котором для каждого сервера указал все БД и время выполнения заданий по их бэкапированию и месторасположением бэкап-файлов на локальном диске. Прежний админ MS SQL уволился, а нового админа еще не приняли на работу и я по мере своих сил и навыков смотрю за сиквел-базами.
После того как закончил данный реестр и более менее воткнулся в систему, решил задокументировать для себя существующий механизм бэкапирования базы MS SQL на локальный диск.

Итак, раз в неделю в вскр-е или в субботу производится полный бэкап баз и ежедневно дифференциальные. Перед тем как сделать полный бэкап базы, файл предыдущего бэкапа архивируется Rar-ом. Для чего необходимо разрешить MS SQL выполнять команды ОС, см.комменты.

Step-by-Step в SQL Server Management Studio на примере базы My_DB

1) Создание нового задания.
Сервер-> SQL Server Agent -> Jobs - New Job
Заполняем Name, Description, обращаем внимание на галочку в Enable (пока отключим ее, сняв галку, позже после создания задания и расписания включим)
Продолжение см. в комментах.

2 comments:

pinbol said...

2) Создание шага архивирования прежних бэкапов средствами RAR
Переходим на Steps слева:
New->Step Name ->RarArch
Type – Transact-SQL script (T-SQL)
Database-master
Command:
exec master..xp_cmdshell 'rar.exe m -ep "D:\Backups\my_db.rar" "D:\Backups\my_db.bak"'
go
OK
3) Создание шага создания полных бэкапов
New->Step Name ->Full-Backup
Type – Transact-SQL script (T-SQL)
Database-master
Command:
-- Для полного бэкапа
BACKUP DATABASE [My_db] TO DISK = N'D:\Backups\My_db.bak'
WITH NOFORMAT, INIT, NAME = N'My_db-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'My_db' and
backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'My_db' )
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''My_db'' not found.', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'D:\Backups\My_db.bak'
WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO

--
«OK»
4) Создание расписания выполнения задания.
Созданы 2 шага, переходим на Schedules слева
New->Name ->Full-Backup и задаем параметры времени выполнения, например, каждое воскресение с 01.00 час.
4) Создания оповещений об успешном/неуспешном выполнении задания.
Переходим на Notifications
Здесь среди прочего можно задать параметры отправки сообщения на эл.почту (галка Email) при условии выполнения, успешного или неуспешного завершения задания. Для того, чтобы выбрать получателя, мы должны завести его в SQL Server Agent - > Operators
->New
Все, задание для запуска полного бэкапа завершено.

Для дифференциального бэкапа создаем ежедневное задание по аналогии, но с ежедневным расписанием и с командой
--Для дифференцированного бэкапа
BACKUP DATABASE [My_db] TO DISK = N'N:
\Backups\My_db.bak' WITH
DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'My_db-Differential Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'My_db' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'My_db' )
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''My_db'' not found.', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'N:\Backups\My_db.bak' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO

pinbol said...

Для возможности выполнять команды ОС потребуется системная хранимая процедура xp_cmdshell, запуск которой по умолчанию запрещен. Для включения этой возможности:
-- Включение разрешения изменения расширенных опций.
EXEC sp_configure 'show advanced options', 1
GO
-- Обновление текущих настроек расширенных опций.
RECONFIGURE
GO
-- Включение возможности запуска внешних программ.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Обновление текущих настроек для запуска внешних программ.
RECONFIGURE
GO
------------------
Примеры для xp_cmdshell на msdn
http://msdn.microsoft.com/en-us/library/aa260689(SQL.80).aspx