Ответ 1
использовать опцию копирования базы данных в студии управления SQL-сервером
Я создал базу данных на SQL-сервере и приложение для конечного пользователя в winforms С#. Он работает и работает нормально, но теперь меня попросили настроить тестовую версию для обучения новых сотрудников, чтобы они могли вводить фиктивные данные, пока они обучены, без реальной "реальной" базы данных.
Когда я установил базу данных, все ее скрипты были выполнены, но с тех пор все изменилось, и я больше не хочу, чтобы script все таблицы снова.
Есть ли быстрый и удобный способ дублирования базы данных (и ее данных) на том же сервере, но под другим именем?
EDIT (после сообщения Тони Хопкинсона)
Я дошел до этого
exec sp_addumpdevice 'Disk','MyDatabaseBackup',N'D:\MyDatabaseBackup'
Restore Database MyDatabase From MyDatabaseBackup With File = 1,
Move 'MyDatabase' To N'C:\Program Files\Microsoft SQL
Server\MSSQL11.SQLE\MSSQL\DATA\MyDatabaseTEST.mdf',
Move 'MyDatabase_Log' To N'C:\Program Files\Microsoft SQL
Server\MSSQL11.SQLE\MSSQL\DATA\MyDatabaseTEST_log.ldf',
NORECOVERY, NOUNLOAD, STATS = 10
RESTORE LOG [MyDatabaseTEST] FROM [MyDatabaseBackup] WITH FILE = 2, NOUNLOAD, STATS = 10
exec sp_dropdevice MyDatabaseBackup
Но я получаю следующее сообщение об ошибке
Msg 3234, уровень 16, состояние 2, строка 2 Логический файл "MyDatabase" не является частью базы данных "MyDatabase". Используйте RESTORE FILELISTONLY для отображения логических имен файлов. Msg 3013, уровень 16, состояние 1, строка 2 БАЗА ДАННЫХ RESTORE прекращается аномально. Msg 3154, уровень 16, состояние 4, строка 6 Набор резервных копий содержит резервную копию базы данных, отличной от существующей базы данных "MyDatabaseTEST". Msg 3013, уровень 16, состояние 1, строка 6 RESTORE LOG заканчивается анормально. Устройство сброшено.
использовать опцию копирования базы данных в студии управления SQL-сервером
Я обнаружил, что этот метод наиболее эффективен в SQL Server 2005 и 2008 Express Edition:
SSMS восстановит ваш файл .bak в новую базу данных в соответствии с именем, которое вы ему дадите.
Сначала сделайте полную резервную копию своей текущей базы данных, которая, конечно же, у вас есть.
Вы восстанавливаете его на другой
например. что-то вроде
exec sp_addumpdevice 'Disk','LiveDataBackup',N'Insert backup file name here including path'
Restore Database TestData From LiveDataBackup With File = 1,
Move 'LiveData' To N'Path to where sqlserver expects the mdfs to be\TestData.mdf',
Move 'LiveData_Log' To N'Path to where sqlserver expects the ldf to be\TaxData1.ldf',
NORECOVERY, NOUNLOAD, STATS = 10
RESTORE LOG [TestData] FROM [LiveDataBackup] WITH FILE = 2, NOUNLOAD, STATS = 10
exec sp_dropdevice LiveDataBackup
Предположим, что ваша живая база данных хитро названа LiveData и test, TestData.
Путь туда, где mdf и ldf будет зависеть от версии sql-сервера и имени экземпляра
Это должно быть что-то вроде C:\Program Files\Microsoft SQL Server\MSSQL11.DENALI\MSSQL\DATA\
MSSQL11, потому что он sql 2012, и DENALI - мое имя экземпляра, и оно было установлено по умолчанию в C:\Program Files
Также нет no с заменой, поэтому, если вы хотите запустить его снова, вам нужно сбросить тестовую базу данных.
Скорее всего, это можно сделать из графического интерфейса, но я обнаружил, что массивный PIA пытается связать пользовательский интерфейс с тем, что я хотел сделать.
используя MS SQLServer 2012, вам необходимо выполнить 3 основных шага
сначала сгенерируйте файл .sql, содержащий только структуру исходного DB
= > щелкните правой кнопкой мыши исходную БД и затем Задачи затем сгенерируют скрипты = > следуйте за мастером, и вы можете локально сохранить файл .sql
Во-вторых, замените в .sql файл исходной db на адрес назначения
= > щелкните правой кнопкой мыши по целевому файлу, откройте файл .sql и нажмите "Новый запрос" и Ctrl-H или (отредактируйте - найдите и замените - заменить Quack)
наконец, заполните данные
= > щелкните правой кнопкой мыши по БД деблокирования, затем Задачи, а затем Импорт данных = > Датчик данных источника данных установлен в ".net framework data procider for sql server" + установить текстовое поле строки подключения в DATA ex: Источник данных = Mehdi\SQLEXPRESS; Начальный каталог = db_test; Идентификатор пользователя = sa; Пароль = sqlrpwrd15
= > То же самое делать с пунктом назначения = > проверьте таблицу, которую вы хотите перенести, или установите флажок, кроме "source:.....", чтобы проверить все из них
вы закончили.
Вы можете следовать (this)
Вы хотите скопировать одно Database_Production в Database_Testing на том же сервере. Я бы взял базу данных database_production в качестве примера. Я успешно проверил его на своем сервере.
Во-первых, сделайте резервную копию базы данных Database_Production.
резервная база данных Database_Production на диск = 'H:\test\Database_Production.bark';
Во-вторых, восстановите Database_Production, и это может переименовать имя базы данных в Database_Testing.
восстановить базу данных Database_Testing с диска = 'H:\test\Database_Production.bark' WITH переместите "Database_Production_Data" в "H:\test\Database_Testing_Data.mdf", переместите "Database_Production_log" в "H:\test\Database_Testing_Data.ldf"; GO
Затем база данных Database_Production копируется в базу данных Database_Testing. Оператор MOVE вызывает восстановление данных и файла журнала в указанных местах. Вам не нужно создавать базу данных Database_Testing, и скрипт создаст ее.