適用於:SQL Server
謹慎
SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用此功能,並計劃修改目前使用此功能的應用程式。 為了高可用性,建議改用 Always On 可用性群組。
重要
SQL Server 中的資料庫鏡像是與 Microsoft Fabric 資料庫鏡像不同的技術。 將數據鏡像到 Fabric 能提供更佳的分析效能,並能在 Fabric 中利用 OneLake 統一您的資料資產,以及允許存取 Delta Parquet 格式的數據。
透過鏡像至 Microsoft Fabric,您可以持續將現有的資料資產直接複寫到 Fabric 中的 OneLake,包括來自 SQL Server 2016+、Azure SQL Database、Azure SQL 受控執行個體、Cosmos DB、Oracle、Snowflake 等的資料。
為設定資料庫的見證,資料庫擁有者會指派 Database Engine 執行個體給見證伺服器的角色。 見證伺服器執行個體可以與主體或鏡像伺服器執行個體在相同電腦上執行,但是這會大幅地減少自動容錯移轉的強固性。
我們強烈建議見證應該位在另一台電腦上。 給定的伺服器可以參與具有相同或不同夥伴的多個並行資料庫鏡像工作階段。 一個給定的伺服器可以在某些工作階段中是夥伴,在其他工作階段中是見證。
見證是專門用於具有自動容錯移轉的高安全性模式。 在您設定見證之前,我們強烈建議您確定 SAFETY 屬性目前已設定為 FULL。
重要
我們建議您在離峰時間設定資料庫鏡像,因為組態會影響效能。
建立見證
在見證伺服器執行個體上,確定資料庫鏡像有端點存在。 不管要支援的鏡像工作階段有多少個,伺服器執行個體都必須只有一個資料庫鏡像端點。 如果您打算將這個伺服器執行個體專門作為資料庫鏡像工作階段中的見證,請指派見證角色給端點 (ROLE**=**WITNESS)。 如果您打算使用這個伺服器執行個體,作為一或多個其他資料庫鏡像工作階段中的夥伴,請將端點的角色指派為 ALL。
若要執行 SET WITNESS 陳述式,資料庫鏡像工作階段必須已經啟動 (在夥伴之間),而且見證端點的 STATE 必須設為 STARTED。
若要了解見證伺服器執行個體是否具有它的資料庫鏡像端點,以及了解其角色和狀態,請在該執行個體上,使用下列 Transact-SQL 陳述式:
SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints重要
若資料庫鏡像端點存在且已在使用中,我們建議您在該伺服器執行個體上為每個工作階段使用該端點。 卸除使用中端點會中斷現有工作階段的連接。 如果已針對工作階段設定見證,則卸除資料庫鏡像端點可能會導致該工作階段的主體伺服器失去仲裁;若發生此情況,則資料庫會離線,並中斷連接到資料庫的所有使用者。 如需詳細資訊,請參閱仲裁:見證影響資料庫可用性的方式 (資料庫鏡像)。
如果見證缺少端點,請參閱建立 Windows 驗證的資料庫鏡像端點 (Transact-SQL)。
若夥伴執行個體是以不同網域使用者帳戶執行,請為每個執行個體中 master 資料庫的不同帳戶建立登入。 如需詳細資訊,請參閱使用 Windows 驗證允許資料庫鏡像的網路存取 (SQL Server)。
連接到主體伺服器並執行以下陳述式:
ALTER DATABASE <database_name> 設定 WITNESS =<server_network_address>
其中 <database_name> 是要鏡像的資料庫名稱 (此名稱在兩個夥伴中都相同),而 <server_network_address> 是見證伺服器執行個體的伺服器網路位址。
伺服器網路位址的語法如下:
TCP@<system-address>:<port>
其中 <system-address> 是清楚識別目的地電腦系統的字串,而 <port> 是夥伴伺服器執行個體鏡像端點所使用的通訊埠編號。 如需詳細資訊,請參閱指定伺服器網路位址 (資料庫鏡像)。
例如,在主體伺服器執行個體上,下列 ALTER DATABASE 陳述式會設定見證。 資料庫名稱是 AdventureWorks、系統位址是 DBSERVER3 (見證系統的名稱),而見證之資料庫鏡像端點所使用的連接埠是
7022:ALTER DATABASE AdventureWorks SET WITNESS = 'TCP://DBSERVER3:7022'
範例
以下範例會建立資料庫鏡像見證。 在見證伺服器執行個體 ( WITNESSHOST4上的預設執行個體) 上:
使用通訊埠
7022僅為 WITNESS 角色的此伺服器執行個體建立端點。CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=7022) FOR DATABASE_MIRRORING (ROLE=WITNESS) GO若見證是以
SOMEDOMAIN\witnessuser執行,但夥伴是以MYDOMAIN\dbousername執行,請為夥伴執行個體的使用者帳戶建立登入。 為夥伴建立登入,如下所示:--Create a login for the partner server instances, --which are both running as MYDOMAIN\dbousername: USE master ; GO CREATE LOGIN [MYDOMAIN\dbousername] FROM WINDOWS ; GO --Grant connect permissions on endpoint to login account --of partners GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [MYDOMAIN\dbousername]; GO在每一個伺服器執行個體上,為見證伺服器執行個體建立登入:
--Create a login for the witness server instance, --which is running as SOMEDOMAIN\witnessuser: USE master ; GO CREATE LOGIN [SOMEDOMAIN\witnessuser] FROM WINDOWS ; GO --Grant connect permissions on endpoint to login account --of partners GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [SOMEDOMAIN\witnessuser]; GO在主體伺服器上設定見證 (位於
WITNESSHOST4):ALTER DATABASE AdventureWorks SET WITNESS = 'TCP://WITNESSHOST4:7022' GO
注意
伺服器網路位址依通訊埠編號表示目標伺服器執行個體,它對應到執行個體的鏡像端點。
如需顯示安全性設定、準備鏡像資料庫、設定夥伴及新增見證的完整範例,請參閱設定資料庫鏡像 (SQL Server)。
另請參閱
ALTER DATABASE (Transact-SQL)
使用 Windows 驗證允許資料庫鏡像的網路存取 (SQL Server)
建立 Windows 驗證的資料庫鏡像端點 (Transact-SQL)
使用 Windows 驗證建立資料庫鏡像工作階段 (Transact-SQL)
從資料庫鏡像工作階段移除見證 (SQL Server)
資料庫鏡像見證