Last active
March 22, 2018 11:45
-
-
Save Konctantin/dc67dd92dfcdeb7f6695c38d45e51169 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ALTER PROCEDURE [dbo].[pTHP_BackupKCMOD] | |
| @isFullBackup tinyint = 0 -- признак полного выполнения | |
| AS | |
| BEGIN | |
| SET NOCOUNT ON; | |
| declare @arxTdl table(dbName nvarchar(7), isFull tinyint not null default 0, prioritet tinyint); | |
| -- Основная база данных | |
| insert into @arxTdl (dbName, prioritet) values ('kcmod', 1); | |
| -- 3 последних месяца | |
| insert into @arxTdl (dbName, prioritet) | |
| select top 3 name, 2 from sys.databases | |
| where patindex('arx[0-9][0-9][0-1][0-9]', name) > 0 | |
| order by name desc; | |
| -- Для остальных делаем бекапы, если они старше 2 месяцев | |
| insert into @arxTdl (dbName, prioritet) | |
| select top 2 dbName, 3 | |
| from sys.databases | |
| left join kcmod.dbo.nvTHP_DBBackup on dbName = name | |
| where patindex('arx[0-9][0-9][0-1][0-9]', name) > 0 | |
| and name not in (select dbName from @arxTdl) | |
| and DATEDIFF(month, DataLastBackup, GetDate()) > 2 | |
| order by isnull(DataLastBackup, '19010101') desc; | |
| -- полные бекапы делаем только по субботам или принудительно, | |
| -- но для архивов с высшим приоритетом | |
| update @arxTdl set isFull = 1 where prioritet < 3 | |
| and (datepart(dw, getdate()) = 6 or @isFullBackup = 1); | |
| -- Обрабатываем список баз | |
| declare @db nvarchar(7), @fullname nvarchar(250), @fullBackName nvarchar(250), @fname nvarchar(250), | |
| @isFull tinyint, @fexists int, @pth nvarchar(250); | |
| select @pth = KodStr from dbo.nvVagPrivatDob where KodPos = 50 and mnkd = 'BPATH'; | |
| while (select count(*) from @arxTdl) > 0 begin | |
| select top 1 | |
| @db = dbName, | |
| @isFull = isFull, | |
| @fullBackName = @pth+@db+N'.bak' | |
| from @arxTdl | |
| order by prioritet, dbName desc; | |
| -- Проверяем наличие полного бекапа, если его нет, то никакой речи не может быть о разностном | |
| EXEC master.dbo.xp_fileexist @fullBackName, @fexists OUTPUT; | |
| if cast(@fexists as bit) <> 1 | |
| set @isFull = 1 | |
| -- Формируем имя и полный путь к файлу, в который будем делать копию | |
| set @fname = @db + case when @isFull = 1 then N'.bak' | |
| else N'_' + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(30),GETDATE(),20),'-',''),':',''),' ','') + N'.diff' end | |
| set @fullname = @pth + @fname; | |
| -- select * from kcmod..nvTHP_DBBackup | |
| if not EXISTS (SELECT DBName from dbo.nvTHP_DBBackup WHERE DBName = @db) | |
| INSERT INTO dbo.nvTHP_DBBackup (DBName, FileBaseName, ZaprosBackup,DataLastBackup) VALUES (@db,@fname,0,NULL) | |
| BEGIN TRY | |
| print(@fullname); | |
| IF @isFull = 1 BEGIN | |
| BACKUP DATABASE @db TO DISK = @fullname WITH COMPRESSION, INIT, STATS = 10; | |
| -- запись в таблицу журнала успешного выполнения | |
| UPDATE dbo.nvTHP_DBBackup SET FileBaseName = @fname,ZaprosBackup = 2,DataLastBackup = GETDATE(), | |
| DataLastFullBackup = GETDATE(), LastResult = 'успешно' WHERE DBName = @db; | |
| END ELSE BEGIN | |
| BACKUP DATABASE @db TO DISK = @fullname WITH DIFFERENTIAL, NOFORMAT, NOINIT, SKIP, COMPRESSION, STATS = 10; | |
| -- запись в таблицу журнала успешного выполнения | |
| UPDATE dbo.nvTHP_DBBackup SET FileBaseName = @fname,ZaprosBackup = 2,DataLastBackup = GETDATE(), | |
| LastResult = 'успешно' WHERE DBName = @db; | |
| END | |
| END TRY | |
| BEGIN CATCH | |
| -- запись в таблицу ошибки выполнения | |
| UPDATE dbo.nvTHP_DBBackup SET FileBaseName = @fname,ZaprosBackup = 0,DataLastBackup = NULL, | |
| DataLastFullBackup = NULL,LastResult = ERROR_MESSAGE() WHERE DBName = @db; | |
| END CATCH | |
| delete from @arxTdl where dbName = @db; | |
| end; | |
| -- чистка старых файлов разностных копий (удаляем старше 2х дней) | |
| declare @delDate varchar(19); | |
| set @delDate = convert(varchar(19), dateadd(dd, -2, getdate()), 126); | |
| EXECUTE master.dbo.xp_delete_file 0, @pth, N'diff', @delDate, 0 -- удаление backup | |
| END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment