PDA

Просмотр полной версии : Бэкап баз MS SQL (MS Sharepoint)


NetKot
01.11.2008, 13:44
В принципе не особо и нужно то - можно бэкапить средствами самого sharepoint через stsadm, но чес слово ленив я до ужаса, а баз много и называются как попало ...да и место жалко. Может кому пригодится.
1) делаем Job на MS SQL
2) в step - забрасываем скрипт:


-- Скрипт обрабатывает все базы на сервере, кроме tempdb, метод full backup

DECLARE
@DataBaseName SYSNAME,
@BackUpPath SYSNAME,
@RarPath SYSNAME,
@DirPath SYSNAME,
@TMP varchar (1000),
@PACK varchar (1000),
@MKDIR varchar (1000),
@FSO INT,
@BackUpSuffix SYSNAME,
@NewCatalog SYSNAME,
@year varchar (4), @month varchar (2), @day varchar (2)

----------------------------------------------
-- Путь к каталогу резервных копий баз данных, UNC пути не писать !:
SET @DirPath = 'C:\Backup'
-- -------------------------------------------
SET @year = CAST(DATEPART(Year, GetDate()) AS varchar)
SET @month = CAST(DATEPART(Month, GetDate()) AS varchar)
SET @day = CAST(DATEPART(Day, GetDate()) AS varchar)
EXEC xp_sprintf @BackUpSuffix OUTPUT, '%04s_%02s_%02s', @year, @month, @day
EXEC @FSO = sp_OACreate "Scripting.FileSystemObject", @FSO OUT
SET @NewCatalog = @DirPath + @BackUpSuffix + '\'
SET @MKDIR = 'mkdir ' + @NewCatalog
exec master..xp_cmdshell @MKDIR
-- --------------------------------------------
DECLARE Step_cursor CURSOR FOR SELECT [Name] FROM master..sysdatabases WHERE [Name]<>'tempdb'
OPEN Step_cursor
FETCH NEXT FROM Step_cursor INTO @DataBaseName
WHILE @@FETCH_STATUS = 0 BEGIN

-- Получение полных имён bak-файла и rar-файла:
SET @BackUpPath = @NewCatalog + @DataBaseName + '.bak'
SET @RarPath = @NewCatalog + @DataBaseName + '.rar'

-- Резервное копирование базы данных (получение bak-файла):
--BEGIN
BACKUP DATABASE @DataBaseName TO DISK = @BackUpPath WITH NOFORMAT, INIT, NAME = N'Full Database Backup' , SKIP, NOREWIND, NOUNLOAD, STATS = 10
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=@DataBaseName and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=@DataBaseName )
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database not found.', 16, 1) end
RESTORE VERIFYONLY FROM DISK = @BackUpPath WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
--END
-- Упаковка bak-файла (получение rar-файла):
--BEGIN
SET @PACK = '"D:\WinRAR\WinRAR.exe" A -DF -EP -M2 -MD4096 -MT2 -RI3 -RR4096 -ag+YYYY_MM_DD_HHMM_' + @RarPath + ' ' + @BackUpPath
print @PACK
exec master..xp_cmdshell @PACK
--END
-- Удаление bak-файла после его упаковки:
--BEGIN
EXEC sp_OAMethod @FSO, 'DeleteFile', NULL, @BackUpPath
--END
FETCH NEXT FROM Step_cursor INTO @DataBaseName
END
CLOSE Step_cursor
DEALLOCATE Step_cursor
-- Удаление объекта "Scripting.FileSystemObject", чистим память:
EXEC sp_OADestroy @FSO

NetKot
01.11.2008, 15:15
забыл совсем ... параметры WinRAR разные от версии к версии - так что лучше проверить ... у меня на боевом например так:

a -ep -rr4096 -m2 -md512 -ag+YYYY_MM_DD_HHMM_NN_

Erkin Kuchkarov
01.11.2008, 16:50
Да, но в этом случае Вы убираете нагрузку с админа шарепойнта и вешаете его обязанности на админа БД ;)
Это кризис на Вас так подействовал, что появилась необходимость совмещать обе эти функции?:)

NetKot
05.11.2008, 15:25
Верное замечание ... :(