本主題與下列情況相關:
設定 AlwaysOn 可用性群組可用性群組的可用性複本。
設定資料庫的資料庫鏡像。
準備在記錄傳送組態中變更主要和輔助伺服器之間的角色時。
將資料庫還原至另一個伺服器實例。
在另一個伺服器實例上附加資料庫複本。
某些應用程式相依於單一使用者資料庫範圍以外的信息、實體和/或物件。 一般而言,應用程式具有 master 和 msdb 資料庫的相依性,以及用戶資料庫上的相依性。 如果有資料庫正確運作所需的任何項目儲存在使用者資料庫外部,則必須確保目的地伺服器實例可以使用。 例如,應用程式的登入會儲存為 master 資料庫中的元數據,而且必須在目的地伺服器上重新建立它們。 如果應用程式或資料庫維護計劃相依於 SQL Server Agent 作業,其元數據會儲存在 msdb 資料庫中,您必須在目的地伺服器實例上重新建立這些作業。 同樣地,伺服器層級觸發程式的元數據會儲存在 master 中。
當您將應用程式的資料庫移至另一個伺服器實例時,您必須在目的地伺服器實例的 master 和 msdb 中重新建立相依實體和物件的所有元數據。 例如,如果資料庫應用程式使用伺服器層級觸發程式,則只是附加或還原新系統上的資料庫是不夠的。 除非您在 master 資料庫中手動重新建立這些觸發程式的元數據,否則資料庫將無法如預期般運作。
儲存在使用者資料庫外部的信息、實體和物件
本主題的其餘部分摘要說明可能會影響另一個伺服器實例上可用之資料庫的潛在問題。 您可能必須重新建立一或多個資訊、實體或物件類型,這些類型列在下列清單中。 若要查看摘要,請按兩下項目的連結。
伺服器組態設定
SQL Server 2005 和更新版本選擇性地安裝和啟動重要服務和功能。 這有助於減少系統可攻擊的表面區域。 在新安裝的預設組態中,不會啟用許多功能。 如果資料庫依賴預設關閉的任何服務或功能,則必須在目的地伺服器實例上啟用此服務或功能。
如需這些設定以及啟用或停用這些設定的詳細資訊,請參閱 伺服器組態選項 (SQL Server) 。
憑據
認證是包含驗證資訊的記錄,而該資訊是連線到 SQL Server 外部資源時的必要資訊。 大部分的認證都包含 Windows 登入和密碼。
如需此功能的詳細資訊,請參閱 認證(Database Engine) 。
備註
SQL Server Agent Proxy 帳戶會使用認證。 若要瞭解 Proxy 帳戶的認證標識碼,請使用 sysproxies 系統數據表。
跨資料庫查詢
DB_CHAINING和 TRUSTWORTHY 資料庫選項預設為 OFF。 如果原始資料庫中的任何一項已設定為 [開啟],您可能需要在目的伺服器實例的資料庫中啟用這些設定。 如需詳細資訊,請參閱< ALTER DATABASE (Transact-SQL)>。
附加和卸除操作會停用資料庫中的跨資料庫擁有權鏈結。 如需如何啟用鏈結的資訊,請參閱 跨資料庫擁有權鏈結伺服器組態選項。
如需詳細資訊,請參閱 使用 Trustworthy 屬性的鏡像資料庫設定(Transact-SQL)
資料庫擁有權
在另一部計算機上還原資料庫時,起始還原作業的 SQL Server 登入或 Windows 用戶會自動成為新資料庫的擁有者。 還原資料庫時,系統管理員或新的資料庫擁有者可以變更資料庫擁有權。
分散式查詢和連結的伺服器
OLE DB 應用程式支援分散式查詢和連結的伺服器。 分散式查詢會從相同或不同計算機上的多個異質數據源存取數據。 鏈接的伺服器組態可讓 SQL Server 對遠端伺服器上的 OLE DB 資料源執行命令。 如需這些功能的詳細資訊,請參閱 鏈接的伺服器(Database Engine)。
加密的數據
如果您在另一個伺服器實例上提供的資料庫包含加密的數據,而且如果資料庫主要密鑰受到原始伺服器上的服務主要密鑰保護,可能需要重新建立服務主要密鑰加密。 資料庫主要金鑰是對稱金鑰,用來保護加密資料庫中憑證和非對稱密鑰的私鑰。 建立時,會使用 Triple DES 演演算法和使用者提供的密碼來加密資料庫主要密鑰。
若要在伺服器實例上啟用資料庫主要金鑰的自動解密,此金鑰的複本會使用服務主要金鑰來加密。 此加密複本會同時儲存在資料庫和 master 中。 一般而言,每當主要密鑰變更時,儲存在 master 中的複本會以無訊息方式更新。 SQL Server 會先嘗試使用 實例的服務主要金鑰來解密資料庫主要密鑰。 如果解密失敗,SQL Server 會搜尋認證存放區中的主要密鑰憑證,這些憑證的家族 GUID 與需要主要密鑰的資料庫相同。 然後,SQL Server 會嘗試使用每個相符認證來解密資料庫主要密鑰,直到解密成功或沒有認證為止。 未經服務主金鑰加密的主金鑰必須使用 OPEN MASTER KEY 語句和密碼來開啟。
複製、還原或附加至新 SQL Server 實例的加密資料庫時,服務主要密鑰所加密的資料庫主要密鑰複本不會儲存在目的地伺服器實例的 master 中。 在目的地伺服器實例上,您必須開啟資料庫的主要密鑰。 若要開啟主要密鑰,請執行下列語句:OPEN MASTER KEY DECRYPTION BY PASSWORD ='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 管理工具 (WMI) 事件
Server-Level 事件通知
伺服器層級事件通知會儲存在 msdb 中。 因此,如果資料庫應用程式依賴伺服器層級事件通知,則必須在目的地伺服器實例上重新建立該事件通知。 若要檢視伺服器實例上的事件通知,請使用 sys.server_event_notifications 目錄檢視。 如需詳細資訊,請參閱 事件通知。
此外,事件通知會使用 Service Broker 傳遞。 內送訊息的路由不會包含在包含服務的資料庫中。 相反地,明確路由會儲存在 msdb 中。 如果您的服務使用 msdb 資料庫中的明確路由,將傳入訊息路由傳送至服務,當您在不同的實例中附加資料庫時,您必須重新建立此路由。
Windows Management Instrumentation (WMI) 事件
伺服器事件的 WMI 提供者可讓您使用 Windows Management Instrumentation (WMI) 來監視 SQL Server 中的事件。 任何依賴透過資料庫所依賴之 WMI 提供者公開之伺服器層級事件的應用程式,都必須定義目的地伺服器實例的電腦。 WMI 事件提供者會使用 msdb 中定義的目標服務來建立事件通知。
備註
如需詳細資訊,請參閱 伺服器事件概念的 WMI 提供者。
使用 SQL Server Management Studio 建立 WMI 警示
鏡像資料庫的事件通知如何運作
跨資料庫的事件通知傳遞涉及鏡像資料庫,依定義為遠端的,因為鏡像資料庫可以故障轉移。 Service Broker 提供鏡像資料庫的特殊支援,格式為 鏡像路由。 鏡像路由有兩個位址:一個用於主體伺服器實例,另一個用於鏡像伺服器實例。
藉由設定鏡像路由,您可以讓 Service Broker 路由感知資料庫鏡像。 鏡像路由可讓Service Broker 以透明方式將交談重新導向至目前的主體伺服器實例。 例如,考慮一個由鏡像資料庫Database_A裝載的服務Service_A。 假設您需要另一個由 Database_B 托管的服務 Service_B,來與 Service_A 進行對話。 若要讓此對話框可行,Database_B必須包含Service_A的鏡像路由。 此外,Database_A 必須包含一條未鏡像的 TCP 路由至服務_B,這與本機路由不同,在故障轉移之後仍然有效。 這些路由可讓 ACK 在故障轉移後返回。 因為傳送者的服務一律以相同方式命名,因此路由必須指定經紀人實例。
不論鏡像資料庫中的服務是啟動器服務還是目標服務,鏡像路由的需求都適用:
如果目標服務位於鏡像資料庫中,啟動器服務必須有鏡像路由回到目標。 不過,目標可以有一條固定路徑返回到發起者。
如果啟動器服務位於鏡像資料庫中,目標服務必須有鏡像路由回到啟動器,才能傳遞通知和回復。 不過,發起者可以有一個到目標的固定路線。
擴展儲存程序
這很重要
這項功能將在未來的 SQL Server Microsoft 版本中移除。 請避免在新的開發工作中使用此功能,並計劃修改目前使用此功能的應用程式。 請改用 CLR 整合 。
擴充預存程式是使用 SQL Server 擴充預存程式 API 進行程式設計。 系統管理員固定伺服器角色的成員可以向 SQL Server 實例註冊擴充預存程式,並將執行程式的許可權授與使用者。 擴充預存程式只能新增至 master 資料庫。
擴充預存程式會直接在 SQL Server 實例的位址空間中執行,而且可能會產生記憶體流失或其他問題,以降低伺服器的效能和可靠性。 您應該考慮將擴充預存程式儲存在與包含參考數據的實例分開的 SQL Server 實例中。 您也應該考慮使用分散式查詢來存取資料庫。
這很重要
將擴充預存程式新增至伺服器並將 EXECUTE 許可權授與其他使用者之前,系統管理員應該徹底檢閱每個擴充預存程式,以確保它不包含有害或惡意代碼。
如需詳細資訊,請參閱 GRANT 物件許可權 (Transact-SQL)、DENY 物件許可權 (Transact-SQL)和 REVOKE 物件許可權 (Transact-SQL)。
適用於 SQL Server 屬性的 Full-Text 引擎
屬性是由 sp_fulltext_service 在 Full-Text 引擎上設定。 請確定目的地伺服器實例具有這些屬性的必要設定。 如需這些屬性的詳細資訊,請參閱 FULLTEXTSERVICEPROPERTY (Transact-SQL) 。
此外,如果 斷詞工具和字幹分析器 元件或 全文搜索篩選 元件在原始和目的地伺服器實例上有不同的版本,全文檢索索引和查詢的行為可能會不同。 此外, 同義字 會儲存在實例特定的檔案中。 您必須將這些檔案的複本傳輸至目的地伺服器實例上的對等位置,或在新的實例上重新建立它們。
備註
當您將包含全文檢索目錄檔案的 SQL Server 2005 資料庫附加到 SQL Server 2014 伺服器實例時,這些目錄檔案會從其先前的位置與其他資料庫檔案一起被附加,就像在 SQL Server 2005 中一樣。 如需詳細資訊,請參閱 升級全文檢索搜尋。
如需詳細資訊,請參閱:
工作
如果資料庫依賴 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 實例相關聯的 SQL Server Agent 服務有自己的登錄區,而且其作業通常與此登錄區中的一或多個設定相依性。 若要如預期般運作,作業需要這些登錄設定。 如果您使用腳本在另一個 SQL Server Agent 服務中重新建立作業,其登錄可能沒有該作業的正確設定。 若要讓重新建立的作業在目的地伺服器實例上正確運作,原始和目的地 SQL Server Agent 服務應該具有相同的登錄設定。
謹慎
如果其他作業需要目前的設定,變更目的地 SQL Server Agent 服務上的登錄設定來處理重新建立的作業可能會造成問題。 此外,不正確編輯登錄可能會嚴重損壞您的系統。 在變更登錄之前,建議您先備份計算機上的任何值數據。
SQL Server Agent Proxies
SQL Server Agent Proxy 會定義指定作業步驟的安全性內容。 若要讓作業在目的地伺服器實例上執行,它所需的所有 Proxy 都必須在該實例上手動重新建立。 如需詳細資訊,請參閱 建立 SQL Server Agent Proxy 和 針對使用 Proxy 的多伺服器作業進行疑難解答。
如需詳細資訊,請參閱:
角色切換後登入和作業的管理 (SQL Server) ( 適用於資料庫鏡像)
設定 Windows 服務帳戶和權限 (當您安裝 SQL Server 實例時)
設定 SQL Server Agent (當您安裝 SQL Server 實體時)
若要檢視現有的作業及其屬性
建立工作
使用腳本重新建立作業的最佳範例
建議您先編寫簡單的作業腳本、在其他 SQL Server Agent 服務上重新建立作業,以及執行作業,以查看其是否如預期般運作。 這可讓您識別不相容,並嘗試加以解決。 如果腳本作業在其新環境中無法如預期般運作,建議您建立在該環境中正常運作的對等作業。
登錄
登入 SQL Server 實例需要有效的 SQL Server 登入。 此登入會在驗證程式中使用,以驗證主體是否可以連線到 SQL Server 的實例。 某資料庫使用者若在伺服器實例上對應的 SQL Server 登入未定義或定義錯誤,將無法登入該伺服器實例。 這類使用者據說是該伺服器實例上資料庫的 孤立使用者 。 當資料庫被還原、附加或複製到不同的 SQL Server 實例之後,資料庫使用者可能會成為孤立使用者。
若要為資料庫原始複本中的部分或所有物件產生腳本,您可以使用 [產生腳本精靈],然後在 [ 選擇腳本選項 ] 對話框中,將 [ 腳本登入 ] 選項設定為 True。
備註
如需如何設定鏡像資料庫登入的資訊,請參閱 設定資料庫鏡像或AlwaysOn可用性群組的登入帳戶 和 角色切換後登入和作業的管理。。
權限
當資料庫在另一個伺服器實例上使用時,下列類型的許可權可能會受到影響。
系統物件上授予、撤銷或拒絕權限
伺服器實例上的 GRANT、REVOKE 或 DENY 權限 (伺服器層級權限)
對系統物件授予、撤銷和拒絕權限的操作
系統物件的許可權,例如預存程式、擴充預存程式、函式和檢視,會儲存在 master 資料庫中,而且必須在目的地伺服器實例上設定。
若要為資料庫原始複本中的部分或所有對象產生腳本,您可以使用 [產生腳本精靈],然後在 [ 選擇腳本選項 ] 對話框中,將 [ 腳本 Object-Level 許可權 ] 選項設定為 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)。
Server-Level 憑證或非對稱密鑰的許可權
伺服器層級許可權無法直接授與憑證或非對稱密鑰。 而是,伺服器層級的權限被授予為特定憑證或非對稱密鑰專門建立的映射登入。 因此,每個需要伺服器層級許可權的憑證或非對稱密鑰都需要自己的 憑證對應登入 或 非對稱密鑰對應登入。 若要授與憑證或非對稱密鑰的伺服器層級許可權,請將許可權授與其對應的登入。
備註
映射登入僅用於授權使用相應憑證或非對稱密鑰所簽署的程式碼。 映射的登入無法用於驗證。
對應的登入及其許可權都位於 master 中。 如果憑證或非對稱密鑰位於 master 以外的資料庫中,您必須在 master 中重新建立它,並將其對應至登入。 如果您將資料庫移動、複製或還原至另一個伺服器實例,則必須在目的地伺服器實例的 master 資料庫中重新建立其憑證或非對稱密鑰、對應至登入,並將所需的伺服器層級許可權授與登入。
建立憑證或非對稱密鑰
將憑證或非對稱密鑰對應至登入
將許可權指派給映射的登入
如需憑證和非對稱密鑰的詳細資訊,請參閱 加密階層。
複寫設定
如果您將復寫資料庫的備份還原到另一部伺服器或資料庫,則無法保留複寫設定。 在此情況下,您必須在還原備份之後重新建立所有發行集和訂閱。 若要簡化此流程,請為目前的複寫設定以及啟用及停用複寫建立腳本。 若要協助重新建立複寫設定,請複製這些腳本,並變更伺服器名稱參考,以用於目的地伺服器實例。
如需詳細資訊,請參閱備份和還原復寫資料庫、資料庫鏡像和複寫(SQL Server)和記錄傳送和複寫(SQL Server)。
Service Broker 應用程式
Service Broker 應用程式的許多層面都會隨著資料庫移動。 不過,必須在新位置重新建立或重新設定應用程式的某些層面。
啟動程序
啟動程式是預存程式,標示為自動執行,並在每次 SQL Server 啟動時執行。 如果資料庫相依於任何啟動程式,則必須在目的地伺服器實例上定義它們,並設定為在啟動時自動執行。
觸發程式 (伺服器層級)
DDL 觸發程序會執行儲存程序,來回應各種資料定義語言(DDL)事件。 這些事件主要對應至開頭為 CREATE、ALTER 和 DROP 關鍵詞的 Transact-SQL 語句。 某些執行著類似 DDL 操作的系統預存程式也可以引發 DDL 觸發器。
如需此功能的詳細資訊,請參閱 DDL 觸發程式。
另請參閱
封閉資料庫
複製資料庫至其他伺服器
資料庫卸離與附加 (SQL Server)
故障轉移至日誌傳送次要伺服器(SQL Server)
資料庫鏡像會話期間的角色切換 (SQL Server)
設定加密鏡像資料庫
SQL Server 組態管理員
針對孤立使用者進行疑難排解 (SQL Server)