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.