CREATE DATABASE не работает с использованием VSDBCMD

При попытке развернуть проект базы данных VS2010 с помощью инструмента VSDBCMD я получаю следующую ошибку:

SQL01268 .Net SqlClient Data Provider: Msg 5133, Level 16, State 1, Line 1 Directory lookup for the file "D:\MSSQL10_50\MSSQL10_50.MSSQLSERVER\MSSQL\Data\Data.mdf" failed with the operating system error 21(failed to retrieve text for this error. Reason: 1815).
SQL01268 .Net SqlClient Data Provider: Msg 1802, Level 16, State 1, Line 1 CREATE DATABASE failed. Some file names listed could not be created. Check related errors.

Однако, если я возьму сценарий SQL, сгенерированный VSDBCMD, и запусту его в SQL Management Studio, он будет работать нормально. Точно так же я могу создать БД вручную в Mgt Studio.

"Ошибка 21 операционной системы", по-видимому, Device Not Ready, но мне это кажется ложным... Все пути к папкам верны, и разблокировка защиты папок не решает проблему (например, "все"> полный контроль), Также нет ошибок в журнале SQL или в программе просмотра событий на сервере.

Чем отличается запуск VSDBCMD в командной строке от запуска одного и того же сценария SQL через Management Studio?

Любые идеи очень приветствуются!

Крис

2 ответа

Решение

Согласно моим собственным комментариям, эта ошибка была из-за того, что диск на самом деле не существовал.

Если вы создаете базу данных с vsdbcmd на сервере, основанном на dbschema, было бы неплохо установить путь к данным и файлам журналов.

Чтобы изменить путь к журналу в вашем файле.dbschema:

<Element Type="ISql90File" Name="[YOUR_DATABASE_NAME_Data]">
    <Property Name="FileName" Value="E:\YOUR DATA FOLDER\$(DatabaseName)_Data.MDF" />

<Element Type="ISql90File" Name="[YOUR_DATABASE_NAME_Log]">
    <Property Name="FileName" Value="E:\YOUR LOGS FOLDER\$(DatabaseName)_Log.LDF" />

затем импортируйте его на Sql Server с помощью командной строки:

CD\
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy\vsdbcmd.exe" /a:Deploy 
/cs:"Server=YOUR_SERVER\YOUR_INSTANCE;User Id=YOUR_USER;Password=YOUR_PASS;Pooling=false" 
/dsp:Sql /dd+ /model:"C:\FOLDER\YOUR_DBSCHEMA_FILE.dbschema" 
/p:TargetDatabase="YOUR_DATABASE_NAME"

Более подробная информация о vsdbcmd: http://msdn.microsoft.com/en-us/library/dd193283.aspx

Другие вопросы по тегам