Имя: Пароль:
IT
Админ
Как скопировать базу данных, с продуктивной в копию MSSQL
,
0 Adept
 
04.08.15
16:25
Есть копия продуктивной, где всякие тесты проходят. Ну ее приходиться периодически доводить до состояния продуктивной, как правильно это делать средствами MSSQL, копированием, или экпортом данных? Или может есть еще какой способ?
1 Гёдза
 
04.08.15
16:26
бэкап - рестор
2 viraboy
 
04.08.15
16:27
Не совсем понятна задача. Еще есть репликация.
3 Adept
 
04.08.15
16:28
(2) Может и репликация, если асинхронная и в одну сторону.
Хотя скорее копия. Есть база продуктивная, в ней работают, а есть копия в ней проверяют ошибки проводят тесты, создаю тестовые документы, и так далее
4 ДенисЧ
 
04.08.15
16:29
Бекап. Только бекап.
5 Adept
 
04.08.15
16:33
С бекапом почему то проблема, не хочет восстанавливаться в другую БД, не в ту из которой сделан, тип бекапа полный.
6 ДенисЧ
 
04.08.15
16:35
7 Гёдза
 
04.08.15
16:37
(5) Читай BOL
8 Adept
 
04.08.15
16:39
Спасибо Денис, почему он у тебя резиновый? :)
(7) Был бы благодарен, за инструкцию типа (нажал там, потом там, потом там)
9 ДенисЧ
 
04.08.15
16:41
(8) Кто он? Это тебе руки поправить....
10 Adept
 
04.08.15
16:53
(9) Стареешь, а все так же тупишь :)
11 ДенисЧ
 
04.08.15
17:00
(10) Туплю как раз не я...
У меня любая база восстанавливается из бекапа без лишних вопросов...
12 Tateossian
 
04.08.15
17:02
DECLARE @BackUpPath AS VARCHAR(255)
DECLARE @MDF_Path AS VARCHAR(255)
DECLARE @LDF_Path AS VARCHAR(255)
DECLARE Del AS VARCHAR(255)
DECLARE @CreateDBName AS VARCHAR(32)
DECLARE @SQL AS VARCHAR(MAX)
SET @BackUpPath = N'D:\Back-up\upp_copy_del.bak'
--Указать путь к файлу БД
SET @MDF_Path = N'D:\SQL\upp_1.mdf'
--Указать путь к логу БД
SET @LDF_Path = N'D:\SQL\upp_1_log.ldf'
--Указать имя базы
SET @CreateDBName = 'upp_1'  
SET Del = 'del '+@BackUpPath

BACKUP DATABASE [upp]
TO  DISK = @BackUpPath WITH NOFORMAT,
INIT,  NAME = N'upp-Полная База данных Резервное копирование',
SKIP,
NOREWIND,
NOUNLOAD,
COMPRESSION,  
STATS = 10

USE [master]

SET @SQL = 'ALTER DATABASE ' + @CreateDBName + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE'
IF EXISTS(
  SELECT *
    FROM sys.databases
   WHERE name = @CreateDBName
) EXEC(@SQL)
RESTORE DATABASE @CreateDBName
FROM  DISK = @BackUpPath WITH  FILE = 1,  
MOVE N'upp' TO @MDF_Path,  
MOVE N'upp_log' TO @LDF_Path,  
NOUNLOAD,  
REPLACE,  
STATS = 10

SET @SQL = 'ALTER DATABASE ' + @CreateDBName + ' SET MULTI_USER'
IF EXISTS(
  SELECT *
    FROM sys.databases
   WHERE name = @CreateDBName
) EXEC(@SQL)

EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE

EXEC master..xp_cmdshell @del

EXEC sp_detach_db @dbname = @CreateDBName
     ,@skipchecks = 'true'
     ,@KeepFulltextIndexFile = 'false'

SET Del = 'del ' + @LDF_Path    
EXEC master..xp_cmdshell Del

EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE WITH OVERRIDE

EXEC sp_attach_db @dbname = @CreateDBName,
    @filename1 = @MDF_Path    
GO
13 Мыш
 
04.08.15
17:03
RESTORE DATABASE [BaseCopy]
FROM  DISK = N'C:\backup.bak'
WITH
    MOVE N'logical_name' TO N'C:\BASE\mainbase.mdf',
    MOVE N'logical_name_log' TO N'C:\BASE\mainbase_log.ldf',
    STATS = 5
GO
14 Мыш
 
04.08.15
17:04
Поправочка, сорри )

RESTORE DATABASE [BaseCopy]
FROM  DISK = N'C:\backup.bak'
WITH
    MOVE N'logical_name' TO N'C:\BASE\BaseCopy.mdf',
    MOVE N'logical_name_log' TO N'C:\BASE\BaseCopy_log.ldf',
    STATS = 5
GO
15 Tateossian
 
04.08.15
17:05
Поменяй путь к файлу и имя базы и юзай сей скрипт.

(13) Если уже есть такая база, то этот скрипт не взлетит.
16 Fish
 
04.08.15
17:06
(15) Не боишься давать гранату человеку, мягко говоря, не разбирающемуся в скуле?
17 Мыш
 
04.08.15
17:06
(15) Взлетает. Есть база, нет базы - не важно.
18 Мыш
 
04.08.15
17:07
(16) Да пусть выбирает. Лично я б поленился скрипт разбирать )
19 Мыш
 
04.08.15
17:09
(12) Кстати, логические имена тоже надо в переменные. Может не взлететь. В частности, вот этот кусок:

MOVE N'upp' TO @MDF_Path,  
MOVE N'upp_log' TO @LDF_Path,
20 Tateossian
 
04.08.15
17:11
(17) Нет.
Сообщение 3101, уровень 16, состояние 1, строка 33
Не удалось получить монопольный доступ, так как база данных используется.
Сообщение 3013, уровень 16, состояние 1, строка 33
RESTORE DATABASE прервано с ошибкой.
21 Adept
 
04.08.15
17:12
(12) Спасибо, погоняю в тестах - разберусь
(11) У меня будет через 2 часа, все восстанавливаться, ну а у тебя ничего не поменяться :)
22 Tateossian
 
04.08.15
17:12
(19) Согласен, это не универсальный скрипт, там можно много что загнать в переменные, хоть и вот это: N'upp-Полная База данных Резервное копирование'. Но в таком виде его можно все равно использовать.
23 ДенисЧ
 
04.08.15
17:13
(21) Жизнь боль...
В моём возрасте уже мало что меняется, только больничная карта пухнет
24 Мыш
 
04.08.15
17:14
(20) Ах да. Точно так. В этом случае рву соединения к базе. Всё равно это копия.
25 gigi789
 
04.08.15
17:27
Я так и не понял ни куя, зачем нужно накатывать регламентов бекап, Все твои изменения в конфе потрутся пойду..по кую
26 ЧеловекДуши
 
05.08.15
06:47
(0) Можешь через Бекап, Можешь через тупым копирование файлов БД. Детач - Атач
Все дело только в руках, копипастера. Судя того, что у вас проблема, руки у вас не до конца подточены :)
27 viraboy
 
05.08.15
09:01
Стоило начать с описания ошибки при восстановлении из бэкапа