Резюме
Этот сценарий был создан, чтобы упростить практику миграции базы данных основного веб-сайта между различными схемами базы данных. Этот скрипт будет выполнять следующие задачи:
- Резервное копирование последней хорошей версии вашей схемы с данными. (Пример: база данных разработчиков)
- Удалить целевую базу данных, если она существует
- Восстановить резервную копию в целевой тестовой базе данных
- Удалить все данные в целевой базе данных, несмотря на ограничения и внешние ключи
Инструкция по применению
Часть 1
Возможно, вы захотите получить код для этого из SSMS, используя диалог резервного копирования. Нажмите на значок в кружке, чтобы получить сценарий для вашего конкретного сценария.
- Если вы сделаете это, не забудьте установить «перезаписать» в параметрах резервного копирования перед созданием сценария - мы не хотим добавлять в резервный набор.
часть 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
----------------------------------------------------------------------------------------