管理在另一部伺服器上提供資料庫時所需的中繼資料

適用於:SQL Server

本文與下列情況有關:

  • 設定 Always On 可用性群組的可用性複本。

  • 設定資料庫的資料庫鏡像。

  • 當您準備在記錄傳送組態中變更主要和次要伺服器的角色時。

  • 將資料庫還原至另一個伺服器執行個體。

  • 在另一個伺服器執行個體上附加資料庫的副本。

  • 使用方法執行資料庫引擎升級 - 移轉至新的安裝。

  • 將資料庫移轉至 Azure SQL (虛擬機器或受控執行個體)。

某些應用程式會相依於超出單一使用者資料庫範圍之外的資訊、實體和/或物件。 一般而言,應用程式相依於 mastermsdb 資料庫以及使用者資料庫。 如果有資料庫正確運作所需的任何項目儲存在使用者資料庫外部,則必須設法讓目的地伺服器執行個體也能提供。 例如,應用程式的登入在 master 資料庫中儲存為中繼資料,就必須在目的地伺服器上加以重新建立。 若應用程式或資料庫維護計劃相依於 SQL Server Agent 作業,而其中繼資料儲存於 msdb 資料庫中,則必須在目的地伺服器執行個體上,重新建立那些作業。 同樣的,伺服器層級觸發程序的中繼資料會儲存在 master中。

當您將應用程式的資料庫移至其他伺服器執行個體時,您必須在目的地伺服器執行個體上重新建立 mastermsdb 中相依實體及物件的所有中繼資料。 例如,如果資料庫應用程式使用伺服器層級觸發程序,則僅在新系統上附加或還原資料庫,並不足夠。 除非您以手動方式為 master 資料庫中的那些觸發程序重新建立中繼資料,否則該資料庫無法如預期般運作。

儲存在使用者資料庫外部的資訊、實體和物件

本文其餘的篇幅將摘要說明在其他伺服器執行個體上提供資料庫時,可能對該資料庫造成影響的潛在問題。 您可能需要重新建立下列清單列出的其中一個或多個資訊、實體或物件類型。 若要查看摘要,請選取各項目的連結。

伺服器組態設定

SQL Server 2005 (9.x) 和更新版本會選擇性地安裝並啟動主要服務與功能。 這可有助於減少系統易受攻擊的介面區。 在新安裝的預設組態中,許多功能都不會啟用。 如果資料庫仰賴預設關閉的任何服務或功能,您就必須在目的地伺服器執行個體上啟用這項服務或功能。

如需設定和啟用或停用服務或功能的詳細資訊,請參閱伺服器組態選項 (SQL Server)

認證

認證是包含驗證資訊的記錄,而該資訊是連線到 SQL Server 外部資源時的必要資訊。 大部分認證由 Windows 登入和密碼組成。

如需此功能的詳細資訊,請參閱認證 (資料庫引擎)

注意

SQL Server Agent Proxy 帳戶會使用認證。 若要了解 Proxy 帳戶的認證識別碼,請使用 sysproxies 系統資料表。

跨資料庫查詢

DB_CHAINING 和 TRUSTWORTHY 資料庫選項預設是 OFF。 如果原始資料庫的其中一個選項設定為 ON,您就必須在目的地伺服器執行個體的資料庫上啟用該選項。 如需詳細資訊,請參閱 ALTER DATABASE (Transact-SQL)

附加與卸離作業會停用資料庫的跨資料庫擁有權鏈結。 如需如何啟用鏈結的相關資訊,請參閱 跨資料庫擁有權鏈結伺服器組態選項

如需詳細資訊,另請參閱設定鏡像資料庫可使用 Trustworthy 屬性 (Transact-SQL)

資料庫擁有權

當資料庫在另一部電腦上還原時,起始還原作業的 SQL Server 登入或 Windows 使用者會自動變成新資料庫的擁有者。 還原資料庫時,系統管理員或新的資料庫擁有者可以變更資料庫擁有權。

分散式查詢和連結的伺服器

OLE DB 應用程式支援分散式查詢和連結的伺服器。 分散式查詢會從相同或不同電腦上的多重異質資料來源存取資料。 連結伺服器的組態可讓 SQL Server 對遠端伺服器上的 OLE DB 資料來源執行命令。 如需這些功能的詳細資訊,請參閱連結的伺服器 (資料庫引擎)

加密的資料

