Sql-Server
sqlpackage.exe 在 SignalR 對像上失敗
問題:
在執行 sqlpackage.exe 以應用 sql dacpac 時,它偶爾會在代理/SignalR 相關對像上失敗,這會破壞建構:
*** Could not deploy package. Error SQL72014: .Net SqlClient Data Provider: Msg 15151, Level 16, State 1, Line 1 Cannot drop the service 'Xxxxxx_xxxxx_0de7d69e-48ac-4a2b-95ef-d758d69b2a1e_Receiver', because it does not exist or you do not have permission. Error SQL72045: Script execution error. The executed script: DROP SERVICE [Xxxxxx_xxxxx_0de7d69e-48ac-4a2b-95ef-d758d69b2a1e_Receiver];
這是我們的
sqlpackage.exe
命令行參數:/p:TreatVerificationErrorsAsWarnings=True /p:DoNotAlterChangeDataCaptureObjects=True /p:DropIndexesNotInSource=True /p:DropObjectsNotInSource=True /p:ExcludeObjectTypes=Users;Logins;RoleMembership;Permissions;Credentials;DatabaseScopedCredentials;LinkedServerLogins;LinkedServers /p:BlockOnPossibleDataLoss=False
同樣,失敗率是每 10 次執行中的 1 次,並且沒有人手動刪除這些對象,因此我不知道為什麼如果它知道它就無法刪除該對象。有什麼好的解決方案可以使其始終如一地應用嗎?
同樣,失敗率是每 10 次執行中的 1 次,沒有人手動刪除這些對象
儘管沒有人手動刪除這些對象,但它似乎
SqlDependency
用於檢測數據庫更改。SqlDependency 創建/刪除臨時對象,因此,如果應用程序在發布期間使用 with/p:DropObjectsNotInSource=True
選項執行,則當部署腳本由 sqlpackage 執行時,該對象可能不再存在。一種選擇是在發布 dacpac 時停止應用程序。您還可以在發布期間排除問題對象(例如使用
DoNotDropObjectTypes
選項)。