Присоединение и отсоединение баз данных

Файлы данных и журналов транзакций базы данных можно отсоединить, а затем снова присоединить к тому же или другому экземпляру SQL Server. Отсоединение и присоединение базы данных полезно, если необходимо переместить базу данных на другой экземпляр SQL Server на том же компьютере либо перенести базу данных.

ПримечаниеПримечание

Формат хранения данных SQL Server на диске в 64-разрядной и 32-разрядной средах одинаков. Следовательно, присоединение работает и в 32-разрядной, и в 64-разрядной средах. База данных, отсоединенная от экземпляра сервера, работающего в одной среде, может быть присоединена к экземпляру сервера, работающему в другой среде.

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

Безопасность

Разрешения на доступ к файлам устанавливаются во время выполнения определенных операций с базами данных, включая отсоединение и присоединение баз данных. Дополнительные сведения о разрешениях на доступ к файлам, которые устанавливаются каждый раз во время отсоединения и присоединения базы данных, см. в разделе Защита данных и файлов журналов.

Примечание по безопасностиПримечание по безопасности

Рекомендуется не присоединять и не восстанавливать базы данных, полученные из неизвестных или ненадежных источников. В этих базах данных может содержаться вредоносный код, вызывающий выполнение непредусмотренных инструкций Transact-SQL или появление ошибок из-за изменения схемы или физической структуры базы данных. Прежде чем работать с базой данных, полученной из ненадежного источника, выполните для нее инструкцию DBCC CHECKDB на тестовом сервере, а также изучите исходный код в базе данных, например хранимые процедуры и другой пользовательский код.

Отсоединение базы данных

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

Базу данных невозможно отсоединить в следующих случаях.

  • База данных реплицируется и публикуется. При репликации база данных должна быть снята с публикации. Перед тем как отсоединить базу данных, необходимо отключить публикацию, выполнив процедуру sp_replicationdboption.

    ПримечаниеПримечание

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

  • Имеется моментальный снимок базы данных.

    Перед отсоединением базы данных необходимо удалить все моментальные снимки. Дополнительные сведения см. в разделе Как удалить моментальный снимок базы данных (Transact-SQL).

    ПримечаниеПримечание

    Невозможно отсоединить или присоединить моментальный снимок базы данных.

  • База данных находится в сеансе зеркального копирования.

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

  • База данных помечена как подозрительная. В SQL Server 2005 и более поздних версиях подозрительную базу данных невозможно отсоединить. Для отсоединения ее необходимо перевести в аварийный режим. Дополнительные сведения о переводе базы данных в аварийный режим см. в разделе ALTER DATABASE (Transact-SQL).

  • База данных является системной.

Отсоединение базы данных

Резервное копирование, восстановление и отсоединение

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

Реакция на ошибки отсоединения

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

  1. Заново присоедините все файлы, связанные с базой данных, а не только первичный файл.

  2. Исправьте неполадку, ставшую причиной сообщения об ошибке.

  3. Отсоедините базу данных повторно.

Присоединение базы данных

Можно присоединить скопированную или отсоединенную базу данных SQL Server. Когда базу данных SQL Server 2005 с файлами полнотекстовых каталогов присоединяют к экземпляру сервера SQL Server 2008, то присоединение файлов каталогов выполняется из их предыдущего расположения вместе с другими файлами баз данных, как и в SQL Server 2005. Дополнительные сведения см. в разделе Обновление полнотекстового поиска.

При присоединении базы данных должны быть доступны все файлы данных (файлы MDF и NDF). Если у какого-либо файла данных путь отличается от того, каким он был при первом создании или последнем присоединении, необходимо указать текущий путь к файлу.

ПримечаниеПримечание

Если присоединяемый первичный файл данных доступен только для чтения, компонент Database Engine предполагает, что база данных доступна только для чтения.

Когда зашифрованная база данных впервые присоединяется к экземпляру SQL Server, владелец базы данных должен открыть главный ключ базы данных, выполнив следующую инструкцию: OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'. Рекомендуется включить автоматическую расшифровку главного ключа, выполнив следующую инструкцию: ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY. Дополнительные сведения см. в разделах CREATE MASTER KEY (Transact-SQL) и ALTER MASTER KEY (Transact-SQL).

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

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

    Если у базы данных, доступной для записи и чтения, только один файл журнала и для него не указано новое расположение, операция присоединения использует старое расположение файла. Если он найден, применяется старый файл журнала независимо от того, была ли база данных выключена чисто. Однако если старый файл журнала не найден и база данных была выключена чисто и не имеет активной цепочки журналов, то операция присоединения пытается построить новый файл журнала для базы данных. Дополнительные сведения см. в разделах Логическая архитектура журнала транзакций и Физическая архитектура журнала транзакций.

  • Если присоединяемый первичный файл данных доступен только для чтения, компонент Database Engine предполагает, что база данных доступна только для чтения. Для базы данных, доступной только для чтения, файл или файлы журнала должны быть доступны в расположении, указанном в первичном файле базы данных. Новый файл журнала построить невозможно, так как SQL Server не может обновить расположение журнала, указанное в первичном файле.