如果您在另一個伺服器執行個體上提供的可用資料庫包含加密的資料,而且資料庫主要金鑰受到原始伺服器的服務主要金鑰保護時,可能就必須重新建立服務主要金鑰加密。 「資料庫主要金鑰」 是一個用來保護加密資料庫中憑證私密金鑰和非對稱金鑰的對稱金鑰。 建立資料庫主要金鑰時,會利用三重 DES 演算法和使用者提供的密碼來加密資料主要金鑰。

若要在伺服器執行個體上啟用資料庫主要金鑰的自動解密,就要使用服務主要金鑰來加密此金鑰的副本。 這個加密的副本會同時存放在資料庫和 master中。 通常,每當主要金鑰變更時,儲存在 master 中的複本便會以無訊息模式更新。 SQL Server 會先嘗試使用執行個體的服務主要金鑰來解密資料庫主要金鑰。 如果該解密失敗,SQL Server 會從認證存放區中搜尋主要金鑰認證,這些主要金鑰認證具有與它需要其主要金鑰之資料庫相同的家族 GUID。 SQL Server 會嘗試利用每個相符的認證來將資料庫主要金鑰解密,直到解密成功或沒有其他認證為止。 如果主要金鑰未以服務主要金鑰來加密,則必須使用 OPEN MASTER KEY 陳述式和密碼來開啟。

當加密的資料庫複製、還原或附加至新的 SQL Server 執行個體時,以服務主要金鑰加密的資料庫主要金鑰副本並不會存放在目的地伺服器執行個體上的 master 中。 您必須在目的地伺服器執行個體上,開啟資料庫的主要金鑰。 若要開啟主要金鑰,請執行下列陳述式:OPEN MASTER KEY DECRYPTION BY PASSWORD ='密碼' 。 建議您接著執行下列陳述式來啟用資料庫主要金鑰的自動解密:ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY。 這個 ALTER MASTER KEY 陳述式會將以服務主要金鑰加密的資料庫主要金鑰副本提供給伺服器執行個體。 如需詳細資訊,請參閱 OPEN MASTER KEY (Transact-SQL)ALTER MASTER KEY (Transact-SQL)

如需如何啟用鏡像資料庫之資料庫主要金鑰的自動解密相關資訊,請參閱 設定加密鏡像資料庫

如需詳細資訊,請參閱:

使用者定義錯誤訊息

使用者定義錯誤訊息位於 sys.messages 目錄檢視中。 此目錄檢視會存放在 master 內。 如果資料庫應用程式仰賴使用者定義錯誤訊息,而且此資料庫可在另一個伺服器執行個體上使用時,請使用 sp_addmessage ,在目的地伺服器執行個體上加入這些使用者定義訊息。

事件通知和 Windows Management Instrumentation (WMI) 事件 (伺服器層級)

伺服器層級事件通知

伺服器層級事件通知會存放在 msdb中。 因此,如果資料庫應用程式依賴伺服器層級事件通知,就必須在目的地伺服器執行個體上重新建立該事件通知。 若要檢視伺服器執行個體上的事件通知,請使用 sys.server_event_notifications 目錄檢視。 如需詳細資訊,請參閱 Event Notifications

此外,事件通知是使用 Service Broker 進行傳送。 包含服務的資料庫中不包括內送訊息路由。 但是,外顯路由會儲存在 msdb中。 如果服務使用 msdb 資料庫中的外顯路由將內送訊息傳送至服務,當您在不同執行個體中附加資料庫時,就必須重新建立此路由。

Windows Management Instrumentation (WMI) 事件

WMI Provider for Server Events 可讓您使用 Windows Management Instrumentation (WMI) 在 SQL Server 中監視事件。 如果伺服器層級事件要透過資料庫所依賴的 WMI 提供者來公開,則任何依賴此事件的應用程式必須定義有目的地伺服器執行個體的電腦。 WMI 事件提供者會以 msdb中定義的目標服務來建立事件通知。

注意

如需詳細資訊,請參閱 伺服器事件的 WMI 提供者概念

若要使用 SQL Server Management Studio 建立 WMI 警示

鏡像資料庫如何使用事件通知

根據定義,若涉及鏡像資料庫時,跨資料庫傳送事件通知為遠端作業,因為鏡像資料庫可以容錯移轉。 Service Broker 會以「鏡像路由」的形式,為鏡像資料庫提供特殊支援。 鏡像路由有兩個位址:一個是主體伺服器執行個體的位址,另一個是鏡像伺服器執行個體的位址。

透過設定鏡像路由,可以讓 Service Broker 路由知道資料庫鏡像的存在。 鏡像路由可讓 Service Broker 將交談明確地重新導向至目前的主體伺服器執行個體。 例如,假設有一個服務 Service_A 是由鏡像資料庫 Database_A 所裝載。 假設您需要另一個服務 Service_B (由 Database_B 所裝載) 與 Service_A 對話。 為了要讓這個對話可行,Database_B 必須包含 Service_A 的鏡像路由。 此外,Database_A 也必須包含與 Service_B 之間的非鏡像 TCP 傳輸路由,此路由在容錯移轉之後會維持有效狀態,與本機路由不同。 這些路由可讓 ACK 在容錯移轉之後傳送回來。 因為傳送者的服務永遠是以相同方式來命名,所以路由必須指定 Broker 執行個體。

不論鏡像資料庫中的服務是起始端服務,或是目標服務,鏡像路由的需求都適用:

  • 如果目標服務在鏡像資料庫中,則起始端服務必須有回到目標的鏡像路由。 不過,目標可以有回到起始端的一般路由。

  • 如果起始端服務在鏡像資料庫中,則目標服務必須有回到起始端的鏡像路由,才能傳送收條與回應。 不過,起始端可以有指向目標的一般路由。

擴充預存程序

重要

SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 CLR 整合

擴充預存程序是使用 SQL Server 擴充預存程序 API 進行程式設計的。 sysadmin 固定伺服器角色的成員可以使用 SQL Server 執行個體來註冊擴充預存程序並授與使用者執行該程序的權限。 擴充預存程序只能加入 master 資料庫。

擴充預存程序會直接在 SQL Server 執行個體的位址空間中執行,而且它們可能會產生降低伺服器效能和可靠性的記憶體遺漏或其他問題。 您應考慮將擴充預存程序與參考資料儲存在不同的 SQL Server 執行個體中。 同時應考慮使用分散式查詢來存取資料庫。

重要

將擴充預存程序加入伺服器並將 EXECUTE 權限授與其他使用者之前,系統管理員應徹底檢閱每個擴充預存程序,確定其中不含任何有害或惡意的程式碼。

如需詳細資訊,請參閱 GRANT 物件權限 (Transact-SQL)DENY 物件權限 (Transact-SQL)REVOKE 物件權限 (Transact-SQL)

Full-Text Engine for SQL Server 屬性

全文檢索引擎的屬性是由 sp_fulltext_service所設定。 請確定目的地伺服器執行個體具有這些屬性的必要設定。 如需這些屬性的詳細資訊,請參閱 FULLTEXTSERVICEPROPERTY (Transact-SQL)

此外,如果 斷詞工具與字幹分析器 元件或 全文檢索搜尋篩選 元件在原始和目的地伺服器執行個體上具有不同的版本,全文檢索索引和查詢就可能會有不同的行為方式。 而且, 同義字 會存放在執行個體專用的檔案中。 您必須將這些檔案的副本傳送至目的地伺服器執行個體上的對等位置,或在新執行個體上重新建立這些檔案。

注意

當您將包含全文檢索目錄檔案的 SQL Server 2005 (9.x) 資料庫附加至 SQL Server 伺服器執行個體時,系統會從先前的位置附加這些目錄檔案以及其他資料庫檔案,如同 SQL Server 2005 (9.x) 的行為一樣。 如需詳細資訊,請參閱 升級全文檢索搜尋

如需詳細資訊,請參閱:

工作

