Sql-Server

sqlpackage.exe 在 SignalR 對像上失敗

  • March 13, 2021

問題:

在執行 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選項)。

引用自:https://dba.stackexchange.com/questions/286927