Как можно клонировать базу данных SQL Server на том же сервере в SQL Server 2008 Express? - PullRequest
241 голосов
/ 30 сентября 2010

У меня есть система MS SQL Server 2008 Express, которая содержит базу данных, которую я хотел бы «копировать и переименовывать» (для целей тестирования), но я не знаю простого способа достижения этого.

Я заметил, что в версии SQL Server R2 есть мастер копирования баз данных, но, к сожалению, я не могу обновить.

База данных, о которой идет речь, - это концерт. Я попытался восстановить резервную копию базы данных, которую я хочу скопировать в новую базу данных, но безуспешно.

Ответы [ 13 ]

330 голосов
/ 09 октября 2014
  1. Установите Microsoft SQL Management Studio, которую можно бесплатно загрузить с веб-сайта Microsoft:

    Версия 2008

    Microsoft SQL Management Studio 2008 является частью SQL Server 2008 Express с расширенными службами

    Версия 2012

    Нажмите кнопку загрузки и отметьте ENU\x64\SQLManagementStudio_x64_ENU.exe

    Версия 2014

    Нажмите кнопку загрузки и выберите MgmtStudio 64BIT\SQLManagementStudio_x64_ENU.exe

  2. Открыть Microsoft SQL Management Studio .

  3. Резервное копирование исходной базы данных в файл .BAK (db -> Task -> Backup).
  4. Создать пустую базу данных с новым именем (клон). Обратите внимание на комментарии ниже, так как это необязательно.
  5. Нажмите, чтобы клонировать базу данных и открыть диалоговое окно восстановления (см. Изображение) restore dialog
  6. Выберите Устройство и добавьте файл резервной копии с шага 3. add backup file
  7. Изменить место назначения для проверки базы данных change destination
  8. Изменить расположение файлов базы данных, оно должно отличаться от исходного. Вы можете ввести прямо в текстовое поле, просто добавьте постфикс. (ПРИМЕЧАНИЕ. Порядок важен. Установите флажок и измените имена файлов.) change location
  9. Проверьте с помощью REPLACE и WITH KEEP_REPLICATION with replace
106 голосов
/ 30 сентября 2010

Щелкните правой кнопкой мыши базу данных, чтобы клонировать, нажмите Tasks, нажмите Copy Database....Следуйте указаниям мастера, и все готово.

82 голосов
/ 30 сентября 2010

Вы можете попытаться отсоединить базу данных, скопировать файлы в новые имена в командной строке, а затем присоединить обе базы данных.

В SQL:

USE master;
GO 
EXEC sp_detach_db
    @dbname = N'OriginalDB';
GO

В командной строке (Iупростили пути к файлам для этого примера):

copy c:\OriginalDB.mdf c:\NewDB.mdf
copy c:\OriginalDB.ldf c:\NewDB.ldf

В SQL снова:

USE master;
GO
CREATE DATABASE OriginalDB
    ON (FILENAME = 'C:\OriginalDB.mdf'),
       (FILENAME = 'C:\OriginalDB.ldf')
    FOR ATTACH;
GO
CREATE DATABASE NewDB
    ON (FILENAME = 'C:\NewDB.mdf'),
       (FILENAME = 'C:\NewDB.ldf')
    FOR ATTACH;
GO
27 голосов
/ 01 октября 2010

Оказывается, я попытался восстановить из резервной копии неправильно.

Сначала я создал новую базу данных, а затем попытался восстановить резервную копию здесь. Что я должен был сделать, и что сработало в конце, это вызвать диалог восстановления и ввести имя новой базы данных в поле назначения.

Короче говоря, восстановление из резервной копии сделало свое дело.

Спасибо за все отзывы и предложения, ребята

16 голосов
/ 14 марта 2014

Это скрипт, который я использую.Немного сложно, но это работает.Протестировано на SQL Server 2012.

DECLARE @backupPath nvarchar(400);
DECLARE @sourceDb nvarchar(50);
DECLARE @sourceDb_log nvarchar(50);
DECLARE @destDb nvarchar(50);
DECLARE @destMdf nvarchar(100);
DECLARE @destLdf nvarchar(100);
DECLARE @sqlServerDbFolder nvarchar(100);

SET @sourceDb = 'db1'
SET @sourceDb_log = @sourceDb + '_log'
SET @backupPath = 'E:\tmp\' + sourceDb + '.bak' --ATTENTION: file must already exist and SQL Server must have access to it
SET @sqlServerDbFolder = 'E:\DB SQL\MSSQL11.MSSQLSERVER\MSSQL\DATA\'
SET @destDb = 'db2'
SET @destMdf = @sqlServerDbFolder + @destDb + '.mdf'
SET @destLdf = @sqlServerDbFolder + @destDb + '_log' + '.ldf'

BACKUP DATABASE @sourceDb TO DISK = @backupPath