如果資料庫仰賴 SQL Server Agent 作業,您就必須在目的地伺服器執行個體上重新建立這些作業。 作業會仰賴所屬的環境。 如果您打算在目的地伺服器執行個體上重新建立現有的作業,可能必須修改目的地伺服器執行個體,以便符合該作業在原始伺服器執行個體上的環境。 下列環境因素相當重要:

  • 作業使用的登入

    若要建立或執行 SQL Server Agent 作業,您必須先將作業所需的任何 SQL Server 登入加入至目的地伺服器執行個體。 如需詳細資訊,請參閱 設定使用者可建立及管理 SQL Server Agent 作業

  • SQL Server Agent 服務啟動帳戶

    服務啟動帳戶會定義 SQL Server Agent 用來執行的 Microsoft Windows 帳戶及其網路權限。 SQL Server Agent 會以指定的使用者帳戶執行。 Agent 服務的內容會影響作業及其執行環境的設定。 此帳戶必須具有作業所需之資源 (例如,網路共用) 的存取權。 如需如何選取和修改服務啟動帳戶的相關資訊,請參閱 選取 SQL Server Agent 服務的帳戶

    為了正確運作,服務啟動帳戶必須設定成具有正確的網域、檔案系統和登錄權限。 此外,作業可能會需要使用必須針對服務帳戶設定的共用網路資源。 如需相關資訊,請參閱 設定 Windows 服務帳戶與權限

  • SQL Server Agent 服務 (與 SQL Server 的特定執行個體相關聯) 具有自己的登錄區,而且它的作業通常會相依於此登錄區中的一或多項設定。 為了如預期方式運作,作業會需要使用這些登錄設定。 如果您使用指令碼在另一個 SQL Server Agent 服務中重新建立作業,其登錄可能不會有該作業的正確設定。 為了讓重新建立的作業在目的地伺服器執行個體上正確運作,原始和目的地 SQL Server Agent 服務都應該具有相同的登錄設定。

    警告

    如果目前的設定是其他作業所需,在目的地 SQL Server Agent 服務上變更登錄設定以便處理重新建立的作業可能會產生問題。 此外,不當編輯登錄可能會造成系統嚴重受損。 在變更登錄之前,我們建議您先備份電腦上所有重要的資料。

  • SQL Server Agent Proxy

    SQL Server Agent Proxy 可定義指定之作業步驟的安全性內容。 為了讓作業在目的地伺服器執行個體上執行,您必須在該執行個體上手動重新建立此作業所需的所有 Proxy。 如需詳細資訊,請參閱 建立 SQL Server Agent Proxy疑難排解使用 Proxy 的多伺服器作業

如需詳細資訊,請參閱:

若要檢視現有的作業及其屬性

若要建立作業

使用指令碼來重新建立作業的最佳作法

我們建議您先編寫簡單作業的指令碼、在其他 SQL Server Agent 服務上重新建立作業,然後執行該作業,看看是否如預期方式運作。 這項做法可讓您識別不相容性並嘗試加以解決。 如果以指令碼編寫的作業無法如預期方式在新環境中運作,建議您建立可在該環境下正確運作的對等作業。

登入

登入 SQL Server 執行個體需要有效的 SQL Server 登入。 此登入是用於驗證處理序,可確認主體是否能連接到 SQL Server 的執行個體。 在伺服器執行個體上未定義或定義不正確之對應 SQL Server 登入的資料庫使用者無法登入此執行個體。 這類使用者就是伺服器執行個體上的資料庫 「被遺棄使用者」 (Orphaned User)。 當資料庫還原、附加或複製到不同的 SQL Server 執行個體後,資料庫使用者就可能會成為被遺棄使用者。

若要在原始資料庫副本中產生部分或所有物件的指令碼,您可以使用「產生指令碼精靈」,然後在 [選擇指令碼選項] 對話方塊中,將 [編寫登入的指令碼] 選項設定為 [True]

權限

當您在其他伺服器執行個體上提供資料庫時,可能會影響下列類型的權限。

  • 系統物件的 GRANT、REVOKE 或 DENY 權限

  • 伺服器執行個體的 GRANT、REVOKE 或 DENY 權限 (「伺服器層級權限」)

系統物件的 GRANT、REVOKE 及 DENY 權限

系統物件 (例如,預存程序、擴充預存程序、函數和檢視) 的權限會存放在 master 資料庫中,而且您必須在目的地伺服器執行個體上設定這些權限。

若要在原始資料庫副本中產生部分或所有物件的指令碼,您可以使用「產生指令碼精靈」,然後在 [選擇指令碼選項] 對話方塊中,將 [編寫物件層級權限的指令碼] 選項設定為 [True]

重要

當您在編寫登入的指令碼時,密碼並不會編寫在指令碼中。 如果您具有使用 SQL Server 驗證的登入,就必須修改目的地上的指令碼。

您可以在 sys.system_objects 目錄檢視中看到系統物件。 您可以在 master 資料庫的 sys.database_permissions 目錄檢視中,看到系統物件的權限。 如需查詢這些目錄檢視和授與系統物件權限的詳細資訊,請參閱 GRANT 系統物件權限 (Transact-SQL)。 如需詳細資訊,請參閱 REVOKE 系統物件權限 (Transact-SQL)DENY 系統物件權限 (Transact-SQL)

伺服器執行個體的 GRANT、REVOKE 及 DENY 權限