Изменение метаданных при присоединении базы данных

Если база данных, доступная только для чтения, отсоединяется, а затем снова присоединяется, то данные о текущей базовой копии для разностного копирования будут утеряны. Базовая копия для разностного копирования — это последняя из полных резервных копий всех данных из базы данных или из подмножества файлов и файловых групп, содержащихся в базе данных. Без сведений о базовой резервной копии база данных master утрачивает синхронизацию с базой данных, доступной только для чтения, и дальнейшее создание разностных резервных копий может привести к непредвиденным результатам. Таким образом, если с базой данных, доступной только для чтения, используются разностные резервные копии, то после повторного присоединения базы данных необходимо установить новую базовую копию для разностного копирования, создав полную резервную копию. Дополнительные сведения см. в разделе Основа разностной резервной копии.

После присоединения происходит запуск базы данных. Обычно присоединение базы данных переводит ее в то же состояние, в котором она находилась на момент отсоединения или копирования. Однако в SQL Server 2005 и более поздних версиях операции присоединения и отсоединения отключают создание межбазовых цепочек владения для этой базы данных. Сведения о том, как включить цепочки владения, см. в разделе Параметр cross db ownership chaining. Также TRUSTWORTHY устанавливается в OFF при каждом присоединении базы данных. Дополнительные сведения о том, как установить TRUSTWORTHY в ON, см. в разделе ALTER DATABASE (Transact-SQL).

Резервное копирование, восстановление и присоединение

Подобно любой базе данных, которая полностью или частично вне сети, база данных с восстановлением файлов не может быть присоединена. Базу данных можно присоединить после остановки последовательности восстановления. Затем можно снова запустить последовательность восстановления.

Присоединение базы данных к другому экземпляру сервера

При присоединении базы данных к другому экземпляру сервера для обеспечения ее согласованного функционирования для пользователей и приложений, может понадобиться повторное создание некоторых или всех метаданных базы данных, например имен входа и задания, на другом экземпляре сервера. Дополнительные сведения см. в разделе Управление метаданными при обеспечении доступности базы данных на другом экземпляре сервера.

ПримечаниеПримечание

База данных, созданная в более поздней версии SQL Server, не может быть присоединена в ранних версиях.

Присоединение базы данных

Обновление базы данных с предыдущей версии SQL Server

В SQL Server 2008 операции отсоединения и присоединения можно применять для обновления пользовательской базы данных с версии SQL Server 2000 или SQL Server 2005. Однако действуют следующие ограничения.

  • Копии баз данных master, model или msdb, созданные при помощи SQL Server 2000 или SQL Server 2005, невозможно присоединить.

  • Присоединение скопированной, а не отсоединенной реплицируемой базы данных:

    • При присоединении базы данных к обновленной версии того же экземпляра сервера необходимо выполнить процедуру sp_vupgrade_replication, чтобы обновить репликацию после завершения операции присоединения. Дополнительные сведения см. в разделе sp_vupgrade_replication (Transact-SQL).

    • При подключении базы данных к другому экземпляру сервера независимо от его версии необходимо запустить процедуру sp_removedbreplication для удаления репликации по завершении операции подключения. Дополнительные сведения см. в разделе sp_removedbreplication (Transact-SQL).

Обновление базы данных при помощи операций отсоединения и присоединения

Перемещение базы данных или файла базы данных

Важное примечаниеВажно!

Рекомендуется перемещать базы данных с помощью процедуры планового перемещения ALTER DATABASE, а не с помощью операций отсоединения и присоединения. Дополнительные сведения см. в разделе Перемещение файлов баз данных.

Обычно операции отсоединения и присоединения применяются для перемещения базы данных. Типичные сценарии включают перемещение базы данных в одно из следующих мест:

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

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

Перемещение базы данных с помощью операций отсоединения и присоединения включает в себя следующие этапы.

  1. Отсоединение базы данных.

  2. Перемещение файлов базы данных на другой сервер или диск.

  3. Присоединение базы данных путем указания нового местоположения перемещенного файла или файлов.

Перемещение базы данных при помощи операций отсоединения и присоединения