2010-08-31 3 views
4

Развертывание базы данных VS2010 не работает на моем сервере сборки, на котором установлен SQL Server 2008 R2. Вот вывод, что релевантно:VS2010 Ошибка развертывания проекта DB SQL01268 Ошибка поиска каталога

Создание Acme.Database ...

D: \ TeamCity \ BuildAgent \ Work \ da2fc5ebd5805d44 \ SRC \ Acme.Database \ SQL \ Acme.Database.sql (30, 0): Ошибка SQL01268: .Net Поставщик данных SqlClient: Msg 5133, уровень 16, состояние 1, строка 1 Поиск каталога для файла «C: \ Program Files \ Microsoft SQL Server ** MSSQL10.MSSQLSERVER ** \ MSSQL \ DATA \ Acme_Database_log.ldf "с ошибкой операционной системы 3 (система не может найти указанный путь).

D: \ TeamCity \ BuildAgent \ Work \ da2fc5ebd5805d44 \ src \ Acme.Database \ sql \ Acme.Database.sql (30,0): Ошибка SQL01268: .Net Поставщик данных SqlClient: Msg 1802, уровень 16, состояние 1, строка 1 CREATE DATABASE не выполнена. Некоторые имена файлов не могут быть созданы. Проверьте связанные ошибки.

Произошла ошибка во время выполнения партии.

Фактический путь здесь:

C: \ Program Files \ Microsoft SQL Server ** MSSQL10_50.MSSQLSERVER ** \ MSSQL \ DATA \ Acme_Database.mdf

только ссылка на пути я мог бы найти в базе данных проекта была в корневой папке файл с именем:

PRIMARY.Acme_Database.sqlfile.sql

Он содержит инструкцию ALTER DATABASE, которую я изменил, чтобы использовать путь _50, но это не исправить проблему.

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

+0

Мне удалось открыть мою базу данных, открыв файл .sql, сгенерированный и обновляющий пути базы данных в нем вручную. Я еще не нашел способ правильно определить путь, который вам нужен. Ryan - Изначально у меня не было базы данных на сервере, поэтому не было нигде искать свой путь за ваш скринкаст. Я создал пустую базу данных, но неудачное развертывание удаляет ее (а затем не может ее повторно добавить). Итак, все еще немного с этим справляюсь, но по крайней мере у меня сейчас развернута БД на коробке (и обходной путь для этого в будущем). – ssmith

+0

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

ответ

10

Оказывается, если вы укажете «файл» в объектах схемы/объекты уровня базы данных \ хранилище \ файлы (используйте «Добавить элемент», «Файл»), значения, указанные в пути, переопределяют найденные с сервера. Если вы должны указать их, используйте переменные из sqlcmdvariables $ (DefaultdataPath) $ (имя_базы), чтобы заполнить все.

+1

Не уверен, что это имеет значение, где они находятся - У меня был Acme.sqlfile.sql и Acme_log.sqlfile.sql в корне моего проекта dbproj (по какой-то причине), и у них были пути в них, которые переопределяли то, что говорил сервер. Удаленные и развернутые теперь прекрасно работают либо с сервера сборки, либо с dev-машины. Спасибо, вы пошли выше и дальше, помогая понять это! – ssmith

1

Я ничего не знаю о TeamCity, так что это может быть глупый вопрос, но как вы делаете развертывание? Похоже, что MSBuild развертывание задачи для проекта БД может принимать свойство, которое дает путь данных:

http://www.codewrecks.com/blog/index.php/2009/10/06/deploy-a-database-project-with-tfs-build/

Вы можете установить путь, путь?

+0

Я еще не подключил его к TeamCity - я открывал его в VS2010 и щелкаю правой кнопкой мыши в проводнике решений и выбираю Deploy. Я дам попробовать MSBuild, хотя, спасибо! – ssmith

+0

Пробовал это, но настройка пути через параметры командной строки/msbuild не сработала, потому что путь был переопределен наличием файлов .sqlfile.sql (см. Мой комментарий к правильному ответу) – ssmith

2

Посмотрите путь к файлу по умолчанию на самом сервере.

Screencast: http://screencast.com/t/OWM5ODFjZj

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

[Обновить] Причина, по которой я предлагаю это, заключается в том, что во время создания сценария развертывания, если вы не указали параметры на вкладке «Параметры проекта ->« Развертывание », DefaultDataPath просматривается с пути целевого сервера.

1

У меня была такая же ошибка, но другое решение. Для меня все было правильно (насколько я могу судить), но сгенерированный сценарий развертывания задает переменные пути перед переменной databasename, что приводит к ссылке на переменную, которая не существует. Я обновил Database.sqlcmdvars для жесткого кодирования значения имени базы данных - не лучшая практика, но достаточный обходной путь для моих нужд.

Смежные вопросы