Microsoft SQL server

Материал из СисадминВики (SysadminWiki.ru)
Перейти к: навигация, поиск

Резервное копирование баз данных одним скриптом на языке Transact-SQL

-- Декларируем переменные
declare @basename varchar(100)
declare @path varchar(150)
declare @i cursor

-- Заполняем курсор @i именами баз данных и открываем его
set @i = cursor scroll for select NAME from sys.databases where NAME not in ('model','msdb','master','tempdb')
open @i

-- Считываем в переменную @basename имя базы из курсора @i и запускаем цикл по статусу курсора
fetch next from @i into @basename
while @@FETCH_STATUS =0 begin

-- Заполняем переменную @path путём до файла для резервной копии базы и выполняем сам процесс копирования
set @path = 'd:\backup\'+@base+'.bak'
backup database @basename to disk = @path WITH NOFORMAT, INIT, NAME = @basename, SKIP, NOREWIND, NOUNLOAD, STATS = 10

-- Подключаемся к базе и сжимаем файл журнала до 7 МиБ - неработает :( 
-- USE @basename
-- DBCC SHRINKFILE (@basename_log,7)

-- Считываем в переменную @basename имя следующей базы из курсора @i и переходим к проверке условия цикла while
fetch next from @i into @basename
end

-- Закрываем курсор и запускаем этот скрипт на исполнение
close @i
GO

Вывод имён баз списком

select NAME from sys.databases where NAME not in ('model','msdb','master','tempdb')
GO