MS SQL 2008 - создание копии базы данных без данных - PullRequest
34 голосов
/ 12 октября 2010

В MS SQL Server 2008 R2, как мне создать новую базу данных на основе схемы старой, но без копирования каких-либо данных вместе с ней?Я использую SQL Server Management Studio.

Ответы [ 4 ]

49 голосов
/ 12 октября 2010

Щелкните правой кнопкой мыши базу данных и выберите Tasks -> Generate Scripts.

Затем вы можете выбрать все необходимые вам объекты или только определенные объекты.

Есть несколько параметров скрипта, на которые вы должны обратить внимание:

  • Script USE DATABASE - установите значение false, если вы создаете новую базу данных с другим именем.
  • Индексы и триггеры не являются сценариями по умолчанию
  • Вход в систему и разрешения на уровне объектов не являются сценариями по умолчанию
  • Создать сценарий для зависимых объектов - по умолчанию установлено значение false, но вы можете изменить его на true, чтобы все сценарии были сценариями.

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

8 голосов
/ 28 мая 2011

Резюме

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

  1. Резервное копирование последней хорошей версии вашей схемы с данными. (Пример: база данных разработчиков)
  2. Удалить целевую базу данных, если она существует
  3. Восстановить резервную копию в целевой тестовой базе данных
  4. Удалить все данные в целевой базе данных, несмотря на ограничения и внешние ключи

Инструкция по применению

Часть 1

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

  • Если вы сделаете это, не забудьте установить «перезаписать» в параметрах резервного копирования перед созданием сценария - мы не хотим добавлять в резервный набор.

enter image description here

часть 2

Не забудьте включить команду USE MASTER перед удалением целевой базы данных. Если вы запустите этот скрипт во второй раз за один сеанс SSMS, вы получите фатальную ошибку, если не включите эту команду. Мы также используем DROP DATABASE здесь, чтобы не только удалить устаревший TargetDB, но и удалить его файлы (обратите внимание, БД должна быть «активной», чтобы это работало)

часть 3

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

часть 4

Не используйте Truncate здесь - он не будет работать, если у вас есть внешние ключи

Исходный код (работает в SSMS)

----------------------------------------------------------------------------------------
-- CREATE AN EMPTY COPY OF DATABASE
----------------------------------------------------------------------------------------
/* PART 1: Backup the good database */
BACKUP DATABASE [OriginalDB] 
        TO  DISK = N'd:\backup.bak' WITH NOFORMAT, INIT,  
            NAME = N'OriginalDB-Full Database Backup', SKIP, 
        NOREWIND, NOUNLOAD,  STATS = 33
GO

/* PART 2: If your destination database already exists, drop it */
USE master -- Make sure to include this -- it allows you to reuse script in same SSMS session
DROP DATABASE [migration]

/* PART 3: Restore the backup to the new location */
RESTORE DATABASE [TargetDB] 
        FROM  DISK = N'D:\backup.bak' WITH  FILE = 1,  
        MOVE N'OriginalDB' TO N'D:\sql data\TargetDB.mdf',  
        MOVE N'OriginalDB' TO N'C:\SQL Data\TargetDB_1.ldf',  
        NOUNLOAD,  STATS = 33
GO

/* PART 4: Delete all tables' data in the migration testing target */
PRINT N'Clearing [TargetDB]'
USE [TargetDB]
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"       -- disable all constraints
EXEC sp_MSForEachTable "DELETE FROM ?"                  -- delete data in all tables
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"  -- enable all constraints
----------------------------------------------------------------------------------------
-- BLANK DATABASE COPY CREATED, READY FOR TESTING
----------------------------------------------------------------------------------------
4 голосов
/ 12 октября 2010

Есть хороший мастер скриптов, который может вам помочь. Вы можете попробовать это, щелкнув правой кнопкой мыши на базе данных из проводника объектов -> Задачи -> Создать сценарии. Вы можете выбрать, какие объекты из базы данных вы хотите экспортировать.

2 голосов
/ 12 октября 2010

В SQL Server Management Studio вы можете щелкнуть по меню на объекте и выбрать ...

"Script [Object] As" ... "CREATE to"... "New Query Window"

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

Если вы хотите выполнить весь лот, щелкните меню в базе данных и выберите

«Задачи» ... «Создать сценарии» и следуйте указаниям мастера в соответствии с этой статьей :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...