標籤:
目前資料庫鏡像提供兩種配置的方式:高安全模式和高效能模式。
我們知道在高安全模式下,在主伺服器上提交的事務必須同時在鏡像伺服器上提交成功,否則該事務無法在主要資料庫上提交。
在上面的圖中,一個事務在主要資料庫上提交的步驟包含:
- 用戶端程式將事務發送給主要資料庫伺服器SQLServer
- 主要資料庫伺服器 SQL Server為這個事務寫記錄檔
2.1 主要資料庫伺服器將這個事務的日誌內容傳遞給鏡像伺服器的SQL Server
- 鏡像資料庫伺服器SQL Server將收到的日誌內容寫入到記錄檔。
- 鏡像伺服器回複主伺服器寫日誌的動作完成。
- 主伺服器SQL Server回複用戶端程式該事務提交成功。
>2.主要資料庫伺服器SQL Server在檢查點時將該事務修改的資料頁從記憶體中寫入資料檔案。
>3.鏡像資料庫伺服器SQL Server將日誌對於的資料頁在檔案上做變更。
從這樣的順序中,我們提出一個問題,如果鏡像伺服器的SQL Server在那個時候不能完成步驟3,是否這時主要資料庫伺服器對於的資料庫就不能正常的提交事務了呢?本文介紹的兩個測試就是類比記錄檔和資料庫不可用時候的測試結果
測試一:資料庫有多個資料檔案和記錄檔,分布在不同的磁碟上,在鏡像資料庫聯機的情況下刪除一個磁碟,即一個資料檔案和記錄檔不可能的測試:
- 1. 建立資料庫test,添加四個檔案。注意為第一個記錄檔設定較小的大小並禁止自動成長:
test C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\test.mdf
test_log C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\test_log.ldf
test1 E:\test1.ndf
testlog1 E:\testlog1.ldf
- 2. 設定資料庫鏡像高安全模式,主伺服器為SQL1,鏡像資料庫為SQL2.
- 3. 建立兩張測試表 test和test1, 插入超過 1,000,000 行資料到test表中. 由於第一個記錄檔較小且不能自動成長,因此SQL Server開始使用第二個記錄檔testlog1.檢查資料庫鏡像的狀態:
結果:主要資料庫顯示已principal/sychronized
- 4. 執行下面的指令碼,開始事務,這個事務會執行超過10分鐘:
begin tran
insert into test select * from test
insert into test select * from test
commit
- 當事務開始執行1分鐘以後,暫停資料庫鏡像 1分鐘,然後在手工恢複資料庫鏡像的同步:
結果: 主要資料庫狀態顯示principal/synchronizing.
訪問test1表,可以返回資料。
6. 手工將E盤從鏡像資料庫服務上拔出:.
結果: 主要資料庫狀態立即變更為 (principal/suspend)。
測試訪問主要資料庫並查詢test1表
鏡像資料庫狀態變更為: (mirrored, suspend/restoring)
7. 檢查事務的執行:
幾分鐘以後,這個事務顯示在主要資料庫上提交成功。
.
8. 檢查主要資料庫和鏡像資料庫的SQL Server錯誤記錄檔:
主要資料庫:
Error: 1453, Severity: 16, State: 1.
‘TCP://LDUA2481460-2.DOM248146.COM:5023‘, the remote mirroring partner for database ‘test‘, encountered error 5159, status 1, severity 24. Database mirroring has been suspended. Resolve the error on the remote server and resume mirroring, or remove mirroring and re-establish the mirror server instance.
鏡像資料庫:
‘TCP://LDUA2481460-2.DOM248146.COM:5023‘, the remote mirroring partner for database ‘test‘, encountered error 5159, status 1, severity 24. Database mirroring has been suspended. Resolve the error on the remote server and resume mirroring, or remove mirroring and re-establish the mirror server instance.
Operating system error 2(The system cannot find the file specified.) on file "E:\test_3.ldf" during RestoreFileHdr.
Test 2: 在執行並同步一個大事務的時候將鏡像資料庫刪除:
1. 建立資料庫test,包含一個資料檔案一個記錄檔。
test1 E:\test1.mdf
test1_log E:\test1_log.ldf
2. 設定資料庫鏡像高安全模式,主伺服器為SQL1,鏡像資料庫為SQL2.
3. 建立兩張測試表 test和test1, 插入超過 1,000,000 行資料到test表中. 由於第一個記錄檔較小且不能自動成長,因此SQL Server開始使用第二個記錄檔testlog1.檢查資料庫鏡像的狀態:
結果:主要資料庫顯示已principal/sychronized
4. 執行下面的指令碼,開始事務,這個事務會執行超過10分鐘:
begin tran
insert into test select * from test
insert into test select * from test
commit
5. 當事務開始執行1分鐘以後,暫停資料庫鏡像 1分鐘,然後在手工恢複資料庫鏡像的同步:
結果: 主要資料庫狀態顯示principal/synchronizing.
訪問test1表,可以返回資料。
6. 手工將E盤從鏡像資料庫服務上拔出:
結果: 主要資料庫狀態立即變更為 (principal/ disconnected)。
測試訪問主要資料庫並查詢test1表
鏡像資料庫不存在。
7. 檢查事務的執行:
幾分鐘以後,這個事務顯示在主要資料庫上提交成功。
8. 檢查主要資料庫和鏡像資料庫的SQL Server錯誤記錄檔:
主要資料庫:
1453, Severity: 16, State: 1
‘TCP://LDUA2481460-2.DOM248146.COM:5023‘, the remote mirroring partner for database ‘test1‘, encountered error 5149, status 1, severity 16. Database mirroring has been suspended. Resolve the error on the remote server and resume mirroring, or remove mirroring and re-establish the mirror server instance..
鏡像資料庫:
Error: 17053<c/> Severity: 16<c/> State: 1
RestoreFileHdr: Operating system error 2(The system cannot find the file specified.) encountered.
Error: 5159<c/> Severity: 24<c/> State: 1
Operating system error 2(The system cannot find the file specified.) on file "E:\test1_1.ldf" during RestoreFileHdr.
Error: 823<c/> Severity: 24<c/> State: 3.
The operating system returned error 21(The device is not ready.) to SQL Server during a write at offset 0x00000000012000 in file ‘E:\test1.mdf‘. Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information<c/> see SQL Server Books Online.
Error: 1454<c/> Severity: 16<c/> State: 1.
While acting as a mirroring partner for database ‘test1‘<c/> server instance ‘LDUA2481460-1\MSSQLSERVER1‘ encountered error 823<c/> status 3<c/> severity 24. Database mirroring will be suspended. Try to resolve the error and resume mirroring.
測試結果:
主要資料庫在這兩種情況下依然可以訪問並且成功提交事務
轉自:http://blogs.msdn.com/b/apgcdsd/archive/2012/03/09/10280123.aspx
類比鏡像伺服器磁碟問題的兩個測試【轉】