1. 程式人生 > >非域環境下SQL Server搭建Mirror(映象)的詳細步驟

非域環境下SQL Server搭建Mirror(映象)的詳細步驟

1.測試驗證環境

 

伺服器角色

機器名

IP

SQL Server Ver

主體伺服器

WIN-TestDB4O

172.83.XXX.XXX

SQL Server 2012 - 11.0.5058.0 (X64)

映象伺服器

WIN-TestDB5O

172.73.XXX.XXX

SQL Server 2012 - 11.0.5058.0 (X64)

2.建立前環境檢查

(1)網路是否能聯通,並且埠可用。

(2)SQL Server版本、補丁是否滿足映象要求。

(3)SQL Server資料庫的恢復模式、相容級別。

(4)SQL Server上是否有常規的備份作業,特別是日誌備份。

(5)主體伺服器和映象伺服器的SQL Server能否互通。

3.使用證書配置映象,並備份還原資料庫

在這一步中,我們將做兩件事,第一件是使用證書來配置映象,第二件是備份還原資料庫。在非域環境下,必須使用證書來搭建映象,所以把搭建證書放在第一步。有些資料上會把備份還原操作放在證書搭建之前,但是根據個人經驗,當磁碟IO、網路效能不佳的時候,備份、傳輸、還原都會浪費大量的時間(個人操作過2個小時),並且期間伺服器幾乎不能操作。這種時候,我會選擇先搭建好,再還原,然後馬上進行同步,減少主從差異,需要同步更多的資料。

第一部分  建立證書:

【如果伺服器使用Local System作為SQL Server服務賬號,就需要使用證書授權。】

使用證書搭建映象的步驟如下:

(1)建立資料庫主金鑰(如果主金鑰不存在)。

(2)在Master資料庫中建立證書並用主金鑰加密。

(3)使用證書授權建立端點(endpoint)。

(4)備份證書成為證書檔案。

(5)在伺服器上建立登入賬號,用於提供其他例項訪問。

(6)在master庫中建立使用者,並對映到上一步的登入賬號中。

(7)把證書授權給這些使用者。

(8)在端點上授權。

(9)設定映象伺服器的主體夥伴。

(10)設定主體伺服器的映象夥伴。

(11)配置見證伺服器。

Step 1:建立資料庫主金鑰

主金鑰的用處在這裡是用於加密證書,當然主金鑰不僅僅只有這個作用。對資料庫主金鑰的密碼及儲存保護要小心,這是例項級別的物件,影響面非常廣。可以使用下面語句來建立:

USE master   
GO   
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Pa$$w0rd';

通過系統表檢視,確認。

使用相同方式在映象伺服器建立資料庫主金鑰。

Step 2:建立證書,並用主金鑰加密

建立證書時,預設在建立日期開始一年後過期,所以針對證書的建立,要注意其過期時間。下面是在“主體伺服器”上建立HOST_P_cert證書的建立

USE master   
GO   
CREATE CERTIFICATE Host_A_Cert    
WITH Subject = 'Host_P Certificate',   
Expiry_Date = '2050-1-1'; --過期日期 

使用相同的方法在映象伺服器上實現對HOST_S_cert證書的建立。

Step 3:建立端點

可以使用下面的程式碼在主體伺服器中建立端點,並且指定使用5022,埠,埠在映象配置過程中不強制使用特定埠(被佔用或者特定埠如1433除外)。

--使用Host_A_Cert證書建立端點   
IF NOT EXISTS ( SELECT  1   
                FROM    sys.database_mirroring_endpoints )   
    BEGIN   
        CREATE ENDPOINT [DatabaseMirroring] STATE = STARTED AS TCP ( LISTENER_PORT = 5022,   
            LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION =   
            CERTIFICATE Host_A_Cert, ENCRYPTION = REQUIRED Algorithm AES, ROLE =   
            ALL );   
    END  

 在映象伺服器對證書名稍作修改,建立映象伺服器的端點。

Step 4:備份證書

備份證書的目的是傳送到別的伺服器並匯入證書,以便別的伺服器能通過證書訪問這臺伺服器(主體伺服器)。

BACKUP CERTIFICATE Host_A_Cert   
TO FILE = 'D:\ShareFoldersMirror\Host_A_Cert.cer';  

同理,在映象伺服器上重複一次,注意證書名和路徑。備份之後可以在目標資料夾上看到有一個cer檔案:

 

備份證書檔案互相Copy至對方檔案中。

Step 5:建立登入賬號

針對每個伺服器單獨建立一個伺服器登入賬號,這裡只需要建立一個登入給映象伺服器即可:

CREATE LOGIN Host_B_Login WITH PASSWORD = 'Pa$$w0rd';

