Как я могу клонировать базу данных SQL Server на том же сервере в SQL Server 2008 Express?
У меня есть система MS SQL Server 2008 Express, которая содержит базу данных, которую я хотел бы "скопировать и переименовать" (для целей тестирования), но я не знаю простого способа добиться этого.
Я замечаю, что в версии R2 SQL Server есть мастер копирования базы данных, но, к сожалению, я не могу обновить.
база данных, о которой идет речь, находится вокруг концерта.
Я попытался восстановить резервную копию базы данных, которую я хочу скопировать в новую базу данных, но не повезло.
13 ответов:
установите Microsoft SQL Management Studio, вы можете скачать его бесплатно с сайта Microsoft:
версия 2008
Microsoft SQL Management Studio 2008 является частью SQL Server 2008 Express с расширенными службами
версия 2012
клик скачать и проверьте ENU\x64\SQLManagementStudio_x64_ENU.exe
версия
клик скачать и проверьте MgmtStudio 64BIT\SQLManagementStudio_x64_ENU.exe
откройте Microsoft SQL Management Studio
- резервное копирование исходной базы данных в файл (db -> Task -> Backup).
- создать пустую базу данных с новым именем (клон).
- Нажмите, чтобы клонировать базу данных и открыть диалоговое окно восстановления (см. изображение)
![]()
- выберите устройство и добавьте файл bakcup из шага 1.
![]()
- изменить назначение для проверки базы данных
![]()
- изменить расположение файлов базы данных, она должна отличаться от оригинала. Вы можете ввести непосредственно в текстовое поле, просто добавьте постфикс. (Примечание: порядок имеет важное значение. Установите флажок, затем измените имена.)
![]()
- проверка с заменой и с KEEP_REPLICATION
![]()
щелкните правой кнопкой мыши базу данных для клонирования, нажмите кнопку
Tasks, нажмите кнопкуCopy Database.... Следуйте за мастером, и все готово.
вы можете попытаться отсоединить базу данных, скопировать файлы на новые имена в командной строке, а затем присоединить обе базы данных.
В SQL:
USE master; GO EXEC sp_detach_db @dbname = N'OriginalDB'; GOв командной строке (я упростил пути к файлам для этого примера):
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
оказывается, что я пытался восстановить из резервной копии неправильно.
Первоначально я создал новую базу данных, а затем попытался восстановить резервную копию здесь. То, что я должен был сделать, и что сработало в конце концов, состояло в том, чтобы вызвать диалоговое окно восстановления и ввести имя новой базы данных в поле назначения.
короче говоря, восстановление из резервной копии сделало трюк.
Спасибо за все отзывы и предложения ребята
это скрипт, который я использую. Немного сложно, но это работает. Протестировано на 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
используя MS SQL Server 2012, необходимо выполнить 3 основных шага:
во-первых, создать
.sqlфайл, содержащий только структуру исходной БД
- щелкните правой кнопкой мыши на БД, а потом задачи затем Сформировать Сценарии
- следуйте указаниям Мастера и сохранить локально
во-вторых, замените исходную БД на целевую в
.sqlfile
- щелкните правой кнопкой мыши на файл назначения, выберите Новый Запрос и Ctrl-H или (Edit -найти и заменить -быстрая замена)
наконец, заполнить данными
- Правой Кнопкой Мыши на целевой БД, затем выберите задачи и Импорт Данных
- выпадающий список источник данных установлен в "поставщик данных .net framework для SQL server " + установите текстовое поле строки подключения в разделе Data ex:
Data Source=Mehdi\SQLEXPRESS;Initial Catalog=db_test;User ID=sa;Password=sqlrpwrd15- сделать то же самое с пунктом
- проверьте таблицу, которую вы хотите передать или установите флажок, кроме " источник: ...- чтобы проверить их всех
вы сделали.
в SQL Server 2008 R2 создайте резервную копию базы данных в виде файла в папке. Затем выберите опцию восстановления, которая появляется в папке" база данных". В Мастере введите новое имя, которое требуется в целевой базе данных. И выберите Восстановить frrom файл и использовать файл, который вы только что создали. Я jsut сделал это, и это было очень быстро (мой DB был небольшим, но все же) Пабло.
ни одно из упомянутых здесь решений не работало для меня - я использую SQL Server Management Studio 2014.
вместо этого мне пришлось снять флажок "Take tail-log backup before restore" на экране "параметры": в моей версии он установлен по умолчанию и предотвращает завершение операции восстановления. После снятия флажка операция восстановления продолжалась без проблем.
если база данных не очень велика, вы можете посмотреть на команды "Script Database" в SQL Server Management Studio Express, которые находятся в контекстном меню самого элемента базы данных в проводнике.
вы можете выбрать, что все для сценария; вы хотите объекты и данные, конечно. Затем вы сохраните весь сценарий в один файл. Затем вы можете использовать этот файл для повторного создания базы данных; просто убедитесь, что
USEкоманда в верхней части установлена на правильный база данных.
еще один способ, который делает трюк с помощью мастер импорта/экспорта, выберите источник-это ваш сервер с исходной базой данных, а затем в пункте назначения выберите тот же сервер с целевой базой данных (вам нужно сначала создать пустую базу данных), затем нажмите Готово
Он будет создавать все таблицы и перенести все данные в новую базу данных,
решение, основанное на этом комментарии:https://stackoverflow.com/a/22409447/2399045 . Просто установите настройки: имя БД, папка temp, папка db files. А после запуска у вас будет копия БД с именем в формате "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
скрипт на основе ответа Джо (отсоединить, скопировать файлы, прикрепить оба).
- запустите Managment Studio от имени учетной записи администратора.
это не обязательно, но, возможно, доступ запрещен ошибка при выполнении.
- настройка sql server для выполнения xp_cmdshel
EXEC sp_configure 'show advanced options', 1 GO RECONFIGURE GO EXEC sp_configure 'xp_cmdshell', 1 GO RECONFIGURE GO
- запустите скрипт, но введите имена БД в
@dbNameи@copyDBNameпеременные перед.USE master; GO DECLARE @dbName NVARCHAR(255) = 'Products' DECLARE @copyDBName NVARCHAR(255) = 'Products_branch' -- get DB files CREATE TABLE ##DBFileNames([FileName] NVARCHAR(255)) EXEC(' INSERT INTO ##DBFileNames([FileName]) SELECT [filename] FROM ' + @dbName + '.sys.sysfiles') -- drop connections EXEC('ALTER DATABASE ' + @dbName + ' SET OFFLINE WITH ROLLBACK IMMEDIATE') EXEC('ALTER DATABASE ' + @dbName + ' SET SINGLE_USER') -- detach EXEC('EXEC sp_detach_db @dbname = ''' + @dbName + '''') -- copy files DECLARE @filename NVARCHAR(255), @path NVARCHAR(255), @ext NVARCHAR(255), @copyFileName NVARCHAR(255), @command NVARCHAR(MAX) = '' DECLARE @oldAttachCommand NVARCHAR(MAX) = 'CREATE DATABASE ' + @dbName + ' ON ', @newAttachCommand NVARCHAR(MAX) = 'CREATE DATABASE ' + @copyDBName + ' ON ' DECLARE curs CURSOR FOR SELECT [filename] FROM ##DBFileNames OPEN curs FETCH NEXT FROM curs INTO @filename WHILE @@FETCH_STATUS = 0 BEGIN SET @path = REVERSE(RIGHT(REVERSE(@filename),(LEN(@filename)-CHARINDEX('\', REVERSE(@filename),1))+1)) SET @ext = RIGHT(@filename,4) SET @copyFileName = @path + @copyDBName + @ext SET @command = 'EXEC master..xp_cmdshell ''COPY "' + @filename + '" "' + @copyFileName + '"''' PRINT @command EXEC(@command); SET @oldAttachCommand = @oldAttachCommand + '(FILENAME = "' + @filename + '"),' SET @newAttachCommand = @newAttachCommand + '(FILENAME = "' + @copyFileName + '"),' FETCH NEXT FROM curs INTO @filename END CLOSE curs DEALLOCATE curs -- attach SET @oldAttachCommand = LEFT(@oldAttachCommand, LEN(@oldAttachCommand) - 1) + ' FOR ATTACH' SET @newAttachCommand = LEFT(@newAttachCommand, LEN(@newAttachCommand) - 1) + ' FOR ATTACH' -- attach old db PRINT @oldAttachCommand EXEC(@oldAttachCommand) -- attach copy db PRINT @newAttachCommand EXEC(@newAttachCommand) DROP TABLE ##DBFileNames
вы можете просто создать новую базу данных, а затем перейти к задачам, импортировать данные и импортировать все данные из базы данных, которую вы хотите дублировать, в только что созданную базу данных.

Comments