Компрессия Бэкапа в SQL Server 2000

by Alexey Knyazev 1. октября 2010 01:44

Backup  CompressionСжатие резервных копий было впервые представлено в выпуске SQL Server 2008 Enterprise. Начиная с версии SQL Server 2008 R2, сжатие резервных копий поддерживается в выпуске SQL Server 2008 R2 Standard Edition и всех выпусках с более широкими возможностями. Сжатую резервную копию можно восстановить в любом выпуске SQL Server 2008 и более поздней версии. ( http://technet.microsoft.com/ru-ru/library/bb964719.aspx )

Для сжатия резервных копий в более ранних версиях использовались утилиты 3-их фирм (как правило платные). Но можно найти и бесплатные аналоги, например небольшая утилита от старого участника сообщества Russian SQL Server Club locky ( http://mcp.itcommunity.ru/blogs/rsug/archive/2010/06/28/110674.aspx ).


Можно сказать на коленке накидал небольшую процедуру на T-SQL, которая с помощью хранимой процедуры xp_cmdshell и бесплатного архиватора 7-zip сжимает резервную копию.



Собственно сама процедура dbo.BackupWithArchive

-- Создадим процедуру в контексте БД master
use master
go
-- Удаляем процедуру, еслиона существует
if object_id ( 'dbo.BackupWithArchive', 'P' ) is not null
  drop procedure dbo.BackupWithArchive
go

create procedure dbo.BackupWithArchive
(
    @BackupCommand nvarchar (4000) = 'help' -- стандартные команды бэкапирования
  , @BackupFile    nvarchar (1024) -- имя Backup-файла
  , @ArchCommand   nvarchar (128)  = ' a -r -mx ' -- параметры архивирования
  , @ArchFile      nvarchar (1024) -- имя архива 
  , @DeleteAfterArchive bit = 0    -- удаление бэкапа после архивирования
)
as
set nocount on

declare @archiver nvarchar (256)
      , @cmd nvarchar (512)
      , @file_exists int
      , @error int
      
  set @error = 0 
  -- Архиватор 7-zip ( http://www.7-zip.org/ )     
  set @archiver = N'"C:\Program Files\7-Zip\7z.exe"'

  -- Список параметров архивирования
  if ( @BackupCommand = 'help' ) or ( @BackupCommand = '?' )
  begin
    set @cmd =  @archiver + ' -?'
    exec @error = master..xp_cmdshell @cmd
    select @error = @@error where @@error != 0
    return @error
  end

  -- Само Бэкапирование в динамике
  exec @error = master..sp_executesql @BackupCommand
  select @error = @@error where @@error != 0
  if ( @error != 0 ) 
    return @error

  -- Проверяем существование Backup-файла
  set @file_exists = 0
  exec @error = master..xp_fileexist @BackupFile, @file_exists out
  select @error = @@error where @@error != 0
  if ( @file_exists = 0 ) or ( @error != 0 ) 
  begin
    select 'Backup-файл не найден!'
    return @error 
  end

  -- Само архивирование
  set @cmd =  @archiver + ' ' + @ArchCommand + ' ' + @ArchFile + ' ' + @BackupFile
  exec @error = master.dbo.xp_cmdshell @cmd
  select @error = @@error where @@error != 0
  if ( @error != 0 ) 
    return @error

  --Удаляем сам Бэкап
  if ( @DeleteAfterArchive = 1 )
  begin
    set @cmd = 'del ' + @BackupFile
    exec @error = master.dbo.xp_cmdshell @cmd
    select @error = @@error where @@error != 0
    return @error
  end

  return @error
go



Вызов процедуры более чем простой:

exec  dbo.BackupWithArchive
  @BackupCommand = 'backup database Northwind to disk = ''c:\Northwind.bak'''
, @BackupFile    ='c:\Northwind.bak'
, @ArchCommand     = ' a -r -mx '
, @ArchFile      = 'c:\Northwind.7z'
, @DeleteAfterArchive = 1


Теперь эту процедуру можно запускать по расписанию и на выходе иметь сжатые резерные копии

Tags: , ,

SQL Server

Комментарии (2) -

skorpk
skorpk Russia
01.10.2010 15:06:47 #

Не что подобное делал, но тока в качестве архиватора использовал winrar.

Reply

Александр
Александр Russia
03.08.2012 17:22:12 #

Подскажите при таком запуске 7зип отедает вест проц
возможно как-то запустить архиватор с пониженным приоритетом?

Reply

Pingbacks and trackbacks (1)+

Добавить комментарий

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading