適用於:SQL Server
注意
SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 Always On 可用性群組。
準備好鏡像資料庫之後(請參閱 準備資料庫鏡像以進行鏡像(SQL Server)),就可以建立資料庫鏡像會話。 主體、鏡像及見證伺服器執行個體必須是個別的伺服器執行個體,且應位於個別的主機系統上。
重要
我們建議您將資料庫鏡像作業排定在離峰時間執行,因為設定鏡像會影響效能。
注意
給定的伺服器執行個體可參與具有相同或不同夥伴的多個同時進行的資料庫鏡像會話。 伺服器執行個體可以在某些會話中擔任夥伴,在其他會話中充當見證。 鏡像伺服器執行個體必須執行與主體伺服器執行個體相同的 SQL Server 版本。 並非所有 Microsoft SQL Server 版本都可使用資料庫鏡像。 如需 SQL Server 版本支援的功能清單,請參閱 SQL Server 2016 版本支援的功能。 此外,我們強烈建議他們在具備處理相同工作負載能力的相似系統上運行。
建立資料庫鏡像操作工作階段
建立鏡像資料庫。 如需詳細資訊,請參閱為鏡像準備資料庫 (SQL Server)。
設定每個伺服器執行個體的安全性。
資料庫鏡像工作階段中的每個伺服器執行個體都需要一個資料庫鏡像端點。 如果端點不存在,您就必須自行建立。
注意
伺服器執行個體用於資料庫鏡像的驗證格式,是其資料庫鏡像端點的屬性。 有兩種傳輸安全性可用於資料庫鏡像:Windows 驗證或以憑證為基礎的驗證。 如需詳細資訊,請參閱 資料庫鏡像和 AlwaysOn 可用性群組的傳輸安全性 (SQL Server)。
確保在每個夥伴伺服器上,存在一個端點以進行資料庫鏡像。 不論要支援的鏡像工作階段數有多少,伺服器執行個體只能有一個資料庫鏡像端點。 若要讓資料庫鏡像工作階段的夥伴獨佔使用此伺服器執行個體,您可以將夥伴的角色指派給端點 (ROLE**=**PARTNER)。 如果您打算也在其他資料庫鏡像會話中將此伺服器用作見證,用戶應該將端點的角色指派為 ALL。
若要執行 SET PARTNER 陳述式,兩個夥伴的端點狀態 (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> 設定夥伴 =<server_network_address>
其中 <database_name> 是要鏡像的資料庫名稱 (此名稱在兩個夥伴中都相同),而 <server_network_address> 是主體伺服器的伺服器網路位址。
伺服器網路位址的語法如下:
TCP://<system-address>:<port>
其中 <system-address> 是清楚識別目的地電腦系統的字串,而 <port> 是夥伴伺服器執行個體鏡像端點所使用的通訊埠編號。 如需詳細資訊,請參閱指定伺服器網路位址 (資料庫鏡像)。
例如,在鏡像伺服器執行個體上,下列 ALTER DATABASE 陳述式將夥伴設為原始主體伺服器執行個體。 資料庫名稱是 AdventureWorks、系統位址是 DBSERVER1 (夥伴系統的名稱),而夥伴資料庫鏡像端點使用的通訊埠是 7022:
ALTER DATABASE AdventureWorks SET PARTNER = 'TCP://DBSERVER1:7022'
此陳述式會準備鏡像伺服器,以便在主體伺服器通知之後建立工作階段。
若要設定鏡像伺服器做為主體資料庫上的夥伴,請連接到該主體伺服器,並發出以下陳述式:
ALTER DATABASE <database_name> 設置夥伴 =<server_network_address>
如需詳細資訊,請參閱步驟 4。
例如,在主體伺服器執行個體上,下列 ALTER DATABASE 陳述式將夥伴設為原始鏡像伺服器執行個體。 資料庫名稱是 AdventureWorks,系統位址是 DBSERVER2 (夥伴系統的名稱) 而夥伴資料庫鏡像端點使用的通訊埠是 7025:
ALTER DATABASE AdventureWorks SET PARTNER = 'TCP://DBSERVER2:7022'
在主伺服器上輸入此語句以啟動資料庫鏡像工作階段。
依預設,工作階段會設定為完整交易安全性 (SAFETY 設定為 FULL),它會以不含自動容錯移轉的同步高安全性模式啟動工作階段。 您可以依照下列方式,將工作階段重新設定為在具有自動容錯移轉的高安全性模式下執行,或在非同步的高效能模式下執行:
具有自動容錯移轉的高安全性模式
如果您想要在高安全性模式下的工作階段支援自動容錯移轉,請新增一個見證伺服器實例。 如需詳細資訊,請參閱使用 Windows 驗證新增資料庫鏡像見證 (Transact-SQL)。
高效能模式
或者,如果您不想進行自動容錯移轉,而且較注重效能而非可用性,請關閉交易安全性。 如需詳細資訊,請參閱在資料庫鏡像工作階段中變更交易安全性 (Transact-SQL)。
注意
在高效能模式中,必須將 WITNESS 設定為 OFF。 如需詳細資訊,請參閱法定人數:見證怎樣影響資料庫可用性 (資料庫鏡像)。
範例
注意
下列範例說明如何在鏡像夥伴之間,為既有的鏡像資料庫建立資料庫鏡像會話。 如需建立鏡像資料庫的相關資訊,請參閱準備鏡像資料庫以進行鏡像 (SQL Server)。
此範例說明建立不帶見證的資料庫鏡像工作階段的基本步驟如下。 這兩個夥伴是兩個電腦系統 (PARTNERHOST1 和 PARTNERHOST5) 上的預設伺服器執行個體。 這兩個夥伴實例使用相同的 Windows 網域使用者帳戶 (MYDOMAIN\dbousername)。
在主體伺服器執行個體 (PARTNERHOST1 上的預設執行個體) 上,使用通訊埠 7022 建立支援所有角色的端點:
--create an endpoint for this instance CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=7022) FOR DATABASE_MIRRORING (ROLE=ALL) GO --Partners under same domain user; login already exists in master.
注意
如需設定登入的具體範例,請參閱使用 Windows 驗證允許資料庫鏡像端點的網路存取 (SQL Server)。
在鏡像伺服器執行個體 (PARTNERHOST5 上的預設執行個體) 上,使用通訊埠 7022 建立支援所有角色的端點:
--create an endpoint for this instance CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=7022) FOR DATABASE_MIRRORING (ROLE=ALL) GO --Partners under same domain user; login already exists in master.
在主伺服器執行個體(位於 PARTNERHOST1)上,備份資料庫:
BACKUP DATABASE AdventureWorks TO DISK = 'C:\AdvWorks_dbmirror.bak' WITH FORMAT GO
在鏡像伺服器執行個體 (在
PARTNERHOST5
上) 上,還原資料庫:RESTORE DATABASE AdventureWorks FROM DISK = 'Z:\AdvWorks_dbmirror.bak' WITH NORECOVERY GO
建立完整資料庫備份之後,您必須在主體資料庫上建立記錄備份。 例如,下列 Transact-SQL 陳述式會將記錄備份至前一次資料庫備份所使用的相同檔案:
BACKUP LOG AdventureWorks TO DISK = 'C:\AdventureWorks.bak' GO
您必須先套用必要的記錄備份 (以及任何後續記錄備份),才能啟動鏡像。
例如,下列 Transact-SQL 陳述式會從 C:\AdventureWorks.bak 還原第一筆記錄:
RESTORE LOG AdventureWorks FROM DISK = 'C:\ AdventureWorks.bak' WITH FILE=1, NORECOVERY GO
在鏡像伺服器執行個體上,將 PARTNERHOST1 上的伺服器執行個體設定為夥伴 (讓它成為初始主體伺服器):
USE master; GO ALTER DATABASE AdventureWorks SET PARTNER = 'TCP://PARTNERHOST1:7022' GO
重要
依預設,資料庫鏡像工作階段會以同步模式執行,前提是必須有完整交易安全性 (SAFETY 設定為 FULL)。 若要讓工作階段以非同步的高效能模式執行,請將 SAFETY 設定為 OFF。 如需詳細資訊,請參閱 Database Mirroring Operating Modes。
在主體伺服器執行個體上,將
PARTNERHOST5
上的伺服器執行個體設定為夥伴 (讓它成為初始鏡像伺服器):USE master; GO ALTER DATABASE AdventureWorks SET PARTNER = 'TCP://PARTNERHOST5:7022' GO
選擇性地,如果您想要使用具備自動容錯移轉功能的高安全性模式,請設定見證伺服器執行個體。 如需詳細資訊,請參閱透過 Windows 驗證來新增資料庫鏡像證人 (Transact-SQL)。
注意
如需顯示安全性設定、準備鏡像資料庫、設定夥伴及新增見證的完整範例,請參閱設定資料庫鏡像 (SQL Server)。
另請參閱
建立資料庫鏡像 (SQL Server)
ALTER DATABASE (Transact-SQL)
使用 Windows 驗證允許資料庫鏡像端點的網路存取 (SQL Server)
準備 SQL Server 鏡像資料庫以利鏡像作業
建立 Windows 驗證的資料庫鏡像端點 (Transact-SQL)
資料庫鏡像和記錄傳送 (SQL Server)
資料庫鏡像 (SQL Server)
資料庫鏡像和複寫 (SQL Server)
設定資料庫鏡像 (SQL Server)
指定伺服器網路位址 (資料庫鏡像)
資料庫鏡像運作模式