SQL Server: загрузка файла базы данных - PullRequest
2 голосов
/ 07 августа 2009

Я использую SQL Server 2008. Я должен иметь возможность "подключиться" к указанному пользователем файлу базы данных (mdf) (используя раздел AttachDbFilename строки подключения) и сохранить копию выбранного файла. Я также должен работать с содержимым базы данных.

Если я правильно понял, один файл mdf представляет собой полную базу данных с таблицами, хранимыми процедурами и т. Д. Но тогда, если у меня есть два файла с одинаковыми именами в разных папках (один в папке DATA на SQL Server и другой в корне C :), и я пытаюсь загрузить файл в C: я получаю сообщение об ошибке, заявляющее, что база данных уже существует с таким именем.

Я переименовал файл в C :, но теперь я получаю сообщение об ошибке:

"CREATE FILE обнаружена ошибка операционной системы 5 (не удалось получить текст этой ошибки. Причина: 15105) при попытке открыть или создать физический файл 'C: /myDatabaseFile_log.ldf'. Не удалось открыть новый база данных 'C: /MYDATABASEFILE.MDF'. СОЗДАНИЕ БАЗЫ ДАННЫХ прервано. попытка присоединить базу данных с автоматическим именем для файла 'C: /myDatabaseFile.mdf' не удалось. База данных с тем же именем существует или указанный файл не может быть открыт или находится на общем ресурсе UNC. "

Обратите внимание: я пытаюсь открыть базу данных, а не пытаюсь ее создать.
Так что я делаю не так? Я что-то не так понял? Как работают эти файлы базы данных (я имею в виду, как их использовать)?

Ответы [ 4 ]

5 голосов
/ 07 августа 2009

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

Вместо этого, как правило, существует ровно один экземпляр программы сервера базы данных (вы можете установить несколько экземпляров, но это не то же самое, что запуск двух копий обычной программы). Вы можете думать об этом больше, как будто ваши базы данных должны быть зарегистрированы внутри этого экземпляра сервера, и вы можете зарегистрировать только одну базу данных с заданным именем для сервера. Что происходит с точки зрения сервера, когда вы присоединяете файл MDF, так это то, что создается новая база данных (выполняется команда CREATE DATABASE), и ей предлагается использовать этот файл MDF для схемы и данных.

Я предлагаю вам приобрести Sql Server Management Studio и подключиться к серверу, работающему в вашей локальной системе. Вы, вероятно, обнаружите, что там уже есть база данных с нужным именем.

3 голосов
/ 28 июля 2010

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

2 голосов
/ 07 августа 2009

Ваша проблема состоит из двух вопросов:

  1. Вы получаете сообщение об ошибке при использовании файла базы данных (через AttachDbFilename). Ошибка "CREATE FILE .... failed".
  2. Вы не можете «использовать» файл базы данных MyDataBaseFile.mdf, если файл с таким именем существует в каталоге данных SQL Server

Давайте разберемся с первым. Процесс 'использования' файла базы данных - это на самом деле присоединение базы данных к вашему экземпляру сервера. Эта операция (вложение базы данных) прозрачна для вашего приложения и, насколько я знаю, возможна только в Sql Server Express Edition. Когда вы прикрепляете файл базы данных, вам нужен файл журнала, который создается «на лету» на тот случай, если он не существует - как только каждая база данных SQL Server должна иметь файл журнала. Я не могу сказать, почему ваш SQL Server не может создать файл журнала для вас - если это нехватка места, отсутствие разрешений или что-то еще. Но, по крайней мере, у вас есть представление о том, для чего создан этот файл. Присоединение базы данных реализовано как особый случай создания базы данных - поэтому выполняется оператор CREATE DATABASE.

Теперь мы подошли ко второму вопросу. Имя файла базы данных обычно происходит от имени базы данных. Следовательно, если вы не редактируете имена файлов во время создания базы данных, намеренно имея два одинаковых именованных файла базы данных, это означает, что вы получите базу данных с тем же именем. В случае, если один из файлов находится в каталоге данных SQL Server, скорее всего, он используется сервером. Когда вы пытаетесь «использовать» файл базы данных (через AttachDbFilename), это фактически приводит к попытке создать базу данных с повторяющимся именем. Эта попытка всегда будет неудачной.

Надеюсь, это поможет.

1 голос
/ 07 августа 2009

Это правда, что файл MDF содержит базу данных, но все сложнее. (Одна БД может фактически охватывать несколько файлов mdf)

Вы не можете рассматривать или рассматривать Sql Server как базу данных на основе файлов, такую ​​как MS Access или некоторые другие настольные базы данных. Вы должны думать с точки зрения сервера. Сервер контролирует несколько именованных баз данных, и каждая база данных резервируется как минимум одним файлом данных (.mdf) и одним файлом журнала (.ldf). Сначала вы ссылаетесь на данные через сервер, затем ваша база данных - регистрация базы данных через сервер и сами файлы.

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

Если вы знакомы с веб-серверами, приведу аналогию: ожидаете ли вы, что сможете копировать HTML-файлы в разные папки, а затем просто переходить в эти разные папки с помощью браузера? Конечно, нет. Сначала вы должны создать новую виртуальную папку, которую распознает веб-сервер, и, возможно, настроить некоторые другие параметры, а затем вы сможете просмотреть свою «копию». База данных на Sql Server похожа на вашу виртуальную папку на веб-серверах, в которой данные можно «копировать», а затем «просматривать» как различные хранилища данных.

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