我一直在開發一個部署腳本來將我們的數據庫項目部署到多個數據庫實例。我正在通過手動運行來測試它。這是一個非常簡單的腳本,只是針對爲部署我們的基礎或模板數據庫而創建的部署清單運行VSDBCMD。爲了部署到同一服務器上的不同數據庫,該腳本使用部署清單,但也指定了/ p:DatabaseName和/ p:TargetDatabase屬性。「目標數據庫模式提供程序無法確定」使用VSDBCMD但只有在指定/ ConnectionString時
這一直工作一整天。
我們對這些數據庫使用SQL Server身份驗證,我希望能夠將腳本的用戶名和密碼指定爲參數,以便它們不必硬編碼。我能看到的唯一方法就是使用/ ConnectionString開關。這就是導致失敗的原因。即使當我指定與部署清單中存儲的完全相同的連接字符串時,該腳本也會失敗,並顯示錯誤「無法確定目標數據庫模式提供程序」。腳本:
function DeployDatabase([string] $manifestPath, [string] $password, [string] $instance, [string] $server, [string] $user)
{
$vsdbcmdPath = "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy"
$vsdbcmd = "$vsdbcmdPath\vsdbcmd.exe"
$outputScriptPath = "$instance.sql"
$logPath = "$instance.log"
$connectionString = "Data Source=$server;User ID=$user;"
& $vsdbcmd /dd /dsp:SQL /manifest:$manifestPath /a:Deploy /p:DatabaseName=$instance /p:TargetDatabase=$instance /script:$outputScriptPath /cs:"$connectionString" |
Out-File -FilePath $logPath
}
# Actual call is omitted to protect the $server, $user and $password
簡單地忽略/ cs開關可以讓它再次成功。請注意,上面的連接字符串中,甚至不必在連接字符串中指定密碼以導致失敗。
目標數據庫服務器正在運行SQL Server 2008 R2,並且是最新的補丁程序。
我想知道如何避免這個錯誤,否則我想知道更好的方式來指定部署時的用戶名和密碼,而不需要以明文形式將密碼放在部署清單中。