RESTORE DATABASE @destDb FROM DISK = @backupPath
WITH REPLACE,
   MOVE @sourceDb     TO @destMdf,
   MOVE @sourceDb_log TO @destLdf
9 голосов
/ 09 января 2015

Используя MS SQL Server 2012, вам нужно выполнить 3 основных шага:

  1. Сначала создайте .sql файл, содержащий только структуру исходной БД

    • щелкните правой кнопкой мыши исходную БД, а затем Задачи , затем Генерация сценариев
    • , следуйте указаниям мастера и сохраните файл .sql локально
  2. Во-вторых, замените исходную БД на целевую в файле .sql

    • Щелкните правой кнопкой мыши по файлу назначения, выберите Новый запрос и Ctrl-H или ( Редактировать - Найти и заменить - Быстрая замена )
  3. Наконец, заполните данные

    • Щелкните правой кнопкой мыши на целевой базе данных, затем выберите Задачи и Импорт данных
    • Данныев раскрывающемся списке источника установлено значение « .net Framework провайдера данных для сервера SQL » + установите текстовое поле строки подключения в поле «ДАННЫЕ», например: Data Source=Mehdi\SQLEXPRESS;Initial Catalog=db_test;User ID=sa;Password=sqlrpwrd15
    • выполните то же самое сtination
    • отметьте таблицу, которую вы хотите перенести, или установите флажок, кроме "source: ...", чтобы проверить все из них

Все готово.

8 голосов
/ 23 мая 2017

Ни одно из упомянутых здесь решений не сработало для меня - я использую SQL Server Management Studio 2014.

Вместо этого мне пришлось снять флажок «Делать резервные копии журнала перед восстановлением» на экране «Параметры»: в моей версии это проверено по умолчанию и не позволяет завершить операцию восстановления.После снятия флажка операция восстановления продолжалась без проблем.

enter image description here

6 голосов
/ 14 ноября 2012

В SQL Server 2008 R2 создайте резервную копию базы данных в виде файла в папке.Затем выберите вариант восстановления, который отображается в папке «База данных».В мастере введите новое имя, которое вы хотите в целевой базе данных.И выберите восстановление из файла и используйте файл, который вы только что создали.Я только что сделал это, и это было очень быстро (моя БД была маленькой, но все же) Пабло.

4 голосов
/ 15 февраля 2018

Решение, основанное на этом комментарии: https://stackoverflow.com/a/22409447/2399045. Просто установите настройки: имя БД, временная папка, папка файлов базы данных. И после запуска у вас будет копия БД с именем в формате «sourceDBName_yyyy-mm-dd».

-- Settings --
-- New DB name will have name = sourceDB_yyyy-mm-dd
declare @sourceDbName nvarchar(50) = 'MyDbName';
declare @tmpFolder nvarchar(50) = 'C:\Temp\'
declare @sqlServerDbFolder nvarchar(100) = 'C:\Databases\'

--  Execution --
declare @sourceDbFile nvarchar(50);
declare @sourceDbFileLog nvarchar(50);
declare @destinationDbName nvarchar(50) = @sourceDbName + '_' + (select convert(varchar(10),getdate(), 121))
declare @backupPath nvarchar(400) = @tmpFolder + @destinationDbName + '.bak'
declare @destMdf nvarchar(100) = @sqlServerDbFolder + @destinationDbName + '.mdf'
declare @destLdf nvarchar(100) = @sqlServerDbFolder + @destinationDbName + '_log' + '.ldf'

SET @sourceDbFile = (SELECT top 1 files.name 
                    FROM sys.databases dbs 
                    INNER JOIN sys.master_files files 
                        ON dbs.database_id = files.database_id 
                    WHERE dbs.name = @sourceDbName
                        AND files.[type] = 0)

SET @sourceDbFileLog = (SELECT top 1 files.name 
                    FROM sys.databases dbs 
                    INNER JOIN sys.master_files files 
                        ON dbs.database_id = files.database_id 
                    WHERE dbs.name = @sourceDbName
                        AND files.[type] = 1)

BACKUP DATABASE @sourceDbName TO DISK = @backupPath

RESTORE DATABASE @destinationDbName FROM DISK = @backupPath
WITH REPLACE,
   MOVE @sourceDbFile     TO @destMdf,
   MOVE @sourceDbFileLog  TO @destLdf
4 голосов
/ 30 сентября 2010

Если база данных не очень велика, вы можете посмотреть команды «База данных сценариев» в SQL Server Management Studio Express, которые находятся в контекстном меню рядом с элементом базы данных в проводнике.

Вы можете выбрать, что все для сценария; Вы хотите, чтобы объекты и данные, конечно. Затем вы сохраните весь скрипт в один файл. Затем вы можете использовать этот файл для повторного создания базы данных; просто убедитесь, что команда USE вверху настроена на соответствующую базу данных.

...