Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как использовать списки параметров?  [new]
miasik
Member

Откуда: Украина, Донецк
Сообщений: 11
для автоматического восстановления БД из бекапа пишу скрипт.
как использовать в скрипте список из нескольких БД, чтобы восстановление выполнилось для каждой БД из списка?
и почему у меня тут переменную @db_name выделило розовым?

--Declarations
DECLARE @pref_name varchar(max)
DECLARE @db_name varchar(max)
DECLARE @suf_name varchar(max)
DECLARE @test_name varchar(max)
DECLARE @location varchar(max)
DECLARE @mdf_file varchar(max)
DECLARE @ldf_file varchar(max)

--Setting
SET @db_name='ckt'
SET @pref_name='1c'
SET @suf_name='day'
SET @test_name='test'
SET @location='D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA'
SET @mdf_file='.mdf'
SET @ldf_file='_log.ldf'

--Testing
SELECT @pref_name+'-'+@db_name AS DatabaseName,
	   @pref_name+'-'+@db_name+'-'+@test_name AS DatabaseTestName,
	   @db_name+'-'+@suf_name AS DeviceName,
	   @pref_name+'-'+@db_name+'-'+@test_name+@mdf_file AS DatabaseFile,
	   @pref_name+'-'+@db_name+'-'+@test_name+@ldf_file AS LogFile
	   

--Executing
--RESTORE FILELISTONLY 
  -- FROM "ckt-day" ;

--RESTORE DATABASE "1c-ckt-test"
	--from "ckt-day"
	--with move '1c-ckt' to 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\1c-ckt-test.mdf', 
	--move '1c-ckt_log' to 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\1c-ckt-test_log.ldf',
	--replace;
18 май 12, 11:46    [12575666]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
SELECT	 db_name()
	,db_name(1)
18 май 12, 13:53    [12576851]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
exec sp_msforeachdbuse [?]

-- Bla-bla-bla;
miasik
для автоматического восстановления БД из бекапа пишу скрипт.
Что-то мне подсказывает что создаётся новый ласапед.
18 май 12, 13:55    [12576883]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Почему у Вас все параметры varchar(max)?! И что представляет этот Ваш "список"?! Если при восстановлении третьей в списке из пяти бд будет ошибка, что делать с остальными?

ЗЫ. Огласите задачу, а не придуманный Вами способ ее решения.
18 май 12, 14:09    [12577029]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
miasik
Member

Откуда: Украина, Донецк
Сообщений: 11
Mnior
SELECT	 db_name()
	,db_name(1)
можно подробнее?
надо выполнить команду RESTORE для имени БД которое генерируется по шаблону.
т.е. db1, db2, db3 надо развернуть в db1-day, db2-day, db3-day
--Declarations
DECLARE @db_name varchar(max)
DECLARE @dev_name varchar(max)
DECLARE @suf_name varchar(max)

--Setting
SET @db_name='ckt'
SET @suf_name='day'
 
--Executing
SET @dev_name=@db_name+'-'+@suf_name
RESTORE FILELISTONLY FROM @dev_name
18 май 12, 14:10    [12577043]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
miasik
Member

Откуда: Украина, Донецк
Сообщений: 11
задача:
делать еженочный бекап 3х бд и поднимать эти бекапы в соответствующие тестовые бд.
т.е.
бд1->бекап->б1тест
бд2->бекап->б2тест
бд3->бекап->б3тест

вчера спрашивал тут https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=941675&hl=
теперь пишу скрипт
18 май 12, 14:14    [12577084]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
надо выполнить команду RESTORE для имени БД которое генерируется по шаблону.
т.е. db1, db2, db3 надо развернуть в db1-day, db2-day, db3-day


И что Вам мешает написать цикл?!
18 май 12, 14:32    [12577265]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
miasik
Member

