Проблемы присоединения файла базы данных «*.mdf» к SQL-серверу

<< Нажмите, чтобы отобразить содержание (Click to Display Table of Contents) >>

Дополнительные материалы > Администрирование баз данных >

Проблемы присоединения файла базы данных «*.mdf» к SQL-серверу

Внимание!

Присоединение и отсоединение файла базы данных «*.mdf» необходимо выполнять от имени учетной записи с правами локального администратора  компьютера, для этого средства «Администрирование БД» или «Среда SQL Server Management Studio» должны запускаться от имени администратора.

warn

В случае использования собственного экземпляра SQL-сервера во избежание ошибок при подключении баз необходимо заранее обеспечить права учетной записи службы SQL-сервера на каталог с файлами баз данных. Подробнее в статье Microsoft: https://docs.microsoft.com/ru-ru/sql/database-engine/configure-windows/configure-file-system-permissions-for-database-engine-access.

  C политикой Microsoft по вопросу прав на файлы баз данных можно ознакомиться в статье: https://msdn.microsoft.com/ru-ru/library/jj219062(v=sql.120).aspx

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

 Если искомый полный путь к файлу «*.ldf» не существует на данном компьютере, в ходе подключения новой базы файл «*.ldf» будет создан в папке рядом с файлом «*.mdf».

 Если искомый полный путь к файлу совпадет с существующим на данном компьютере, то существующий по данному пути файл «*.ldf» в ходе подключения будет присоединен к новой базе. Т.о., база, которой он принадлежал ранее, станет неработоспособна. Чтобы избежать этого, рекомендуется придерживаться следующих правил:

  - не использовать для переноса баз данных между SQL-серверами способ копирования файлов базы данных «*.mdf» и «*.ldf» из папки-источника в папку-получатель, особенно в пределах одного компьютера; вместо этого использовать резервные копии баз данных «*.bak».

  - присоединение файла базы данных «*.mdf» из неизвестных источников производить в «Среда SQL Server Management Studio», где есть возможность выяснить исходное расположение файла «*.ldf», принадлежащего подключаемой базе данных. Файлы «*.mdf», которыми Компания Инфострой распространяет БД НСИ, имеют исходное расположение "S:\A0NSIDATA\a0*_log.ldf", поэтому при их присоединении описанная выше опасность крайне маловероятна.

Статьи Microsoft по вопросу присоединения базы данных:

https://docs.microsoft.com/ru-ru/sql/relational-databases/databases/attach-a-database,

https://docs.microsoft.com/ru-ru/sql/t-sql/statements/create-database-sql-server-transact-sql.

 

Ошибка присоединения базы данных в модуле «Администрирование БД»

При попытке присоединения файла баз данных «a0_data.mdf» база не отображается в табличной части модуля «Администрирование БД».

pmp_dbadmin_emp

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

 

gliphicon Решение...

 

Ошибки присоединения базы данных

Далее описаны наиболее часто возникающие ошибки присоединения базы данных. Тексты ошибок формируются SQL-сервером и выглядят одинаково в протоколе операций модуля «Администрирование БД» и в «Среда SQL Server Management Studio».

 

1. Если при попытке присоединения файла баз данных «a0_data.mdf» выводится сообщение об ошибке:

Не удалось выполнить действие "Присоединить базу данных" для следующего объекта: "Сервер", "имя_компьютера\экземпляр_SQL-сервера". (Microsoft.SqlServer.Smo) Один или несколько файлов не соответствуют основному файлу базы данных. Если предпринимается попытка присоединить базу данных, повторно выполните операцию с использованием правильных файлов. Если такая база данных существует, файл может быть поврежден и должен быть восстановлен из резервной копии. (.Net SqlClient Data Provider).

Это означает, что в папке с файлом базы данных «a0_data.mdf» находится файл «a0_data_log.ldf», не принадлежащий присоединяемой базе и перезаписать его невозможно либо из-за недостаточности прав пользователя либо потому, что он принадлежит другой базе, которая в данный момент активна.

Решение.

Перед операцией присоединения убедиться, что в папке с файлом базы данных «a0_data.mdf» находится файл «a0_data_log.ldf» принадлежащий присоединяемой базе, либо отсутствует совсем.

Если файл «a0_data_log.ldf» принадлежит другой базе, которая в данный момент активна, то следует переместить подключаемый файл базы данных «a0_data.mdf» в другую папку и произвести присоединение из нее.

 

2. Если при попытке присоединения файла баз данных «a0_data.mdf» выводится сообщение об ошибке:

