<< Нажмите, чтобы отобразить содержание (Click to Display Table of Contents) >> Дополнительные материалы > Администрирование баз данных > Проблемы присоединения файла базы данных «*.mdf» к SQL-серверу |
Внимание!
•Присоединение и отсоединение файла базы данных «*.mdf» необходимо выполнять от имени учетной записи с правами локального администратора компьютера, для этого средства «Администрирование БД» или «Среда SQL Server Management Studio» должны запускаться от имени администратора.
В случае использования собственного экземпляра SQL-сервера во избежание ошибок при подключении баз необходимо заранее обеспечить права учетной записи службы SQL-сервера на каталог с файлами баз данных. Подробнее в статье Microsoft: https://docs.microsoft.com/ru-ru/sql/database-engine/configure-windows/configure-file-system-permissions-for-database-engine-access. |
С политикой 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» база не отображается в табличной части модуля «Администрирование БД».
Это означает, что в ходе присоединения произошла ошибка. Подробно ошибка описана в протоколе работы модуля.
Открыть окно протокола, нажав на кнопку «Открыть протокол», и найти текст ошибки. Если решить ошибку самостоятельно невозможно, необходимо обратиться в службу техподдержки поставщика. В разделе ниже приведены тексты наиболее часто возникающих ошибок и их решение. |
Далее описаны наиболее часто возникающие ошибки присоединения базы данных. Тексты ошибок формируются 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, 140, 130, 120, 110, 100 |
SQL Server 2022 |
16.0 |
957 |
160,150, 140, 130, 120, 110, 100 |
Наверх