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

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

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

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

Однако действуют следующие ограничения:

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

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

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

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

  • При использовании ключевых слов APPLY, PIVOT, TABLESAMPLE или UNPIVOT в базах данных, обновленных из SQL Server 2000 до версии SQL Server 2008, база данных должна иметь уровень совместимости 100. Сведения о настройке уровня совместимости базы данных см. в разделе sp_dbcmptlevel (Transact-SQL).

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

    В SQL Server 2000 с пакетом обновления 3 (SP3) и более поздних версиях SQL Server присоединение и отсоединение отменяют межбазовые цепочки владения для базы данных, присваивая параметру cross db ownership chaining значение 0. Сведения о включении цепочек владения см. в разделе Параметр cross db ownership chaining.

Параметры обновления полнотекстового индекса

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

После присоединения базы данных SQL Server 2005 или SQL Server 2000 к SQL Server 2008 она сразу становится доступной, после чего автоматически обновляется. Если база данных содержит полнотекстовые индексы, то в процессе обновления будет произведен их импорт, сброс или перестроение в зависимости от значения свойства сервера upgrade_option. Если при обновлении выбран режим импорта (upgrade_option = 2) или перестроения (upgrade_option = 0), то полнотекстовые индексы во время обновления будут недоступны. В зависимости от объема индексируемых данных процесс импорта может занять несколько часов, а перестроение — в несколько (до десяти) раз больше. Обратите внимание, что если для обновления выбран режим «Импортировать», а полнотекстовый каталог недоступен, то связанные с ним полнотекстовые индексы будут перестроены. Чтобы изменить значение свойства сервера upgrade_option, используйте процедуру sp_fulltext_service.

Процедуры

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

  1. Отсоедините базу данных от экземпляра сервера SQL Server 7.0 или SQL Server 2000 с помощью хранимой процедуры sp_detach_db.

    Дополнительные сведения см. в электронной документации по SQL Server для этой версии SQL Server.

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

    В SQL Server 2005 у этой хранимой процедуры есть новые параметры. Дополнительные сведения см. в разделе sp_detach_db (Transact-SQL).

  2. При необходимости переместите отсоединенные файлы баз данных и файлы журналов.

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

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

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

  3. Присоедините скопированные файлы к экземпляру сервера SQL Server 2005 с помощью инструкции CREATE DATABASE с параметром FOR ATTACH или FOR ATTACH_REBUILD_LOG.

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

    Дополнительные сведения о присоединении базы данных SQL Server 2005 с помощью обозревателя объектов см. в разделе Как присоединить базу данных (среда Microsoft SQL Server Management Studio).

  4. В обновленной базе данных рекомендуется запуск инструкции DBCC UPDATEUSAGE.

    В более ранних версиях SQL Server значения количества строк таблиц и индексов, а также количества страниц могут стать неверными. Поэтому базы данных, созданные с помощью версий до SQL Server 2005, могут содержать неверные подсчеты. После обновления базы данных до версии SQL Server 2005 рекомендуется запустить инструкцию DBCC UPDATEUSAGE для исправления любых неверных показаний счетчиков. Инструкция DBCC исправляет счетчики строк таблицы, использованных страниц, зарезервированных страниц, конечных страниц и страниц данных для каждого раздела таблицы или индекса. Дополнительные сведения см. в разделе DBCC UPDATEUSAGE (Transact-SQL).

  5. При копировании базы данных (вместо перемещения) можно при необходимости заново присоединить оригинал базы данных к экземпляру SQL Server 7.0 или SQL Server 2000 с помощью хранимой процедуры sp_attach_db или sp_attach_single_file_db.

    Дополнительные сведения см. в электронной документации по SQL Server для этой версии SQL Server.

Уровень совместимости баз данных после обновления

После обновления базы данных tempdb, model, msdb и Resource получают уровень совместимости 100. У системной базы данных master сохраняется тот же уровень совместимости, какой был до обновления, кроме случаев, когда он меньше 80. Если уровень совместимости базы данных master до обновления был меньше 80, то после обновления он принимает значение 80.

Если уровень совместимости пользовательской базы данных до обновления был 80 или 90, он остается неизменным. Если уровень совместимости до обновления был 70 или меньше, то в обновленной базе данных он устанавливается на 80, что является самым низким поддерживаемым уровнем совместимости в SQL Server 2008.

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

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

Управление метаданными в экземпляре обновленного сервера

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

Примеры

В следующем примере обновляется база данных SQL Server 2000pubs до базы данных SQL Server 2005 с помощью инструкций Transact-SQL для отсоединения и присоединения базы данных.

  1. Присоедините программу Query Analyzer SQL Server 2000 к экземпляру сервера, к которому присоединена база данных pubs, и отсоедините базу данных с помощью хранимой процедуры sp_detach_db.

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'pubs';
    GO
    
  2. В данном примере скопируйте любым способом файлы базы данных pubs (pubs.mdf и pubs_log.ldf) из каталога «C:\Program Files\Microsoft SQL Server\MSSQL\Data\» (это расположение по умолчанию для базы данных pubs в SQL Server 2000) в каталог «C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\» (это каталог данных SQL Server 2005).

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

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

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

    Чтобы скопировать файлы через сеть на диск удаленного компьютера с помощью имени удаленной точки, соответствующего формату UNC. Имя, соответствующее UNC, имеет следующий формат: \\Имя_сервера\Имя_ресурса\Путь\Имя_файла. Как и при записи файлов на локальный жесткий диск, учетной записи пользователя SQL Server должны быть предоставлены разрешения на чтение или запись в файл на удаленном диске.

  3. Присоедините скопированную базу данных pubs и (при необходимости) файлы журнала в экземпляр SQL Server 2005 (в этом примере используется имя той же базы данных). В среде SQL Server Management Studio откройте новый запрос редактора запросов и соединитесь с экземпляром сервера, к которому нужно присоединить базу данных.

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

    Дополнительные сведения см. в разделе Окно «Редактор запросов» компонента Database Engine среды SQL Server Management Studio.

    Выполните следующую инструкцию CREATE DATABASE.

    USE master;
    GO
    CREATE DATABASE pubs ON PRIMARY 
       (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs.mdf')
       LOG ON (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs_log.ldf')
       FOR ATTACH;
    GO
    
    ПримечаниеПримечание

    В среде SQL Server Management Studio только что присоединенная база данных отображается в обозревателе объектов не сразу. Для просмотра базы данных щелкните окно обозревателя объектов и выберите Просмотр > Обновить. Когда узел баз данных развернут, только что присоединенная база данных появится в списке баз данных.

  4. При необходимости присоедините оригинал базы данных pubs к экземпляру SQL Server 2000 с помощью хранимой процедуры sp_attach_db. В программе Query Analyzer введите следующее:

    USE master;
    Go
    EXEC sp_attach_db @dbname = N'pubs', 
       @filename1 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', 
       @filename2 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf';
    GO