Невозможно запустить компонент dbdeploy с помощью msbuild на Windows Server 2012, где установлен SQL Server 2012
Я пытаюсь запустить компонент dbdeploy с помощью MSBuild на Windows Server 2012, где установлен SQL Server 2012.
При запуске сценария msbuild я получаю следующую ошибку:
"E:\TestDeployment\Test.proj" (UpgradeDatabase target) (1) ->(dbDeploy target) ->
E:\TestDeployment\Test.proj(212,5): error : Unexpected System.IO.FileNotFoundException
error executing SQL command: -- BEGINNING TRANSACTION\r
E:\TestDeployment\Test.proj(212,5): error : PRINT 'Beginning transaction'\r
E:\TestDeployment\Test.proj(212,5): error : BEGIN TRANSACTION \r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : -- Drop Table ChangeLog\r
E:\TestDeployment\Test.proj(212,5): error : Print 'Checking for Table ChangeLog'\r
E:\TestDeployment\Test.proj(212,5): error : IF (NOT EXISTS(SELECT * FROM sys.objects WHER
E [object_id] = OBJECT_ID(N'[dbo].ChangeLog') AND [type]='U'))\r
E:\TestDeployment\Test.proj(212,5): error : BEGIN\r
E:\TestDeployment\Test.proj(212,5): error : CREATE TABLE dbo.ChangeLog \r
E:\TestDeployment\Test.proj(212,5): error : (\r
E:\TestDeployment\Test.proj(212,5): error : change_number INTEGER NOT NUL
,\r
E:\TestDeployment\Test.proj(212,5): error : delta_set VARCHAR(10) NOT NUL
,\r
E:\TestDeployment\Test.proj(212,5): error : start_dt DATETIME NOT NULL,\r
E:\TestDeployment\Test.proj(212,5): error : complete_dt DATETIME NULL,\r
E:\TestDeployment\Test.proj(212,5): error : applied_by VARCHAR(100) NOT N
LL,\r
E:\TestDeployment\Test.proj(212,5): error : description VARCHAR(500) NOT
ULL\r
E:\TestDeployment\Test.proj(212,5): error : )\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : IF @@ERROR<>0 OR @@TRANCOUNT=0 BEGIN
IF @@TRANCOUNT>0 ROLLBACK SET NOEXEC ON END\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : ALTER TABLE ChangeLog ADD CONSTRAINT
PK_ChangeLog PRIMARY KEY (change_number, delta_set)\r
E:\TestDeployment\Test.proj(212,5): error : IF @@ERROR<>0 OR @@TRANCOUNT=0 BEGIN
IF @@TRANCOUNT>0 ROLLBACK SET NOEXEC ON END\r
E:\TestDeployment\Test.proj(212,5): error : END\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : IF @@ERROR<>0 OR @@TRANCOUNT=0 BEGIN IF @@TRA
NCOUNT>0 ROLLBACK SET NOEXEC ON END\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : UPDATE dbo.ChangeLog SET complete_dt = getdat
e() WHERE complete_dt IS NULL\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : IF @@ERROR<>0 OR @@TRANCOUNT=0 BEGIN IF @@TRA
NCOUNT>0 ROLLBACK SET NOEXEC ON END\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : -- COMMITTING TRANSACTION\r
E:\TestDeployment\Test.proj(212,5): error : IF @@TRANCOUNT>0\r
E:\TestDeployment\Test.proj(212,5): error : BEGIN\r
E:\TestDeployment\Test.proj(212,5): error : PRINT 'Committing transaction'\r
E:\TestDeployment\Test.proj(212,5): error : COMMIT TRANSACTION \r
E:\TestDeployment\Test.proj(212,5): error : END\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : SET NOEXEC OFF\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error :
E:\TestDeployment\Test.proj(212,5): error : Could not load file or assembly 'Microsoft.SqlServer.BatchParser, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.
Приведенный выше скрипт отлично работает в моем окне Dev, а также в окне (Windows Server 2008 R2), где установлен SQL SERVER 2008 R2. Проблемы начались после того, как я попытался проверить его на новом окне, где установлен SQL SERVER 2012.
Может ли кто-нибудь помочь мне решить эту проблему?
2 ответа
Я проанализировал проблему и обнаружил, что мне нужно обновить компонент dbDeploy. Я обновил существующий проект с помощью DbDeploy.Net 2, который можно найти по URL-адресу: http://dbdeploynet2.codeplex.com/ а затем внес изменения в существующий сценарий msbuild на основе упомянутых примеров, и он начал работать нормально для меня. Единственная проблема, с которой я столкнулся после этой реализации, это использование DedicatedAdminConnection="True", которое вызывало еще одну ошибку, связанную с подключением SQL. Поэтому я предпочел не использовать DedicatedAdminConnection="True" в сценариях msbuild.
Проверьте переменные окружения между машиной, которая работает, и той, которая не работает. Это предполагает, что вы открываете командную строку, а затем запускаете MSBuild.
Я установил SQL Server 2012 на мою машину и обнаружил BatchParser.DLL в:
- C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ DTS\Binn
- C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ Инструменты \ Binn
- C: \ Program Files (x86) \ Microsoft SQL Server \ Client SDK \ ODBC \ 110 \ Tools\Binn
Таким образом, наиболее вероятной причиной ошибки является отсутствие переменной среды, которая указала бы на одну из них.
Насколько я вижу, они только в моем PATH
переменная.
Если вы не можете найти этот DDL ни в одном из этих мест, вам необходимо установить SMO, как описано в следующих вопросах SO:
- Не удается найти microsoft.sqlserver.batchparser.dll
- Где я могу найти "Microsoft.SqlServer.BatchParser.dll"?
РЕДАКТИРОВАТЬ:
Последнее, что нужно проверить, это наличие папки C:\Program Files (x86)\Microsoft SQL Server\100, в которой бы находились папки DTS\Binn и / или Tools\Binn. Я предполагаю, что, основываясь на ошибке
Не удалось загрузить файл или сборку 'Microsoft.SqlServer.BatchParser, версия =10.0.0.0
что он специально ищет версию SMO 2008, то есть то, что есть у вашего dev-бокса, но не в новом боксе, в котором есть только SQL 2012. Ваши варианты тогда:
- Попробуйте просто скопировать файл "batchparser.dll" из своего блока разработки на новый сервер SQL 2012 и поместить его в папку C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn.
- Загрузите и установите пакет новых компонентов SQL Server 2008 R2, который включает SMO, на новый сервер SQL Server 2012. Разверните раздел "Инструкции по установке" и перейдите к "Общие объекты управления Microsoft® SQL Server® 2008 R2", чтобы получить соответствующий MSI.