Как восстановить базу данных Sql Server 2008? - PullRequest
9 голосов
/ 03 ноября 2010

Я хочу сбросить базу данных sql server 2008, как при ее создании.все идентичности должны быть сброшены.Все данные в базе данных должны быть удалены.Есть ли способ сделать это?

Ответы [ 4 ]

5 голосов
/ 03 ноября 2010

Вы можете написать скрипт для удаления всех данных из таблиц и сброса значений идентификаторов (используя DBCC CHECKIDENT).Для этого есть несколько сценариев, поэтому я не буду изобретать велосипед - вот один пример .

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

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

1 голос
/ 04 сентября 2012

Ссылка AdaTheDev не совсем у меня сработала, но она поставила меня на правильный путь.

Вот что у меня получилось. Мне пришлось добавить оператор SET QUOTED_IDENTIFIER ON перед удалением.

/*Disable Constraints & Triggers*/
exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'

/*Perform delete operation on all table for cleanup*/
exec sp_MSforeachtable 'SET QUOTED_IDENTIFIER ON; DELETE ?'

/*Enable Constraints & Triggers again*/
exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'

/*Reset Identity on tables with identity column*/
exec sp_MSforeachtable 'IF OBJECTPROPERTY(OBJECT_ID(''?''), ''TableHasIdentity'') = 1 BEGIN DBCC CHECKIDENT (''?'',RESEED,0) END'
1 голос
/ 03 ноября 2010

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

в противном случае проще всего было бы восстановить резервную копию, которую вы должны были взять в начале (adathedev'sответ хороший).

1 голос
/ 03 ноября 2010

Reseed

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

truncate table table_name;
dbcc checkident (table_name, reseed, 0); /* next ID will be 1 */

Предложение по разработке

Я предлагаю, пока вы разрабатываете свое приложение (если это то, что вы делаете, так как вы спрашиваетевопрос по stackoverflow), чтобы также сценарии управления БД контроля версий.Я обычно определяю эти сценарии БД:

  1. Удаление БД
  2. Создание модели
  3. Создание функций
  4. Создание хранимых процедур
  5. Созданиестатические данные (данные справочных таблиц)
  6. Создание тестовых данных

Запуск по одному в том же порядке. Я всегда могу также пересоздать свою БД с тестовыми данными.И когда мне нужно развернуть мою БД, я просто запускаю сценарии с 1-5 и оставляю 6 из этого.Вы также можете автоматизировать это, создав файл bat, который вызывает команды sqlcmd.Вы можете легко запускать пакетные файлы из Visual Studio.

...