J3qx

information archive

Every day restory MS SQL database

Posted by j3qx на Декабрь 10, 2016

ownerDB.txt

после рестора в сркрипте

use [DataBaseName]
go
exec sp_addrolemember ‘db_owner’, ‘user’
go

rename base 1S

#rename SQL dump for restore
#Data: 2014-12-03
#Source
$path_where = «J:\backup_exchange\daily\»
#destination
$path_to = «\\pd-db-15\exch-everyday\»

Get-ChildItem $path_where -Recurse | foreach {
$Name = $_.Name
if($Name.contains(«_backup»)-eq $true)
{
$Name = $_.name.Remove($_.name.IndexOf(«_backup»))
}
elseif($Name.contains(«_»+(get-date).tostring(«yyyy») -eq $true))
{
$Name = $_.name.Remove($_.name.IndexOf(«_»+(get-date).tostring(«yyyy»)))
}
Copy-Item -Path $_.fullname -Destination $path_to\$Name.bak
}

 

SQLDB_MAIN_restore.sql

 

USE [master]
GO

declare @backpath sysname
declare @dbname sysname

set @dbname = ‘AUTO-1S-MSK-MAIN-01’

declare @spid int
select @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname)
while @spid is not null begin
execute (‘kill ‘ + @spid)
select @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) and spid > @spid
end

if (exists (select name
from master.dbo.sysdatabases
where name = @dbname))
begin
exec(‘drop database [‘ + @dbname + ‘]’)
end

—тут заменить C:\share на локальный путь на сервере
set @backpath = N’K:\exch-everyday\1S-MSK-MAIN-01.bak’

—Следующий блок определяется для базы персонально.
—Имена фалов БД (N’DB-MAIN-01-MDF1′..) прицнипиальны смотрятся в свойствах базы.
—В этом примере 1 файл данных и 1 лог. Остальные закоментированы. Они тоже для примера.
—тут определить фалы, которое занимает база для переформотирования имени на диске
declare
@DB_MAIN_01_MDF1 sysname
,@DB_MAIN_01_LOG1 sysname
—другие файлы
,@DB_MAIN_01_MDF2 sysname
,@DB_MAIN_01_LOG2 sysname
,@DB_MAIN_01_MDF3 sysname
,@DB_MAIN_01_MDF4 sysname
set @DB_MAIN_01_MDF1 = N’K:\SQL-everyday-check\’+@dbname+N’.mdf’
set @DB_MAIN_01_LOG1 = N’K:\SQL-everyday-check\’+@dbname+N’_log.ldf’
set @DB_MAIN_01_MDF2 = N’K:\SQL-everyday-check\’+@dbname+N’2.mdf’
set @DB_MAIN_01_LOG2 = N’K:\SQL-everyday-check\’+@dbname+N’_log2.ldf’
set @DB_MAIN_01_MDF3 = N’K:\SQL-everyday-check\’+@dbname+N’3.mdf’
set @DB_MAIN_01_MDF4 = N’K:\SQL-everyday-check\’+@dbname+N’4.mdf’

—собственно команда восстановления,
RESTORE DATABASE @dbname
FROM DISK = @backpath WITH FILE = 1
, MOVE N’1S-MSK-MAIN’ TO @DB_MAIN_01_MDF1
, MOVE N’1S-MSK-MAIN_log’ TO @DB_MAIN_01_LOG1
, MOVE N’1S-MSK-MAIN2′ TO @DB_MAIN_01_MDF2
, MOVE N’1S-MSK-MAIN_log2′ TO @DB_MAIN_01_LOG2
, MOVE N’1S-MSK-MAIN3′ TO @DB_MAIN_01_MDF3
, MOVE N’1S-MSK-MAIN4′ TO @DB_MAIN_01_MDF4
, NOUNLOAD, STATS = 5

—Следующий блок перевод базы в симпл, и шринк. Необязательно.
declare @SQLQ nvarchar(255)
set @SQLQ = ‘ALTER DATABASE [‘ + @dbname + ‘] SET RECOVERY SIMPLE;’
EXECUTE(@SQLQ)
DBCC SHRINKDATABASE(@dbname)

SQLDB_restore.sql

 

USE [master]
GO

declare @backpath sysname
declare @dbname sysname

set @dbname = ‘AUTO-1S-MSK-MAIN-01’

declare @spid int
select @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname)
while @spid is not null begin
execute (‘kill ‘ + @spid)
select @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) and spid > @spid
end

if (exists (select name
from master.dbo.sysdatabases
where name = @dbname))
begin
exec(‘drop database [‘ + @dbname + ‘]’)
end

—тут заменить C:\share на локальный путь на сервере
set @backpath = N’K:\exch-everyday\1S-MSK-MAIN-01.bak’

—Следующий блок определяется для базы персонально.
—Имена фалов БД (N’DB-MAIN-01-MDF1′..) прицнипиальны смотрятся в свойствах базы.
—В этом примере 1 файл данных и 1 лог. Остальные закоментированы. Они тоже для примера.
—тут определить фалы, которое занимает база для переформотирования имени на диске
declare
@DB_MAIN_01_MDF1 sysname
,@DB_MAIN_01_LOG1 sysname
—другие файлы
,@DB_MAIN_01_MDF2 sysname
,@DB_MAIN_01_LOG2 sysname
,@DB_MAIN_01_MDF3 sysname
,@DB_MAIN_01_MDF4 sysname
set @DB_MAIN_01_MDF1 = N’K:\SQL-everyday-check\’+@dbname+N’.mdf’
set @DB_MAIN_01_LOG1 = N’K:\SQL-everyday-check\’+@dbname+N’_log.ldf’
set @DB_MAIN_01_MDF2 = N’K:\SQL-everyday-check\’+@dbname+N’2.mdf’
set @DB_MAIN_01_LOG2 = N’K:\SQL-everyday-check\’+@dbname+N’_log2.ldf’
set @DB_MAIN_01_MDF3 = N’K:\SQL-everyday-check\’+@dbname+N’3.mdf’
set @DB_MAIN_01_MDF4 = N’K:\SQL-everyday-check\’+@dbname+N’4.mdf’

—собственно команда восстановления,
RESTORE DATABASE @dbname
FROM DISK = @backpath WITH FILE = 1
, MOVE N’1S-MSK-MAIN’ TO @DB_MAIN_01_MDF1
, MOVE N’1S-MSK-MAIN_log’ TO @DB_MAIN_01_LOG1
, MOVE N’1S-MSK-MAIN2′ TO @DB_MAIN_01_MDF2
, MOVE N’1S-MSK-MAIN_log2′ TO @DB_MAIN_01_LOG2
, MOVE N’1S-MSK-MAIN3′ TO @DB_MAIN_01_MDF3
, MOVE N’1S-MSK-MAIN4′ TO @DB_MAIN_01_MDF4
, NOUNLOAD, STATS = 5

—Следующий блок перевод базы в симпл, и шринк. Необязательно.
declare @SQLQ nvarchar(255)
set @SQLQ = ‘ALTER DATABASE [‘ + @dbname + ‘] SET RECOVERY SIMPLE;’
EXECUTE(@SQLQ)
DBCC SHRINKDATABASE(@dbname)

 

Реклама

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

 
%d такие блоггеры, как: