1. 程式人生 > >SQL SERVER2008 映象全攻略

SQL SERVER2008 映象全攻略

在非域控環境中建立資料庫映象, 我們必須使用證書來建立資料庫映象。 大致的步驟包括:

在為資料庫映象配置的每個伺服器例項上執行下列步驟:

在 master 資料庫中,建立資料庫主金鑰。
在 master 資料庫中,為伺服器例項建立加密證書。
使用伺服器例項的證書為該伺服器例項建立端點。
將證書備份到檔案,並將其安全地複製到其他系統。
 

然後,對為資料庫映象配置的每個夥伴執行這些步驟。在 master 資料庫中:

為其他系統建立登入名。
建立一個使用該登入名的使用者。
獲取其他伺服器例項的映象端點的證書。
將該證書與在步驟 2 中建立的使用者相關聯。
授予對該映象端點的登入名的 CONNECT 許可權。
 

/*查詢所有當前資料庫名
select SERVERPROPERTY(N'servername')
SELECT
dtb.name AS [Name]
FROM
master.sys.databases AS dtb
ORDER BY
[Name] ASC
*/
-------------------------------------------------------前期準備
-- 檢視資料庫版本
   SELECT @@VERSION
-----配置資料庫映象事務安全級別 
   ALTER DATABASE TestMirroring SET SAFETY FULL 
-----更改主資料庫為使用完整恢復模式(如果非完整恢復模式則 可以使用下面SQL更改為 完整恢復模式)
   USE master
    ALTER DATABASE TestMirroring 
    SET RECOVERY FULL WITH no_wait

/*跨資料庫事務和分散式事務均不支援資料庫映象
*/

--主伺服器 見證伺服器 映象伺服器的資料庫版本必須相同
--備份主資料庫(完整備份)
   BACKUP DATABASE [TestMirroring] TO  DISK = N'C:/wenzhongfiles/TestMirror.bak' WITH NOFORMAT, NOINIT, 
   NAME = N'TestMirroring-完整 資料庫 備份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
--備份主資料庫的完整日誌檔案
   BACKUP LOG [TestMirroring] TO  DISK = N'C:/wenzhongfiles/TestMirrorlog.bak' WITH NOFORMAT, NOINIT, 
   NAME = N'TestMirroring-事務日誌  備份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
--在映象伺服器上還原(還原選項 norecovery(即不對資料庫執行任何操作))
   RESTORE DATABASE [TestMirroring] FROM  DISK = N'F:/TestMirror.bak' WITH  FILE = 1,  MOVE N'TestMirror'
    TO N'E:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/TestMirroring.mdf',  MOVE N'TestMirror_log'
    TO N'E:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/TestMirroring_1.ldf',  NORECOVERY,  NOUNLOAD,  REPLACE,  STATS = 10
--將備份的完整日誌檔案在 映象伺服器上執行 日誌文字間恢復(還原選項 norecovery(即不對資料庫執行任何操作))
   RESTORE LOG [TestMirroring] FROM  DISK = N'F:/TestMirrorlog.bak' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10


--------------正式開始(程式碼僅僅是舉例主伺服器上的)

--------------------------------------------------------------------------在 主、映象、見證伺服器上 分別執行:
------建立資料庫對稱金鑰
  USE master;   
  --DROP MASTER KEY   
  CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'wenzhong';   
  GO 
------建立資料庫證書(注意:證書失效日期)
  --DROP CERTIFICATE host_A_cert   
  CREATE CERTIFICATE host_A_cert    
  WITH SUBJECT = 'host_A certificate',START_DATE = '01/01/2011',EXPIRY_DATE = '12/31/2099';  
  GO   
------利用建立的證書為伺服器例項建立映象端點
  --DROP ENDPOINT Endpoint_Mirroring   
  CREATE ENDPOINT Endpoint_Mirroring   
  STATE = STARTED   
  AS TCP (   
  LISTENER_PORT=5022   
  , LISTENER_IP = ALL   
  )    
  FOR DATABASE_MIRRORING (    
  AUTHENTICATION = CERTIFICATE host_A_cert   
  , ENCRYPTION = REQUIRED ALGORITHM AES   
  , ROLE = PARTNER   
  )   
  GO   
------將證書分別備份出來,然後互換(即:主伺服器上保證存在 映象和見證伺服器上建立的證書;映象伺服器上 存在 主伺服器和見證伺服器上建立的證書;
--          見證伺服器上存在 主伺服器和映象伺服器上建立的證書)
  BACKUP CERTIFICATE host_A_cert TO FILE = 'F:\Host_A_cert.cer'
------在各自的伺服器上為其他兩個伺服器分別建立一個登陸名
  USE master;   
  --DROP LOGIN host_B_login   
  CREATE LOGIN host_B_login WITH PASSWORD = 'wenzhong'   
  GO  
  USE master;   
  --DROP LOGIN host_C_login   
  CREATE LOGIN host_C_login WITH PASSWORD = 'wenzhong'  
  GO  
------建立一個使用上面建立的登入名的使用者
  --DROP USER host_B_user   
  CREATE USER host_B_user FOR LOGIN host_B_login;   
  GO --DROP USER host_C_user   
  CREATE USER host_C_user FOR LOGIN host_C_login;   
  GO 
------使得證書和使用者進行關聯
  --DROP CERTIFICATE host_B_cert   
  CREATE CERTIFICATE host_B_cert   
  AUTHORIZATION host_B_user   
  FROM FILE = 'F:/host_B.cer'  
  GO 
  --DROP CERTIFICATE host_C_cert   
  CREATE CERTIFICATE host_C_cert   
  AUTHORIZATION host_C_user   
  FROM FILE = 'F:/host_C.cer'  
  GO
------將對遠端映象端點的連線(CONNECT)許可權授予該登入名
  GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_B_login]   
  GO
  GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_C_login]  
  GO

-----------------避免“孤立使用者”。映象伺服器的缺點就是不能自動維護登入名,需要手動維護。
-------在主伺服器中查詢相應的使用者名稱和對應的SID號
  USE master 
  select sid,name from syslogins
-------在映象伺服器上(備機上)將對應的使用者名稱和SID建立起來
  USE master   
  exec sp_addlogin    
  @loginame = '<LoginName>',    
  @passwd = '<Password>',    
  @sid = <sid>  
-------可以在此時進行備份主資料庫和日誌並進行還原操作,也可以在正式開始前執行備份和還原操作(sql見前面)


-----------------------------------------------------------------------------最後
--------在映象伺服器上將主資料庫設定為其夥伴(必須首先執行,順序不能顛倒)
  ALTER DATABASE TestMirroring   
  SET PARTNER = 'TCP://192.168.0.211:5022'   
  GO 
--------在主資料庫伺服器上將映象伺服器設定為其夥伴
  ALTER DATABASE TestMirroring   
  SET PARTNER = 'TCP://192.168.0.111:5022'   
  GO 
--------在主資料庫伺服器上設定見證伺服器。
  ALTER DATABASE TestMirroring    
  SET WITNESS = 'TCP://192.168.0.192:5022'   
  GO 

-----------------------------------------------------------------------------對設定是否成功進行測試
--------由於映象 的缺點:在映象伺服器上無法查詢資料。需要測試是否可以成功。(資料庫複製功能則可以)
--------通過在映象資料庫上建立資料庫快照可以間接讀取某一個時刻點的映象資料庫
--------測試過程:
--------主機上執行:
 USE master;   

ALTER DATABASE TestMirroring SET SAFETY FULL;-----切換到高安全模式否則執行手動切換會失敗

GO
 ALTER DATABASE TestMirroring SET PARTNER FAILOVER  ---手動進行主備切換
------映象伺服器上執行:
 USE master;   
 ALTER DATABASE TestMirroring SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS ---在映象機上執行強制切換(當主伺服器資料宕機時)


-------如果原來的主伺服器恢復,可以繼續工作,需要重新設定映象
----備機(映象伺服器)上執行:
--恢復映象     
 USE master;   
 ALTER DATABASE TestMirroring SET PARTNER RESUME  
--切換主備
 ALTER DATABASE TestMirroring SET PARTNER FAILOVER 
------------------------刪除資料庫映象
  ALTER DATABASE TestMirroring SET PARTNER OFF
-----------暫停資料庫映象會話
   ALTER DATABASE TestMirroring SET PARTNER SUSPEND 
-----恢復資料庫映象會話
   ALTER DATABASE TestMirroring SET PARTNER RESUME
   ALTER DATABASE TestMirroring SET PARTNER SUSPEND 
-----關閉見證伺服器
   ALTER DATABASE TestMirroring SET WITNESS OFF

 

 

/*

預設情況下,事務安全級別的設定為 FULL,即同步執行模式,而且SQL Server 2005 標準版只支援同步模式。
關閉事務安全可將會話切換到非同步執行模式,該模式可使效能達到最佳。
*/
--事務安全,同步模式  
 USE master;   
 ALTER DATABASE TestMirroring SET PARTNER SAFETY FULL 
--事務不安全,非同步模式  
 ALTER DATABASE TestMirroring SET PARTNER SAFETY OFF;

--------在高效能模式下,見證伺服器對可用性會有不利影響。如果見證伺服器是針對資料庫映象會話而配置,則主體伺服器必須至少連線到一個其他伺服器例項,
--  即映象伺服器或見證伺服器,或者是連線到這兩個伺服器。否則,將無法使用資料庫,並且不能進行強制服務(可能丟失資料)。
--  因此,對於高效能模式,建議始終將見證伺服器設定為 OFF。
--  見證伺服器的唯一角色是支援自動故障轉移。並不能用於資料庫,是 SQL Server 的可選例項。
--     它能使高安全性模式會話中的映象伺服器識別出是否要啟動自動故障轉移(見證伺服器的角色就是啟動自動故障轉移)。
  ALTER DATABASE TestMirroring SET PARTNER OFF
  
/*
 自動故障轉移所需條件

  A、資料庫映象會話必須在高安全性模式下執行,並且必須處理見證伺服器。
  B、映象資料庫必須已經同步。這將保證傳送到映象伺服器的所有日誌都已寫入磁碟。
  C、主體伺服器已中斷了與其餘資料庫映象配置的通訊,而映象伺服器和見證伺服器將保留仲裁。但是,如果所有伺服器例項都已中斷通訊,
   而見證伺服器和映象伺服器稍後重新建立通訊,則不會發生自動故障轉移。
  D、映象伺服器已檢測到丟失了主體伺服器
  E、映象伺服器檢測主體伺服器故障的方式取決於故障是硬故障還是軟故障。

 自動故障轉移原理

  A、如果主體伺服器仍在執行中,則將主體資料庫的狀態更改為 DISCONNECTED 並斷開所有客戶端與主體資料庫的連線。
  B、見證伺服器和映象伺服器將主體伺服器註冊為不可用。
  C、如果重做佇列中有任何等待的日誌,則映象伺服器將完成前滾映象資料庫的操作
  D、前一個映象資料庫作為新的聯機主體資料庫,恢復通過儘快回滾未提交的事務將這些事務全部清除。鎖將隔離這些事務。
  E、當前一個主體伺服器重新聯接到會話時,它將認定其故障轉移夥伴現在擁有主體角色。前一個主體伺服器接管映象角色,並將其資料庫作為映象資料庫。
   新的映象伺服器會盡快將新的映象資料庫與主體資料庫同步。新的映象伺服器重新同步資料庫後,就可以再次執行故障轉移,但按反向執行。。
*/

--------------------外延
-----使用ADO.NET或者SQL Native Client能夠自動連線到故障轉移後的夥伴,連線字串如下所示:
  ConnectionString="DataSource= A;Failover Partner=B;Initial Catalog=AdventureWorks;Integrated Security=true; 

--如果沒有映象伺服器的建設,或環境無法實現映象伺服器的建設。通過下面的程式碼一樣可以實現類似映象的功能 

-----C# code


Imports System.Data.SqlClient 
Imports System.Data 
 
Public Class dbConn 
Private primaryServerLocation As String="SERVER=primaryAddress;DATABASE=yourDB;User id=youruserID;Password=yourPassword;" 
Private secondaryServerLocationAsString="SERVER=secondaryAddress;DATABASE=yourDB;User id=youruserID;Password=yourPassword;" 
 
 
Public sqlConnection AsSqlConnection 
Public cmd AsSqlCommand 
 
Public Sub primaryConnection() 
    Try 
        sqlConnection = New System.Data.SqlClient.SqlConnection(primaryServerLocation) 
        cmd = NewSystem.Data.SqlClient.SqlCommand() 
 
        'test connection 
        sqlConnection.Open() 
        sqlConnection.Close() 
    Catch ex As Exception 
        secondaryConnection() 
    End Try 
End Sub 
 
Public Sub secondaryConnection() 
    'Used as the failover secondary serverif primaryis down. 
    Try 
        sqlConnection = New System.Data.SqlClient.SqlConnection(secondaryServerLocation) 
        cmd = NewSystem.Data.SqlClient.SqlCommand() 
 
        'test connection 
        sqlConnection.Open() 
        sqlConnection.Close() 
    Catch ex As Exception 
    End Try 
End Sub 


-----C# code
  --=================檢視資料庫映象的配置狀態================= 

-- 1.通過Management studio 物件資源管理器,檢視主體資料庫、映象資料庫狀態 
-- 2.通過Management studio 物件資源管理器中的資料庫屬性檢視狀態 
-- 3.通過系統目錄檢視檢視資料庫映象配置情況 

 use master 
  go 
  SELECT * FROM sys.database_mirroring_endpoints 
  SELECT * FROM sys.database_mirroring 
  WHERE database_id =(SELECT database_id FROM sys.databases 
          WHERE name = 'TestMirroring')
  SELECT * FROM sys.database_mirroring_witnesses
 



 

映象的執行模式有三種:

1、 高效能(非同步):先提交主伺服器上的更改,然後將其傳輸到映象伺服器上。

2、不帶自動故障轉移功能的高安全(同步): 過程始終提交主服務和映象伺服器上的更改。

3、帶自動故障轉移功能的高安全(同步):需要見證伺服器例項。如果主伺服器和映象伺服器都可用,則提交在它們上面所做的更改並映象。如果主伺服器不可用,則見證伺服器就會控制自動故障轉移到映象伺服器上。

 

相關推薦

SQL SERVER2008 映象

在非域控環境中建立資料庫映象, 我們必須使用證書來建立資料庫映象。 大致的步驟包括: 在為資料庫映象配置的每個伺服器例項上執行下列步驟: 在 master 資料庫中,建立資料庫主金鑰。 在 master 資料庫中,為伺服器例項建立加密證書。 使用伺服器例項的證書為該伺服

pb9.0連線sql server2008

SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DSN=2pbconn2008;ODBC'" connect using SQLCA;   //注意 這句必須加分號  if sqlca.sqlcode &l

分享Redis使用:如何跳出SQL這個坑

隨著資料體積的激增,MySQL+memcache已經滿足不了大型網際網路類應用的需求,許多機構也紛紛選擇Redis作為其架構上的補充,然而Redis的使用門檻並不低,比如不支援SQL等,這裡為大家分享Redis的使用全攻略。 Redis,備受關注的NoSQL資料庫之一,

SQL Server 備份和還原, 完全備份,差異備份,增量備份,事務日誌備份

2011-06-29 17:03 by 聽風吹雨, 3435 閱讀, 17 評論, 收藏, 編輯 一、知識點 完全備份: 備份全部選中的資料夾,並不依賴檔案的存檔屬性來確定備份那些檔案。(

Windows勒索病毒防範、解決方法

windowsxp 殺毒軟件 金山毒霸 下載地址 官方下載 【防禦措施建議】1、安裝殺毒軟件,保持安全防禦功能開啟,比如金山毒霸已可攔截(下載地址http://www.duba.net),微軟自帶的WindowsDefender也可以。2、打開Windows Update自動更新,及時升級

Linux一鍵安裝web環境(阿裏雲ECS服務器)

傳輸 80端口 掛載 iyu 使用 ftp服務 老版本 雲服務 linux服務 摘自阿裏雲服務器官網,此處 一鍵安裝包下載: 點此下載 安裝須知 1、此安裝包可在阿裏雲所有linux系統上部署安裝,此安裝包包含的軟件及版本為: nginx:1.0.15、1.2.5、1.4.

android屏幕適配的

屏幕分辨率 縮放 img 關系 我們 http 分辨 tro pix 一. 核心概念與單位詳解 1. 什麽是屏幕尺寸、屏幕分辨率、屏幕像素密度? 屏幕分辨率越大,手機越清晰 2. 什麽是dp、dip、dpi、sp、px?之間的關系是什麽? dip:Density

Linux編程之UDP SOCKET

應用場景 什麽是 vid 結構體指針 from 好的 conn 能力 cnblogs 這篇文章將對linux下udp socket編程重要知識點進行總結,無論是開發人員應知應會的,還是說udp socket的一些偏僻知識點,本文都會講到。盡可能做到,讀了一篇文章之後,大家對

大型ECShop安裝搬家升級錯誤問題最

item auth prototype c2c params 同時 return ping 屏蔽 【引子】 最近將ECShop框架網站從租用服務器搬家至阿裏雲,雖然模塊及功能上已經被修改的面目全非了,但基礎部分還在。 在這個過程中遇到了很多的WARNIN

win7下安裝Linux實現雙系統

ont c51 item itl command 桌面 ted current 輸入 最近剛剛把原來32位的系統給重新安裝成64位的win7旗艦版,但又想嘗試下Linux,於是在win7下安裝了Linux實現了雙系統,是ubuntu 12.04版本的,據說現在最新的14.

論文檢測省錢

5.1 bds 而且 用途 jpeg har -m 也有 一個 學校是使用的知網論文查重系統,如果去使用別的論文檢測系統不僅浪費錢而且他們之間的報告根本就沒有可比性,因為論文查重系統的不同它收錄的學術論文資源以及算法都是不同的所以結果有偏差才是正常的。因此很多學生也只能使用

maven教程

教程 bean 然而 mave 外部依賴 創建 包含 冗余 快照 maven教程全攻略 我們在開發項目的過程中,會使用一些開源框架、第三方的工具等等,這些都是以jar包的方式被項目所引用,並且有些jar包還會依賴其他的jar包,我們同樣需要添加到項目中,所有這些相關的ja

淘寶優惠券最!省錢

alt bsp 用戶 ima nload 粘貼 list 成功 推廣 工具/原料 淘寶APP 好券捕手APP 首先我們來說一下淘寶優惠券的由來! 淘寶優惠券分兩種 一、公開優惠券 用戶在淘寶店家店鋪就可以直接看到的優惠券 二、賣家用於淘客推廣的優惠券(這種券是不公開的

聯通老用戶換套餐奉上

移動電話 .html 詳細 模版 ges 操作 移動 聯系 等待  聯通互聯網套餐哪個好?近日,很多網友都在討論這個話題,越來越多老用戶通過聯通客服投訴,得以換用資費更加實惠的聯通互聯網套餐。   那麽到底聯通互聯網套餐要如何申請更換,今天就一起來看看聯通老用戶換互聯網套餐

【微軟大法好】VS Tools for AI(2)

port shell orf 方式 virt cnblogs 我們 玩耍 虛擬 接著上文,我們來討論如何使用Azure資源來訓練我們的tensorflow項目。Azure雲我個人用得很多,主要是因為微軟爸爸批了150刀每月的額度,我可以愉快地玩耍。 那麽針對Azure,有成

Vue.js——vue-resource

lam 類型 網絡 java 隱藏 header 做的 response scrip 概述 上一篇我們介紹了如何將$.ajax和Vue.js結合在一起使用,並實現了一個簡單的跨域CURD示例。Vue.js是數據驅動的,這使得我們並不需要直接操作DOM,如果我們不需要使用jQ

Perl Unicode

erl 結果 編程 國際 要求 locale intern 操作 自動 Perl Unicode全攻略 耐心看完本文,相信你今後在unicode處理上不會再有什麽問題。 本文

Windows 系統 Unicode 文件名操作(新建、重命名、枚舉、復制)

for overflow date col left 文件的 函數 參數 splay 常見的那些文件操作函數都不支持,於是為了達到目的,需要各種方法配合,應該是不如其他語言方便。我只是想看看Perl到底是否適合做這件事,於是折騰了一回。文件的建立: 模塊:Win32

【轉】Android Studio打包---從入門到精通

UC store 類型 安裝文件 public alt url tool 描述 原文地址:http://blog.csdn.net/zivensonice/article/details/51672846 初出茅廬 手動打包 怎麽手動打包 項目寫完了,現在需要把應用上傳

Andriod界面設計的分辨率和尺寸適配 轉載

復雜 分別是 太差 content 基礎 hdp art 發布 一點 Andriod界面設計的分辨率和尺寸適配全攻略 轉載 2016年09月27日 17:45:56 第一、屏幕尺寸: 一般表示是手機的實際物理尺寸,屏幕尺寸指屏幕的對角線的長度,單位是英寸,1英寸