為什麼系統對象需要在使用者數據庫之前恢復?
我正在將 sql server 2016 遷移到 2019(本地)。
在右側,為什麼系統對像中的腳本步驟(pre-stage 中的第 3 步)在使用者數據庫恢復步驟之前?
系統對象包括儲存過程的授權/撤銷/拒絕,那麼為什麼需要在恢復數據庫之前完成呢?
我不確定“系統對象包括儲存過程的授權/撤銷/拒絕”是什麼意思。這通常不是我們的意思。我們指的是數據庫之外的東西,例如登錄名、連結伺服器、sp_configure 設置等。
無論如何,該推薦順序似乎是一個錯誤,或者至少是文章作者所做的簡化。
例如,在恢復之後,IMO 可以更好地處理登錄。原因是登錄可能將該數據庫作為預設數據庫。在恢復之前創建它會失敗,除非您使用其他數據庫作為預設數據庫(例如 tempdb)創建它,並且在恢復之後將其更改為恢復的數據庫。即,先恢復然後創建登錄更容易。
因此,請考慮每種類型的“系統對象”(如果我們可以使用該術語)並根據它是什麼,您可以決定在還原之前還是之後更好地完成它。
順便說一句,這裡是我在移動數據庫時要處理的事情(這是您通過並行升級所做的):https ://karaszi.com/moving-a-database-between-two-sql -伺服器實例
在同一個連結中,它被稱為:
系統對象:一些應用程序依賴於單個使用者數據庫範圍之外的資訊、實體和/或對象。通常,應用程序依賴於 master 和 msdb 數據庫,以及使用者數據庫。任何儲存在使用者數據庫之外的、該數據庫正常執行所需的任何內容都必須在目標伺服器實例上可用. 例如,應用程序的登錄作為元數據儲存在主數據庫中,並且必須在目標伺服器上重新創建。如果應用程序或數據庫維護計劃依賴於 SQL Server 代理作業,其元數據儲存在 msdb 數據庫中,則必須在目標伺服器實例上重新創建這些作業。同樣,伺服器級觸發器的元數據儲存在 master 中。
上面的延續還有另一部分:
將應用程序的數據庫移動到另一個伺服器實例時,必須在目標伺服器實例的 master 和 msdb 中重新創建依賴實體和對象的所有元數據。例如,如果數據庫應用程序使用伺服器級觸發器,那麼僅在新系統上附加或恢復數據庫是不夠的。除非您在主數據庫中手動為這些觸發器重新創建元數據,否則數據庫將無法按預期工作
系統對像不僅與使用者定義數據庫中的對像有關,而且與使用者數據庫(如 master 或 msdb 數據庫)之外的許多方面有關,因此系統對像在使用者數據庫恢復步驟之前。
此處通過腳本級別建議了類似的步驟
希望這可以幫助。