Откуда: Украина, Донецк
Сообщений: 11
pkarklin
автор
надо выполнить команду RESTORE для имени БД которое генерируется по шаблону.
т.е. db1, db2, db3 надо развернуть в db1-day, db2-day, db3-day
И что Вам мешает написать цикл?!
отсутствие знания о циклах :-(
дайте пример или ссылочку почитать.
18 май 12, 14:33    [12577280]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
miasik
Member

Откуда: Украина, Донецк
Сообщений: 11
названия БД - db1, db2, db3 для примера написал
на самом деле они текстовые, их надо руками вписать куда-то.
а остальные параметры можно генерировать.
18 май 12, 14:36    [12577308]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
Glory
Member

Откуда:
Сообщений: 104751
miasik
на самом деле они текстовые, их надо руками вписать куда-то.

И откуда они попадут на сервер в ваш скрипт ?
18 май 12, 14:38    [12577323]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
3 базы?
легче три скрипта для каждой БД прописать и не городить огород, и зависимости не было бы.
Я понимаю когда БД более 10, тогда да лучше в цикле все записать.
18 май 12, 14:38    [12577324]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
miasik
Member

Откуда: Украина, Донецк
Сообщений: 11
я их сам могу в скрипт вписать. спрашиваю как это сделать.

сейчас 3, будет больше :-(
18 май 12, 14:56    [12577501]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Как я понимаю, динамика и циклы тут не причём. Нужно написать генератор, готорый создаст N скриптов для Job-а.
И только при изменении настроек просто перегенерить заново.

Только непонятно, а разве нет готовых мышко .."ориентированных" средств?
18 май 12, 17:33    [12579219]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
miasik
Member

Откуда: Украина, Донецк
Сообщений: 11
хочется все максимально автоматизировать.
создал такой скрипт восстановления. подозреваю, что в нем есть что оптимизировать.
задание архивирует каждую БД в устройство, потом запускает скрипт, который восстанавливает тестовые БД из этих устройств.
при появлении новой БД надо будет создать еще одно устройство, добавить БД в задание архивации и сюда.
CREATE PROCEDURE #spRestDB @db_name varchar(max)
AS
	DECLARE @pref_name varchar(max)='1c';
	DECLARE @suf_name varchar(max)='day';
	DECLARE @test_name varchar(max)='test';
	DECLARE @location varchar(max)='D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\';
	DECLARE @mdf_ext varchar(max)='.mdf';
	DECLARE @ldf_ext varchar(max)='.ldf';
	DECLARE @ldf_suf varchar(max)='_log';
	
	DECLARE @dev_name varchar(max)=@db_name+'-'+@suf_name;
	DECLARE @db_name_work varchar(max)=@pref_name+'-'+@db_name;
	DECLARE @db_name_test varchar(max)=@db_name_work+'-'+@test_name;
	DECLARE @new_mdf_file varchar(max)=@location+@db_name_test+@mdf_ext;
	DECLARE @new_ldf_file varchar(max)=@location+@db_name_test+@ldf_suf+@ldf_ext;
	DECLARE @old_ldf_file varchar(max)=@db_name_work+@ldf_suf
	
	RESTORE DATABASE @db_name_test FROM @dev_name
		with move @db_name_work to @new_mdf_file,
		       move @old_ldf_file to @new_ldf_file,
                       replace;
		
GO

execute #spRestDB 'ckt';
go
execute #spRestDB 'dkt';
go
execute #spRestDB 'central';
go
DROP PROCEDURE #spRestDB;
go
18 май 12, 18:11    [12579502]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
Glory
Member

Откуда:
Сообщений: 104751
список баз вообще то можно взять из системной таблицы sys.databases
18 май 12, 18:14    [12579523]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
miasik
Member

Откуда: Украина, Донецк
Сообщений: 11
Glory
список баз вообще то можно взять из системной таблицы sys.databases

там же все базы? а мне нужны только некоторые.
21 май 12, 10:38    [12586664]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
Glory
Member

Откуда:
Сообщений: 104751
miasik
Glory
список баз вообще то можно взять из системной таблицы sys.databases

там же все базы? а мне нужны только некоторые.

И кто определяет эти "некоторые" ?
И как это согласуется с "при появлении новой БД надо будет создать еще одно устройство" ?
21 май 12, 11:25    [12587054]     Ответить | Цитировать Сообщить модератору
 Re: как использовать списки параметров?  [new]
miasik
Member

Откуда: Украина, Донецк
Сообщений: 11
Glory
miasik
пропущено...там же все базы? а мне нужны только некоторые.
И кто определяет эти "некоторые"? И как это согласуется с "при появлении новой БД надо будет создать еще одно устройство" ?

новую базу я сам создаю, в любом случае.
если к ней надо применить механизм автоматического бекапа-рестора, то все ручные шаги тоже делаю я. т.е. создание устройства и добавление бд в скрипт.
21 май 12, 11:37    [12587160]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить