Что такое отделение или присоединение и как они работают?
Начнем с отсоединения. Когда вы отключаете базу данных в SQL Server, вы переводите базу данных в автономный режим и удаляете ее из экземпляра SQL Server, от которого вы ее отключаете. Данные базы данных и файлы журналов остаются в рабочем состоянии и остаются в согласованном состоянии, поэтому вы можете присоединить базу данных на более позднем этапе или к другому экземпляру SQL Server. Attach соединяет данные и файлы журналов из базы данных, которая была должным образом отсоединена (или была скопирована с полностью закрытого экземпляра SQL Server), с экземпляром SQL Server и переводит базу данных в оперативный режим.
Как мне отсоединить базу данных?
Вы можете сделать это в T-SQL или из графического интерфейса SQL Server Management Studio.
В графическом интерфейсе вы щелкаете правой кнопкой мыши по базе данных, которую хотите отключить, выбираете All Tasks
и нажимаете наDetach
. Оттуда вы получите диалог отсоединения. Вы можете сначала отбросить подключения, чтобы принудительно отключить все активные подключения и выполнить откат, который они выполняли в середине выполнения. Вы также можете обновить статистику перед отключением.
В T-SQL:
-- You don't want to be in the database you are trying to detach
USE Master
GO
-- Optional step to drop all active connections and roll back their work
ALTER DATABASE DatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
-- Perform the detach
EXEC sp_detach_db 'DatabaseName'
GO
Для системной хранимой процедуры sp_detach_db есть два параметра, которые вы можете передать по желанию:
@skipchecks
- допустимый ввод 'True'
или 'False'
если 'True'
SQL Server обновит статистику перед отсоединением. Если ' False'
, это не так. Если вы ничего не укажете, статистика будет обновлена в SQL Server 2005 или более поздней версии.
@keepfulltextindexfile
- Значение по умолчанию здесь 'True'
- если для этого параметра установлено значение true, метаданные полнотекстового индекса не будут отбрасываться во время отсоединения.
Для того, чтобы увидеть намного больше о отсоединиться и некоторой более подробной информации о рисках , я выделяю ниже, статья Книги Интернет для sp_detach_db
хорошего место , чтобы начать.
Как мне присоединить базу данных?
Вы также можете сделать это в T-SQL или из графического интерфейса SQL Server Management Studio.
( ПРИМЕЧАНИЕ. Если у вас есть данные и файлы журналов из базы данных, которая была отсоединена неправильно, ваше присоединение может не работать. Когда происходит отсоединение, база данных переводится в автономный режим, а файлы журнала и данных переводятся в согласованное состояние. Это также происходит, когда служба полностью закрыта. )
В графическом интерфейсе щелкните правой кнопкой мыши Databases
папку верхнего уровня для своего экземпляра и выберите Attach
. В следующем диалоговом окне вы затем выберете основной файл данных (.MDF) базы данных, которую вы хотите прикрепить, и убедитесь, что у вас выбраны другие файлы и указаны их соответствующие местоположения, и нажмите OK, присоединяя вашу базу данных.
В T-SQL лучший способ сделать это в SQL Server 2005 и более поздних версиях - использовать CREATE DATABASE
команду. Это метод, который поддерживается после SQL Server 2012. Если вы хотите узнать, как использовать sp_attach_db
, вы можете увидеть это в книгах онлайн статей для [sp_attach_db][3]
или[sp_attach_single_file_db][4]
Когда у вас есть доступный файл журнала и файлы данных, и они согласованы, это подход T-SQL:
- Использование Create Database и предложения FOR ATTACH для присоединения
CREATE DATABASE DatabaseName
ON (FILENAME = 'FilePath\FileName.mdf'), -- Main Data File .mdf
(FILENAME = 'FilePath\LogFileName.ldf'), -- Log file .ldf
(FILENAME = 'FilePath\SecondaryDataFile.ndf) -- Optional - any secondary data files
FOR ATTACH
GO
Вы можете увидеть больше об утверждении « Создание базы данных» в книгах онлайн.
Как мне отсоединить / присоединить в SQL Server Express?
Это на самом деле то же самое. Если вы используете SQL Server Management Studio Express, вы можете использовать диалоговое окно отсоединения / подключения в графическом интерфейсе, описанном выше, или шаги T-SQL через SSMS Express, описанные выше. Никакой разницы с Экспрессом нет.
Если у вас нет SSMS Express, вы можете скачать его ( вот версия SQL Server 2012 Express).
Вы можете войти в SQLCMD
сеанс и использовать те же конструкции T-SQL, которые описаны выше.
Когда я должен рассмотреть возможность отсоединения или присоединения?
Сначала слово о том, что отсоединение и присоединение не предназначены для использования: резервное копирование и восстановление. Отсоединение и присоединение не являются способом резервного копирования базы данных для целей обычного восстановления. Таким образом, нет никаких резервных копий журнала транзакций, это переводит вашу базу данных в состояние, когда файлы базы данных могут быть случайно удалены, и это совсем не подходит для этой цели.
Тем не менее, отсоединение и присоединение хороши для нескольких случаев использования (не исчерпывающие, не стесняйтесь редактировать, чтобы добавить или создать новый ответ с большим количеством):
- Иногда для миграций (хотя я предпочитаю резервное копирование / восстановление для тех, которые обсуждались в моем ответе здесь )
- Когда вы хотите удалить базу данных, которая больше не используется активно, но имеет возможность присоединиться позже, если это необходимо.
- В определенных ситуациях устранения неполадок, это может быть вызвано
- У меня нет места для резервного копирования или восстановления данных и файлов журналов в другой среде (вас никогда не должно было быть здесь, но я использовал его, чтобы время от времени перемещать базы данных разработчиков по средам. Не хотел или не нуждался журнал так же сделал присоединение / перестроение файла журнала)
Риски и предупреждения
Опять же, книги в Интернете являются хорошим ресурсом , но я приведу некоторые конкретные соображения, которые следует учитывать при отключении или подключении базы данных -
Отделить
- Вы переводите свою базу данных в автономный режим. Это больше не будет доступно. Это должно быть очевидно, но стоит взывать. Вот почему это не отличный вариант резервного копирования.
- Когда ваша база данных подключена, SQL Server блокирует файлы. Я не рекомендовал бы попробовать это, чтобы доказать, что я не прав, потому что может возникнуть какая-то другая ситуация, но обычно вы не можете удалить файл базы данных (данные, дополнительные данные или файл журнала), когда SQL Server подключен к сети. Это хорошая вещь. Когда вы отстраняетесь, у вас нет такой защиты - это может быть плохо.
- Если вы имеете дело с повреждением базы данных и нашли какую-то статью, в которой есть первый шаг отсоединения - это неправильно - если вы отсоедините поврежденную базу данных, это может быть так. Возможно, вы больше не присоединяете эту базу данных.
- Обрезка и вставка файлов рабочей базы данных по всей сети - это способ потенциально повредить уровень файлов. Еще одна причина, по которой я предпочитаю резервное копирование / восстановление при выполнении миграции.
- Это может привести к сбою плана обслуживания. Ситуация такова, что вы, как и я, создали план обслуживания для регулярного резервного копирования всех баз данных без проверки передового опыта. Это прекрасно работает, так что вы перестанете думать об этом. Кто-то еще тогда решает взять базу данных, которую они не используют в автономном режиме. План обслуживания не будет выполняться с этого момента, пока вы не измените план обслуживания, установив флажок «игнорировать базы данных, состояние которых не подключено» в диалоговом окне «База данных (ий)». Обратите внимание, что для автономной базы данных не произойдет сбой - план обслуживания потерпит неудачу с ошибкой в тот момент, когда он попытается выполнить резервное копирование автономной базы данных, поэтому некоторые онлайн-базы данных могут быть не скопированы. (другой автор по этому вопросу, так что относитесь с подозрением)
Присоединение
- точно так же, как вы не должны запускать сценарии из Интернета или принимать посылки от незнакомцев в аэропорту, вы не должны прикреплять базу данных, полученную от кого-то другого, без каких-либо шагов для ее проверки. Эта база данных может содержать код внутри триггеров, хранимых процедур и т. Д., Которые могут поставить под угрозу вашу среду. Вам следует просмотреть базу данных, которую вы хотите подключить, в безопасной и защищенной от огня среде, а не в производственной системе.
А как насчет различных версий или выпусков SQL Server?
Они ничем не отличаются от правил восстановления баз данных между версиями. Как правило, вы можете восстановить до следующей версии для 3-х версий (например, с SQL Server 2008 до SQL Server 2012 будет работать. От SQL Server 2000 до SQL Server 2012 не будет). Вы не можете вернуться назад вообще с помощью резервного копирования / восстановления или отсоединения / присоединения - вам придется создавать сценарии объектов и сценариев вставок и делать это вручную или с помощью инструмента, который делает это. Для выпусков вы обычно можете перемещаться между основными SKU SQL Server - например, вы можете перемещать базу данных из Standard в Enterprise без дополнительной работы. Если вы используете корпоративные функции (скажем, сжатие или разбиение), вам, тем не менее, необходимо отключить эти функции перед тем, как приступить к работе. Вы можете получить представление о функциях, которые вы