SQL Server 2012 копирует базу данных без данных
У нас есть база данных SQL Server 2012 с тестовыми данными, которые мы использовали для разработки веб-сайта. Вскоре нам нужно будет очистить базу данных и импортировать реальные данные, но мы много раз меняли дизайн базы данных во время веб-разработки, поэтому мы не можем использовать пустую копию, которую мы создали с самого начала!
Есть ли способ скопировать базу данных без данных, но со всем остальным (включая представления, функции SP, объекты безопасности и т.д.) и сбросить все индексы до начального значения дизайна? Другими словами, мы хотели бы сохранить базу данных точно так же, как она есть, но удалим все данные, reset все индексы таблицы с их первоначальными значениями исходного дизайна, а затем импортируем данные.
Любая помощь с благодарностью получила
Ответы
Ответ 1
- Щелкните правой кнопкой мыши свою базу данных на своем сервере и выберите
Tasks > Generate Scripts
.
- На шаге "Введение" нажмите "Далее".
- При выборе объектов вы можете выбрать либо всю базу данных (включая функции, и т.д.), либо указать, какие объекты вы хотите создать. В вашем случае вы должны выбрать
Script entire databases and all database objects
, а затем нажать "Далее".
- Выберите имя файла и пункт назначения, затем нажмите кнопку
- Обзор, а затем нажмите кнопку
- Готово!
Вы увидите файл .sql, сгенерированный в указанной папке. Вы можете открыть этот файл на других серверах и нажать "выполнить", тогда он будет генерировать точно такую же базу данных.
Ответ 2
Я знаю, что этот вопрос уже давно, но я считаю, что вы упускаете самый ценный ответ. Самый быстрый и простой способ подготовки пустого клона ваших данных возможен с помощью DBCC CLONEDATABASE. Тогда, согласно книгам в Интернете:
-
Создает новую целевую базу данных, которая использует ту же структуру файлов, что и исходный файл, но с размерами файлов по умолчанию из базы данных модели.
- Создает внутренний снимок исходной базы данных.
- Копирует системные метаданные из источника в базу данных назначения.
- Копирует всю схему для всех объектов из исходной базы данных назначения.
- Копирует статистику для всех индексов из исходной базы данных назначения.
СИНТАКСИС:
DBCC CLONEDATABASE
(
[Source_DB_Name]
,[Target_DB_Name]
)
WITH NO_STATISTICS, NO_QUERYSTORE, VERIFY_CLONEDB, BACKUP_CLONEDB
ПРИМЕЧАНИЯ:
-
Исходная база данных должна быть пользовательской базой данных. Клонирование системных баз данных (master, model, msdb, tempdb, распределенная база данных и т.д.)
не допускается.
Исходная база данных должна быть онлайн или читаемой.
База данных, которая использует то же имя, что и база данных клонов, еще не должна существовать.
Команда отсутствует в пользовательской транзакции.
- Требуется роль сервера SA
Вот хорошая статья о том, как ее использовать.
Второй вариант:
Следует использовать модуль PowerShell с именем dbatools.io, который можно получить непосредственно с веб-сайта проекта или из официальной галереи PowerShell.
Как только вы это сделаете, вы можете использовать эту команду:
Invoke-DbaDbClone
[-SqlInstance] <DbaInstanceParameter[]>]
[-SqlCredential] <PSCredential>]
[-Database] <String[]>]
[-InputObject] <Database[]>]
[-CloneDatabase] <String[]>]
[-ExcludeStatistics]
[-ExcludeQueryStore]
[-UpdateStatistics]
[-EnableException]
[-WhatIf]
[-Confirm] [<CommonParameters>]
Поскольку dbatools.io - это проект с открытым исходным кодом, вы можете увидеть, что именно происходит в фоновом режиме, благодаря их общедоступному репозиторию GitHub.
И здесь вы обнаружите, что они используют DBCC CLONEDATABASE(), чтобы выполнить суть этой операции (но дает вам возможность делать гораздо больше).
Ответ 3
Вы можете создать script для объектов базы данных, щелкнув его правой кнопкой мыши в Management Studio, затем перейдя в "Задачи", "Сгенерировать скрипты", выбрав объекты, которые вы хотите использовать script, например, Таблицы, Представления и т.д., и там у вас оно есть.
Ответ 4
Есть еще один способ, который занимает немного больше времени, но имеет свои преимущества. При использовании опции "Создать скрипты", как предлагали другие, мы получаем всю базу данных и таблицы script в текстовом файле ".sql".
Другой подход заключается в том, чтобы восстановить существующую базу данных в новый db. Затем вы можете удалить все данные в таблицах, используя пользовательский script, чтобы перебирать таблицы. Теперь у вас есть копия базы данных без каких-либо данных. Сделайте резервную копию этого, чтобы получить знакомый файл ".bak".
Ответ 5
Да! есть несколько способов сделать это. Вы можете попытаться скопировать базу данных, сбрасывать FK, обрезать таблицы и воссоздавать FK (есть SP, чтобы автоматизировать процесс усечения FK для распаковки/воссоздания, если вы можете его искать.)
Вы можете просто щелкнуть правой кнопкой мыши в MS и попытаться сгенерировать создание всей базы данных script (проверьте, выполнила ли она работу до 100%)
и самый надежный способ: используя VS, создайте новый пустой БД и используя инструмент сравнения схем для генерации diff script.