同理,在映象伺服器上建立Host_A_Login給主體伺服器。

Step 6:建立使用者,並對映到Step 5中建立的登入賬號中

在主體伺服器上執行:

CREATE USER Host_B_User For Login Host_B_Login;

同理在映象伺服器也建立。

Step 7:使用證書授權使用者

建立一個新的證書,並使用從夥伴伺服器中複製過來的證書匯入,然後對映step 6中的賬號到這個新證書上。

CREATE CERTIFICATE Host_B_Cert   
AUTHORIZATION Host_B_User   
FROM FILE = 'D:\ShareFoldersMirror\Host_B_Cert.cer';  

注意映象伺服器上也同樣。

Step 8:把Step 5中的登入賬號授權訪問埠

GRANT CONNECT ON ENDPOINT::[DatabaseMirroring] TO [Host_B_Login];  

映象伺服器也一樣。

到此為止,配置映象的步驟已經完畢,後續會給出儘可能自動化的配置指令碼。

第二部分  備份還原資料庫:

這一部分沒有什麼特別強調的,在此次試驗過程中,使用了介面配置。

注意:本次還原是為Mirror做準備,所以,點選   【選項】  按鈕 。

所以需要選擇【不對資料庫執行任何操作,不回滾未提交的事務….】

 還原成功

第三步:啟動映象

依次分別在映象Server和主Server上執行以下命令就可以了【最好在Master DB上執行以下命令】

在映象Server上線執行

ALTER DATABASE [Test_Mirror] 
    SET PARTNER = 'TCP://172.83.XXX.XXX:5022';
GO

在主Server上執行

ALTER DATABASE [Test_Mirror] 
    SET PARTNER = 'TCP://172.73.XXX.XXX:5022';
GO

 

 配置成功,此時顯示如下:

主體伺服器上顯示

映象伺服器上DB顯示

 

4. 補充說明

以下內容用來學習

問題1  查詢判斷資料庫是否已新增主金鑰

---sys.databases的is_master_key_encrypted_by_server得到是否有加密
select top 100 is_master_key_encrypted_by_server,* from sys.databases

----如果沒有就看不到資料【需定義到資料庫】 
----解釋說明:##MS_ServiceMasterKey##----是說的整個服務,而##MS_DatabaseMasterKey## 是說的Master資料庫,需留意。
----我們  使用證書搭建映象 是需要在master資料庫上建立資料庫主金鑰(如果主金鑰不存在)。
SELECT * FROM sys.symmetric_keys

以下截圖查詢的資料顯示Master資料庫尚未建立主金鑰。

以下截圖的資料顯示Master資料庫已有主金鑰

問題2 由日誌傳送更改為映象。

希望直接更改,即不再需要備份和還原。

Step 1 【注意:此時先手動執行一下此DB的Log 備份的Job,然後停掉此Job,接下來再執行Copy Log 檔案的Job(如果有此Job的話),再停掉此Job,最後執行Restore 此Log 檔案的Job,接著停掉此Job】

Step 2 選擇指定DB,取消【將此資料庫啟用為日誌傳送配置中的主資料庫…】,就是把 勾 去掉。

 

點選確定後,會要求我們再次連線一下。

 

Step 3 開始建立夥伴關係

先在備份Server的DB上去做

ALTER DATABASE [YYYY_Mob] 
    SET PARTNER = 'TCP://172.87.XXX.XX2:10001';
GO

 然後再在主DB上執行

ALTER DATABASE [YYYY_Mob] 
    SET PARTNER = 'TCP://172.89.XXX.XX4:10002';
GO

問題3 刪除主金鑰

解決方案:

DROP CERTIFICATE 證書名

但此時 還有報錯了

 

Step 1 刪除對映的登入賬號和使用者名稱

檢視登入名 

 

刪除標識的登入名 ,此時執行還會報同樣的錯誤。

注意登入名和使用者名稱是2個概念,

DROP LOGIN   For_HOST_B_user

(有時還要查詢  select top 100* from sys.sysusers是否還有這個使用者,有的話,還要執行 DROP User For_HOST_B_user)

Step 2 刪除埠 

SELECT * FROM sys.endpoints e WHERE e.name = N'Endpoint_Mirroring'

存在則刪除埠

 

Step 3  刪除

此時,就OK了。去刪除證書和主金鑰

問題4 在建立夥伴關係時,需注意設定夥伴的順序

如果按照網址上介紹的步驟 ,現在主伺服器上執行,設定夥伴。

 

則可能報錯,提示的錯誤資訊如下:

我們先在Mirror伺服器上執行

然後再在主伺服器中執行,則不報錯

 

參考文獻

http://blog.csdn.net/dba_huangzj/article/details/27652857

&n