Лучший способ скопировать базу данных (SQL Server 2008)


тупой вопрос-каков наилучший способ копирования экземпляров в среде, где я хочу обновить сервер разработки с экземплярами с рабочего сервера?

Я сделал резервное копирование-восстановление, но я слышал отсоединение-копирование-прикрепление, и один парень даже сказал мне, что он просто скопирует файлы данных между файловыми системами....

являются ли эти три (или два, последний звучит как подозрительный) принятые методы?

Я так понимаю, что второй метод быстрее, но требует простоя на источнике из-за отсоединения аспекта.

кроме того,в этой ситуации (требуется точная копия производства на сервере dev) какова принятая практика передачи Логинов и т. д.? Должен ли я просто создавать резервные копии и восстанавливать пользовательские базы данных + master + msdb?

9 72

9 ответов:

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

Если вы не можете отсоединить производственную БД, вы должны использовать резервное копирование и восстановление.

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

вы можете использовать среду SQL Server Management Studio для создания сценариев, создающих необходимые имена входа. Щелкните правой кнопкой мыши на логине, который вам нужно создать, и выберите Script Login As / Create.

это будет список осиротевших пользователей:

EXEC sp_change_users_login 'Report'

Если у вас уже есть логин и пароль для этого пользователя, чтобы исправить это:

EXEC sp_change_users_login 'Auto_Fix', 'user'

Если вы хотите создать новый логин и пароль для этого пользователя, чтобы исправить это делать:

EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password'

самый простой способ на самом деле скрипт.

запустить это на производстве:

USE MASTER;

BACKUP DATABASE [MyDatabase]
TO DISK = 'C:\temp\MyDatabase1.bak' -- some writeable folder. 
WITH COPY_ONLY

эта одна команда делает полную резервную копию базы данных в один файл, не вмешиваясь в доступность производства или расписание резервного копирования и т. д.

чтобы восстановить, просто запустите это на своем dev или тестовом SQL Server:

USE MASTER;

RESTORE DATABASE [MyDatabase]
FROM DISK = 'C:\temp\MyDatabase1.bak'
WITH
MOVE 'MyDatabase'   TO 'C:\Sql\MyDatabase.mdf', -- or wherever these live on target
MOVE 'MyDatabase_log'   TO 'C:\Sql\MyDatabase_log.ldf',
REPLACE, RECOVERY

затем сохраните эти сценарии на каждом сервере. Удобство в один клик.

Edit:
если вы получаете ошибка при восстановлении, что логические имена не совпадают, вы можете получить их следующим образом:

RESTORE FILELISTONLY
FROM disk = 'C:\temp\MyDatabaseName1.bak'

если вы используете учетные записи SQL Server (а не проверку подлинности windows), вы можете запускать это после восстановления каждый раз (на машине dev/test):

use MyDatabaseName;
sp_change_users_login 'Auto_Fix', 'userloginname', null, 'userpassword';

обновление:
Мой совет ниже рассказывает вам, как создать сценарий БД с помощью SQL Server Management Studio, но настройки по умолчанию в SSMS пропускают все виды важных частей базы данных (например, индексы и триггеры!) по какой-то причине. Итак, я создал свою собственную программу для правильного сценария базы данных, включая почти все типы объектов БД, которые вы, возможно, добавили. Я рекомендую использовать это вместо этого. Он называется SQL Server Scripter и его можно найти здесь:
https://bitbucket.org/jez9999/sqlserverscripter


Я удивлен, что никто не упомянул об этом, потому что это действительно полезно: вы можете дампа базы данных (схемы и data) в сценарий, используя среду SQL Server Management Studio.

щелкните правой кнопкой мыши базу данных, выберите "задачи | создание сценариев...", а затем выберите для сценария конкретных объектов базы данных. Выберите те, которые вы хотите скопировать в новую БД (вы, вероятно, хотите выберите хотя бы таблицы и схемы). Затем на экране " установить параметры сценариев "нажмите" Дополнительно", прокрутите вниз до" типы данных для сценария "и выберите"схема и данные". Нажмите кнопку ОК и завершите создание сценария. Вы увидите, что это теперь сгенерировал длинный скрипт для вас, который создает таблицы базы данных и вставляет данные в них! Затем вы можете создать новую базу данных и изменить USE [DbName] заявление в верхней части скрипта, чтобы отразить имя нового база данных, в которую вы хотите скопировать старую. Запустите скрипт и старая схема базы данных и данные будут скопированы в новую!

Это позволяет вам делать все это из среды SQL Server Management studio, и нет необходимости прикасаться к файловой системе.

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

  1. создайте пустую базу данных в локальном sql server
  2. щелкните правой кнопкой мыши на новой базе данных - > задачи - > импорт данных
  3. в Мастере импорта и экспорта SQL Server выберите имя_сервера продукта env в качестве источника данных. И выберите новую базу данных назначения.

трудно отсоединить вашу производственную БД или другие запущенные БД и справиться с этим временем простоя, поэтому я почти всегда использую метод резервного копирования / восстановления.

Если вы также хотите, чтобы убедиться, что Ваш логин в синхронизации проверить MS KB article при использовании сохраненного proc sp_help_revlogin для этого.

метод отсоединения/копирования/присоединения уничтожит базу данных. Это не то, что вы хотели бы в производстве.

резервное копирование / восстановление будет работать только при наличии разрешений на запись на рабочий сервер. Я работаю с Amazon RDS, и я не делаю.

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

Это звучит как обычная операция, что нужно сделать с базой данных. Почему SQL Server не обрабатывает это должным образом? Каждый раз, когда мне приходилось это делать, это расстраивало.

Как говорится, единственный безболезненное решение, с которым я столкнулся, было Средство Миграции Sql Azure который поддерживается сообществом. Он также работает с SQL Server.

Я запускаю SP, чтобы удалить таблицу(ы), а затем использовать пакет DTS для импорта последней производственной таблицы(ов) в мое поле разработки. Потом я иду домой и возвращаюсь на следующее утро. Это не элегантно, но это работает для меня.

Если вы хотите сделать копию базы данных, резервного копирования/восстановления.

[в SQLS2000, не уверен в 2008:] просто имейте в виду, что если вы используете учетные записи SQL Server в этой базе данных, в отличие от учетных записей Windows, Если основная БД отличается или не синхронизирована на сервере разработки, учетные записи пользователей не будут переводиться при восстановлении. Я слышал о SP, чтобы переназначить их, но я не могу вспомнить, какой это был.

Я EMS SQL Backup и он имеет задачу доставки данных, который может быть легко запланированного. Вы должны указать общую сетевую папку. Копирование также выполняется с помощью резервного копирования/копирования / восстановления, но может быть быстро настроено. Похоже, что в программе нет возможности обрабатывать логины, и вам придется делать это вручную.