伺服器範圍的權限會存放在 master 資料庫中,而且您必須在目的地伺服器執行個體上設定這些權限。 如需伺服器執行個體之伺服器權限的詳細資訊,請查詢 sys.server_permissions 目錄檢視。如需伺服器主體的詳細資訊,請查詢 sys.server_principals 目錄檢視。如需伺服器角色之成員資格的詳細資訊,請查詢 sys.server_role_members 目錄檢視。

如需詳細資訊,請參閱 GRANT 伺服器權限 (Transact-SQL)REVOKE 伺服器權限 (Transact-SQL)DENY 伺服器權限 (Transact-SQL)

憑證或非對稱金鑰的伺服器層級權限

您無法直接將伺服器層級權限授與憑證或非對稱金鑰。 不過,伺服器層級權限會授與專為特定憑證或非對稱金鑰建立的對應登入。 因此,需要伺服器層級權限的每個憑證或非對稱金鑰都會需要自己的 「憑證對應登入」「非對稱金鑰對應登入」。 若要授與憑證或非對稱金鑰的伺服器層級權限,請將這些權限授與對應的登入。

注意

對應的登入只會用於授權以對應憑證或非對稱金鑰簽署的程式碼。 對應的登入無法用於驗證。

對應的登入及其權限都位於 master中。 如果憑證或非對稱金鑰位於 master以外的資料庫中,您就必須在 master 中重新建立此項目並將它對應至登入。 如果您將資料庫移動、複製或還原至另一個伺服器執行個體,就必須在目的地伺服器執行個體的 master 資料庫中重新建立其憑證或非對稱金鑰、將它對應至登入,然後將所需的伺服器層級權限授與此登入。

若要建立憑證或非對稱金鑰

若要將憑證或非對稱金鑰對應至登入

若要將權限指派給對應的登入

如需憑證和非對稱金鑰的詳細資訊,請參閱< Encryption Hierarchy>。

TRUSTWORHTY 屬性

TRUSTWORHTY 資料庫屬性是用來指定 SQL Server 執行個體是否信任資料庫及其中的內容。 附加資料庫時,根據預設且為了安全起見,此選項會設定為 OFF,即使此選項在原始伺服器上設定為 ON 也一樣。 如需這個屬性的詳細資訊,請參閱 TRUSTWORTHY 資料庫屬性;如需開啟這個選項的資訊,請參閱 ALTER DATABASE (Transact-SQL)

複寫設定

如果您將複寫資料庫的備份還原到另一個伺服器或資料庫,將無法保留複寫設定。 在此情況下,您必須在還原備份之後,重新建立所有發行集和訂閱。 若要讓此程序更簡單,請針對目前的複寫設定和啟用及停用複寫,建立指令碼。 若要協助重新建立複寫設定,請複製這些指令碼並變更伺服器名稱參考,以便針對目的地伺服器執行個體運作。

如需詳細資訊,請參閱備份及還原複寫的資料庫資料庫鏡像和複寫 (SQL Server)記錄傳送和複寫 (SQL Server)

Service Broker 應用程式

Service Broker 應用程式的許多部分都會隨資料庫移動。 不過,此應用程式的某些部分則必須在新位置中重新建立或重新設定。 根據預設且為了安全起見,從其他伺服器附加資料庫時,is_broker_enabledis_honoor_broker_priority_on 的選項都會設定為 OFF。 如需如何將這些選項設定為 ON 的資訊,請參閱 ALTER DATABASE (Transact-SQL)

啟動程序

啟動程序是指標示為自動執行而且每次 SQL Server 啟動時都會執行的預存程序。 如果資料庫仰賴任何啟動程序,您就必須在目的地伺服器執行個體上定義這些程序,並將它們設定為啟動時自動執行。

觸發程序 (伺服器層級)

DDL 觸發程序會引發預存程序,以便回應數種資料定義語言 (DDL) 事件。 這些事件主要對應至以 CREATE、ALTER 和 DROP 關鍵字開頭的 Transact-SQL 陳述式。 執行類似 DDL 作業的某些系統預存程序也可能引發 DDL 觸發程序。

如需有關這項功能的詳細資訊,請參閱< DDL Triggers>。

另請參閱

自主資料庫
複製資料庫至其他伺服器
資料庫卸離與附加 (SQL Server)
容錯移轉至記錄傳送次要 (SQL Server)
資料庫鏡像工作階段期間的角色切換 (SQL Server)
設定加密鏡像資料庫
SQL Server 組態管理員
針對孤立使用者進行疑難排解 (SQL Server)
移轉至新的安裝移轉概觀:SQL Server 至 Azure VM 上的 SQL Server