Sql-Server

為什麼系統對象需要在使用者數據庫之前恢復?

  • March 10, 2022

連結:https ://docs.microsoft.com/en-us/sql/database-engine/install-windows/choose-a-database-engine-upgrade-method?view=sql-server-ver15#migrate-to-全新安裝

在此處輸入圖像描述

我正在將 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 數據庫)之外的許多方面有關,因此系統對像在使用者數據庫恢復步驟之前。

此處通過腳本級別建議了類似的步驟

希望這可以幫助。

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