資料庫環境:sql server 2005 +
1、replication,我們常用的是transactional replication。可以支援單向和雙向的資料同步。工作在table level。由於基於transaction,(內部使用了類似snapshot鏈出改變頁的方法),他的同步單位較小,在實踐中,往往只需要幾分鐘的時間就可以得到最新的資料。缺點,雖然允許replication schema change,但是對於真正的ddl修改的時候有時需要手動的進行修改。容易出現資料同步問題,而且複雜的查詢可能導致replication的效能並導致資料同步問題
2、log shipping。基於backup/restore。換而言之,它實際是自動的log backup傳輸到遠端,然後恢復的。正如restore備份資料庫的時候資料庫會處於單使用者狀態,在restore的時候,所有的當前使用者鏈結會被斷開,當然可以配置等待所有操作完成。沒有資料不同步的問題。
3、databaes mirroring。只是在考msits的時候涉及過這個技術,沒有實際用過。同步的資料庫處於不可用狀態,但是可以通過snapshot進行訪問。snapshot的數目不被限制,但是不得不選擇不同的名字。這對於資料庫查詢比較麻煩。沒有資料不同步的問題。
replication 最大的優點在於資料同步的迅速,使用者不會感覺到變化,使用者查詢不會被資料的更新影響。
logshipping 的優點則在於簡單易用,容錯性高。但使用者被經常打斷。
databaes mirroring 資料庫映象對可用性的提高程度遠遠大於先前使用 microsoft sql server 對可用性的提高,並為故障轉移群集或日誌傳送提供了易於管理的替代或補充。同步資料庫映象會話時,資料庫映象提供了熱備用伺服器,可支援在已提交事務不丟 失資料的情況下進行快速故障轉移。在一般的映象會話期間,如果生產伺服器出現故障,客戶端應用程式可以通過重新連線到備用伺服器來快速進行恢復。
下面借乙個圖來說明各個特點:
複製(replication)
日誌傳送(log shipping)
映象(mirroring)
故障轉移集群(failover clustering)
標準版/企業版
yesyes
標準版僅支援同步模式
標準版僅2節點
節點數1:n
1:n1:1
取決於作業系統節點數上限粒度表
資料庫資料庫
例項恢復模式
full/******
full/bulk_logged
full
all是否監視主庫故障
no監視器只監視同步狀態,
不監視publication server failure
nomonitor server只監視backup/retore status
不監視primary server failure
witness,可監視主庫故障
yes是否自動故障轉移
no(warm standby)
no(warm standby)
yes(hot standby),
如果沒有witness則不能自動,為warm standby
yes延遲
取決於log reader agent & distribution agent
取決於log backup/restore頻率
同步/非同步模式
只有乙份資料
同步方式
從distributor分發,可推送,可讀取
通過資料庫備份檔案的copy/restore
log stream
只有乙份資料
從庫是否可以訪問
subscription可讀寫,
但預設寫不會被回傳到publication
可設定secondary server為standby模式,唯讀
mirrored db可通過snapshot唯讀
只有乙份資料
應用場景
讀寫分離
讀寫分離,溫備
讀寫分離,溫備/熱備
伺服器/作業系統/應用軟體的備份
SQL server中常見的增,刪,改,查的操作
增 增加列 alter table 表名 add 列名 varchar 20 check 你的約束條件 如 在學生情況表中增加乙個email列,要求檢查輸入的是否為email alter table 學生情況表 add email varchar 20 check email like com 增加...
談談SQL Server高可用的常見問題
談談 sql server 高可用的常見問題 每次談到 sql server 的高可用,很多的 dba,特別是 sql server dba sql server 無法或者很難實現 sql server 也有很多的 dba朋友腦袋一拍,給出答案 高可用不就是微軟的那幾個技術嗎,如 replicati...
Sql server儲存過程中常見游標迴圈用法
用游標,和while可以遍歷您的查詢中的每一條記錄並將要求的字段傳給變數進行相應的處理 declare a1varchar 10 a2 varchar 10 a3 intdeclare youcurname cursor forselect a1,a2,a3 from youtablename op...