針對資料庫鏡像設定進行疑難解答 (SQL Server)

本主題提供的資訊可協助您針對設定資料庫鏡像會話的問題進行疑難解答。

備註

請確定您符合 資料庫鏡像的所有必要條件。

問題 總結
錯誤訊息 1418 此 SQL Server 訊息表示無法連線或不存在伺服器網路位址,並建議您驗證網路位址名稱並重新發出命令。 如需詳細資訊,請參閱 MSSQLSERVER_1418 主題。
帳戶 討論正確設定 SQL Server 執行所在的帳戶的需求。
端點 討論正確設定每個伺服器實例之資料庫鏡像端點的需求。
SystemAddress 摘要說明在資料庫鏡像組態中指定伺服器實例系統名稱的替代方法。
網路存取 記錄每個伺服器節點都能夠透過 TCP 存取其他伺服器節點的埠的需求。
鏡像資料庫準備 摘要說明準備鏡像資料庫以啟動鏡像操作的要求。
建立檔案作業失敗 描述如何回應失敗的建立檔案作業。
使用 Transact-SQL 啟動鏡像 描述 database_nameSET PARTNER ='partner_server' 語句所需的順序ALTER DATABASE。
跨資料庫交易 自動故障轉移可能會導致自動且可能不正確的不確定交易解析。 因此,資料庫鏡像不支援跨資料庫交易。

帳戶

必須正確設定 SQL Server 執行所在的帳戶。

  1. 帳戶是否具有正確的許可權?

    1. 如果帳戶在相同的網域帳戶中執行,則設定錯誤的可能性會降低。

    2. 如果帳戶在不同的網域中執行,或不是網域帳戶,則必須在其他電腦上的 master 中建立一個帳戶的登入,而且該登入必須在端點上授與 CONNECT 許可權。 如需詳細資訊,請參閱在另一個伺服器執行個體 (SQL Server) 上提供可用的資料庫時管理中繼資料。 這包括網路服務帳戶。

  2. 如果 SQL Server 是以使用本機系統帳戶的服務身分執行,您必須使用憑證進行驗證。 如需詳細資訊,請參閱使用資料庫鏡像端點的憑證(Transact-SQL)。

端點

端點必須正確設定。

  1. 請確定每個伺服器執行個體(主伺服器、鏡像伺服器和如果有的話見證伺服器)都有資料庫鏡像端點。 如需詳細資訊,請參閱sys.database_mirroring_endpoints(Transact-SQL),並根據驗證形式,建立 Windows 驗證的資料庫鏡像端點(Transact-SQL),或使用資料庫鏡像端點的憑證(Transact-SQL)。

  2. 檢查埠號碼是否正確。

    若要識別目前與伺服器實例資料庫鏡像端點相關聯的埠,請使用 sys.database_mirroring_endpoints 和 sys.tcp_endpoints 目錄檢視。

  3. 針對難以解釋的資料庫鏡像設定問題,建議您檢查每個伺服器實例,確認其是否正在正確的埠口上運行。 如需驗證埠可用性的詳細資訊,請參閱 MSSQLSERVER_1418。

  4. 請確定端點已啟動 (STATE=STARTED)。 在每個伺服器實例上,使用下列 Transact-SQL 語句。

    SELECT state_desc FROM sys.database_mirroring_endpoints  
    

    如需 state_desc 資料列的詳細資訊,請參閱 sys.database_mirroring_endpoints (Transact-SQL) 。

    若要啟動端點,請使用下列 Transact-SQL 語句。

    ALTER ENDPOINT Endpoint_Mirroring   
    STATE = STARTED   
    AS TCP (LISTENER_PORT = <port_number>)  
    FOR database_mirroring (ROLE = ALL);  
    GO  
    

    欲了解更多資訊,請參見 ALTER ENDPOINT (Transact-SQL)。

  5. 確認是否 ROLE 正確。 在每個伺服器實例上使用下列 Transact-SQL 語句。

    SELECT role FROM sys.database_mirroring_endpoints;  
    GO  
    

    如需詳細資訊,請參閱 sys.database_mirroring_endpoints (Transact-SQL) 。

  6. 來自其他伺服器實例的服務帳戶登入需要 CONNECT 許可權。 請確定來自其他伺服器的登入具有 CONNECT 許可權。 若要判斷誰具有端點的 CONNECT 許可權,請在每個伺服器實例上使用下列 Transact-SQL 語句。

    SELECT 'Metadata Check';  
    SELECT EP.name, SP.STATE,   
       CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id))   
          AS GRANTOR,   
       SP.TYPE AS PERMISSION,  
       CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id))   
          AS GRANTEE   
       FROM sys.server_permissions SP , sys.endpoints EP  
       WHERE SP.major_id = EP.endpoint_id  
       ORDER BY Permission,grantor, grantee;   
    GO  
    
    

系統位址

針對資料庫鏡像組態中的伺服器實例系統名稱,您可以使用任何明確識別系統的名稱。 伺服器位址可以是系統名稱(如果系統位於相同網域中)、完整功能變數名稱或IP位址(最好是靜態IP位址)。 使用完全合格域名一定有效。 如需詳細資訊,請參閱指定伺服器網路位址 (資料庫鏡像)。

網路存取

每個伺服器實例都必須能夠透過 TCP 存取其他伺服器實例或實例的埠。 如果伺服器實例位於彼此不信任的不同網域(不受信任的網域),這尤其重要。 這會限制伺服器實例之間的大部分通訊。

鏡像資料庫準備

無論是首次啟動鏡像功能,還是在移除鏡像後再次啟動鏡像功能,請確認鏡像資料庫已準備好進行鏡像。

當您在鏡像伺服器上建立鏡像資料庫時,請務必還原指定相同資料庫名稱WITH NORECOVERY之主體資料庫的備份。 此外,在建立該備份後,隨後建立的所有記錄備份也必須再次以 WITH NORECOVERY 的方式套用。

此外,建議您盡可能將鏡像資料庫的檔案路徑(包括驅動器號)與主體資料庫的路徑相同。 如果檔案路徑必須不同,例如主資料庫位於磁碟 'F:',但鏡像系統缺少 F: 磁碟,則必須在語句中 RESTORE 包含 MOVE 選項。

這很重要

如果您在建立鏡像資料庫時移動資料庫檔案,稍後可能無法在不暫停鏡像的情況下將檔案新增至資料庫。

如果資料庫鏡像已經停止,必須將在主體資料庫上建立的所有後續的記錄備份套用至鏡像資料庫,才能重新啟動鏡像。

如需詳細資訊,請參閱為鏡像準備資料庫 (SQL Server)。

作業失敗 Create-File

新增檔案而不會影響鏡像會話,這兩部伺服器上都必須有檔案的路徑。 因此,如果您在建立鏡像資料庫時移動資料庫檔案,稍後的新增檔案作業可能會在鏡像資料庫上失敗,並導致鏡像被暫停。

若要修正問題:

  1. 資料庫擁有者必須移除鏡像會話,並還原包含已新增檔案之檔案群組的完整備份。

  2. 擁有者接著必須在主伺服器上備份包含新增檔案操作的日誌,並使用WITH NORECOVERY和WITH MOVE選項手動將日誌備份還原至鏡像資料庫。 這樣做會在鏡像伺服器上建立指定的檔案路徑,並將新檔案還原至該位置。

  3. 若要為新的鏡像會話準備資料庫,擁有者也必須從主體伺服器還原WITH NO RECOVERY任何其他未處理的記錄備份。

如需詳細資訊,請參閱移除資料庫鏡像(SQL Server)、準備鏡像資料庫以進行鏡像(SQL Server)、使用 Windows 驗證建立資料庫鏡像會話(Transact-SQL),使用資料庫鏡像端點的憑證(Transact-SQL),或使用 Windows 驗證建立資料庫鏡像會話(SQL Server Management Studio)。

使用 Transact-SQL 啟動鏡像

ALTER DATABASE database_nameSET PARTNER ='partner_server' 語句的發出順序非常重要。

  1. 第一個語句必須在鏡像伺服器上執行。 發出此語句時,鏡像伺服器不會嘗試連絡任何其他伺服器實例。 相反地,鏡像伺服器會指示其資料庫等待,直到主要伺服器連絡鏡像伺服器為止。

  2. 第二個 ALTER DATABASE 語句必須在主伺服器上執行。 此語句會導致主體伺服器嘗試連線到鏡像伺服器。 建立該連線之後,鏡像會嘗試連線到另一個連線上的主體伺服器。

欲了解更多資訊,請參見 ALTER DATABASE (Transact-SQL)。

備註

如需使用 SQL Server Management Studio 開始鏡像的詳細資訊,請參閱 使用 Windows 驗證建立資料庫鏡像會話 (SQL Server Management Studio) 。

跨資料庫交易

當資料庫在具有自動故障轉移的高安全性模式中鏡像時,自動故障轉移可能會導致自動且可能不正確的不確定交易解析。 如果在認可跨資料庫交易時於任一資料庫上發生自動故障轉移,資料庫之間可能會發生邏輯不一致。

可受自動故障轉移影響的跨資料庫交易類型包括下列各項:

  • 在相同 SQL Server 實例中更新多個資料庫的交易。

  • 使用Microsoft分散式交易協調器 (MS DTC) 的交易。

如需詳細資訊,請參閱 資料庫鏡像或 AlwaysOn 可用性群組 (SQL Server) 不支援跨資料庫交易。

另請參閱

建立資料庫鏡像 (SQL Server)
資料庫鏡像和 AlwaysOn 可用性群組的傳輸安全性 (SQL Server)