Назад | Перейти на главную страницу

как скопировать базу данных sql server на тот же сервер

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

Мастер копирования базы данных не умеет копировать базу данных, он всегда отправляет забавные сообщения об ошибках об отсутствующих объектах (при использовании SMO ​​copy).

Когда я пытаюсь сделать резервную копию и восстановить ее под другим именем базы данных, он по-прежнему сохраняет имена файлов исходной базы данных и переопределяет это (сбой исходной базы данных).

Итак, как мне скопировать базу данных SQL? Выключить SQL Server, скопировать физические файлы и прикрепить их? Может быть, инструмент командной строки для копирования базы данных? Разве не должен быть простой способ сделать копию?

Сначала вам нужно определить логические имена файлов базы данных, выполнив sp_helpdb 'DBNAME' и посмотрев на столбец [Имя]. Вам необходимо идентифицировать файлы данных и журналов. Затем вам нужно выполнить полную резервную копию базы данных copy_only. Параметр только для копирования не является строго необходимым, но он предотвращает разрыв цепочки журналов в исходной базе данных. Затем вам нужно выполнить восстановление базы данных с помощью параметра MOVE, чтобы дать фактическим физическим файлам новые имена, чтобы они не конфликтовали с исходной базой данных.

Вот пример, который копирует базу данных [Scratch] в базу данных [Scratch_New]. Вам нужно будет настроить фактические пути резервного копирования и данных в зависимости от вашей установки SQL.

sp_helpdb 'Scratch'

-- From the resultset of this procedure I learned that the logical 
-- data file name is 'Scratch' and the logical log file name is 'Scratch_log'.

BACKUP DATABASE [Scratch] 
TO DISK='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Scratch_Full_Copy.bak' WITH COPY_ONLY 

RESTORE DATABASE [Scratch_New] 
FROM DISK='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Scratch_Full_Copy.bak'
  WITH MOVE 'Scratch' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\ScratchNew.mdf',
       MOVE 'Scratch_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\ScratchNew_Log.ldf'; 

Я использую SSMS для клонирования БД.

  1. Создайте резервную копию БД, которую вы хотите скопировать, и назовите ее, например. OriginalDB
  2. Щелкните правой кнопкой мыши OriginalDB, выберите task, затем Restore DB.
  3. В варианте Destination for restore, введите новое имя БД (например, NewDB) и в опции Source for restore выберите OriginalDB.

Это создаст NewDB, который является точной копией OriginalDB.