Невозможно открыть новую базу данных "A0Data". Операция CREATE DATABASE прервана. Сбой при активации файла. Возможно, физическое имя файла "D:\DATABASE\a0_data_log.LDF" неправильное. Данный журнал не может быть перестроен, пока первичный файл доступен только для чтения. (Microsoft SQL Server, ошибка: 1813)

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

Решение.

Перед операцией присоединения убедиться, что файл баз данных «a0_data.mdf» не защищен от изменения и у службы SQL-сервера есть права на его изменение. Например, права на файл «a0_data.mdf» могли быть ограничены при отсоединении базы.

Также следует убедиться, что у службы SQL-сервера есть права на запись в папку с файлом «a0_data.mdf» присоединяемой базы данных. Это необходимо для создания файла «a0_data_log.ldf» в данной папке в ходе присоединения. Если необходимых прав у службы SQL-сервера на данную папку нет и предоставить их невозможно, следует переместить подключаемый файл базы данных «a0_data.mdf» в папку с необходимыми правами и произвести присоединение из нее.

Настройка разрешений файловой системы для доступа службе SQL-сервера подробно описана в статье Microsoft: https://msdn.microsoft.com/ru-ru/library/jj219062(v=sql.120).aspx.

 

3. Если при попытке присоединения файла баз данных «a0_data.mdf» выводится сообщение об ошибке:

Не удалось открыть физический файл "D:\DATABASE\a0_data_log.LDF". Ошибка операционной системы 2 (3, 5, 32)

Решение.

Убедиться, что присоединяемый файл базы данных «a0_data.mdf» расположен в папке, в которой нет файла с именем «a0_data_log.ldf», и что у службы SQL-сервера есть права на запись в эту папку. Это необходимо для создания в ней файла «a0_data_log.ldf» в ходе присоединения.

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

 

4. Если при попытке присоединения файла баз данных «a0_data.mdf» выводится сообщение об ошибке:

Невозможно открыть новую базу данных "A0Data". Операция CREATE DATABASE прервана. Сбой при активации файла. Возможно, физическое имя файла "S:\A0NSIDATA\a0*_log.ldf" неправильное. Данный журнал не может быть перестроен, поскольку эта база данных не была корректно выключена. (.Net SqlClient Data Provider)

Это означает, что база даных была некорректно отсоединена от SQL-сервера, в результате полученный файл «*.mdf» некорректен.

Решение.

Корректно отсоединить базу от SQL-сервера и повторить попытку подключения.

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

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

 

5. Если при попытке присоединения файла баз данных «a0_data.mdf» выводится сообщение об ошибке:

 5.1: Во время выполнения скрипта произошла ошибка: Не удалось открыть базу данных "A0Data", поскольку она имеет версию 782. Данный сервер поддерживает версию 612 и более ранние. Переход на предыдущую версию не поддерживается.

Это означает, что к SQL-серверу подключается база данных, отсоединенная от SQL-сервера более старшей версии.

Решение.

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

 5.2: Во время выполнения скрипта произошла ошибка: Не удалось обновить базу данных "A0Data", поскольку ее промежуточная версия (539) не поддерживается данной версией SQL Server. Нельзя открыть базу данных, несовместимую с данной версией SQL Server.

Это означает, что к SQL-серверу подключается база данных, отсоединенная от SQL-сервера более младшей версии, которая несовместима с текущей.

Решение.

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

 

Соответствие версий баз данных версиям SQL-сервера

Версия сервера

Номер версии

Версия базы

Поддерживаемые уровни совместимости

SQL Server 2000

8.00.194

539

80

SQL Server 2005

9.00.1399

611

90, 80

SQL Server 2005 with SP2

9.00.3042

612

90, 80

SQL Server 2008

10.00.1600

655

100, 90, 80

SQL Server 2008 with SP2

10.00.4000

655/662

100, 90, 80

SQL Server 2008R2

10.50.1600

661

100, 90, 80

SQL Server 2008R2 with SP1

10.50.2500

661/663

100, 90, 80

SQL Server 2012

11.00.2100

706

110, 100, 90

SQL Server 2014

12.0

782

120, 110, 100

SQL Server 2016

13.0

841

130, 120, 110, 100

SQL Server 2016 with SP1

13.0

852

130, 120, 110, 100

SQL Server 2017

14.0

869

140, 130, 120, 110, 100

SQL Server 2019

15.0

904

150, 130, 120, 110, 100

SQL Server 2022

16.0

957

160,150, 140, 130, 120, 110, 100

Наверх