2012年2月18日 星期六

如何建立 Log Shipping

        經過前面幾篇的介紹,相信大家對 高可用性 (High Availability) 已有一定的了解,其實在SQL Server上一直有許多不同的選擇,如 ClusterDatabase Mirroring、Replication,接下來我們再介紹一個在SQL Server存在已久的一個功能,也就是 Log Shipping。


Log Shipping 架構圖

 Log Shipping 從 SQL Server 7.0 就開始出現,在後來 SQL Server 2005 的時候出現了一個與他類似的兄弟,稱為Database Mirroring,為何會稱他們為類似,我們簡單的進行一下比較。

Log Shipping vs Database Mirroring
  1. 兩者都不需要像Cluster一樣,需要一組特定的 Shared Disk 才可以進行。
  2. Cluster是以一個Instance為主,而兩者都是以 Database 為主進行。
  3. 同樣透過交易檔進行還原到第二台,但是 Database Mirroring 只能1對1的還原,但是Log Shipping 可以還原到多台上(如上述圖表所示)。
  4. 交易檔還原的過程中 Database Mirroring 可以選擇同步或非同步進行,但是 Log Shipping 則只能透過非同步。
  5. Database Mirroring可以支援自動 Failover (交易檔傳遞需設定為同步模式),但是 Log Shipping 則不行,需手動切換 。
  6. 交易檔還原的過程中 Database Mirroring的第二台 (Mirror),不能進行讀取,但是 Log Shipping 的第二台可以。
    PS:但是 Database Mirroring 的情況下,第二台可以透過資料庫快照的方式讓資料庫可以進行讀取。
  7. 兩者在第三台的分別上,Database Mirroring只需 Express的版本即可,但是 Log Shipping 需要 Workgroup or Standard or Enterprise 的版本才可以。
  8. 兩者雖然都可以透過第三台進行活動的觀察,Database Mirroring 可以透過第三台電腦達到自動 Failover ,但是 Log Shipping 上,第三台只是將原本在第一與第二台上的警示功能移到第三台上,藉以減輕負擔。
  9. 在資料庫的復原模式上,Database Mirroring只能使用 Full Mode,但是 Log Shipping 可以設定為 Full Mode或是 Bluk Logged
  10. Database Mirroring可以透過 [資料庫鏡像監視器] 來進行觀察彼此之間的活動,但是Log Shipping只能透過統計報表來察看。

 資料庫鏡像監視器


接下來大家應該了解到 Log Shpping 在 High Aviliability 算是一個很好入門的選擇,接下來,我們就來說明如何進行設定。

配備說明:
第一台
角色名稱:Primary
電腦名稱:WIN-2008R2-1
OS:Windows 2008R2 Enterprise
DB:Windows 2008R2 Enterprise
說明:主要資料庫,資料庫復原模式(Recovery Mode)需設定成完整 (Full)。

第二台
角色名稱:Secondary
電腦名稱:WIN-2008R2-2
OS:Windows 2008R2 Enterprise
DB:Windows 2008R2 Enterprise
說明:次要資料庫,接收從主要資料庫的交易資料,在沒有還原的過程中,資料庫可以使用。

底下以 [AdventureWork2008R2] 資料庫為範例
1、登入主要伺服器,選擇 [AdventureWork2008R2] -> [屬性] -> [選項] -> [復原模式],請選擇完整或大量紀錄,再選擇 [確定]。 

 2、勾選 [AdventureWork2008R2] -> [屬性] -> [交易記錄傳送] -> [將此啟用為記錄傳送組態的主要資料庫]

 3、點選 [備份設定],輸入在主要伺服器上的備份資料夾與對應的本機路徑,請注意此資料夾一定要讓SQL Server Agent的服務帳號擁有讀取和寫入的權限,否則會造成排程失敗,請再點選 [備份作業] -> [排程] 進到下一個步驟。

 4、此處特別注意的是設定排程的頻率,最小可以設定到10秒,你可以依照實際情況進行設定預設為15分鐘。

 5、設定完成後,請將你要加入的次要伺服務器點選 [加入] 進行選擇。

 6、請先點選 [連接] ,設定連接到你的次要伺服器,此處的次要資料庫如果你在次要伺服器上沒有先建立或對應的資料庫時,可以手動輸入,系統會自行搜尋如果沒有會自行輸入與主要伺服器相同的名稱。

 7、切換到 [複製檔案] 的頁次後,輸入次要伺服器上的分享資料夾,請注意同樣的此資料夾一定要讓SQL Server Agent的服務帳號擁有讀取和寫入的權限,否則會造成排程失敗。

8、 切換到 [還原交易記錄] 的頁次後,由於我們希望讓第二台同時也可以進行讀取,所以選擇 [待命模式],並且勾選 [還原備份時,中斷連接資料庫中的使用者]。

9、再來可設定 [記錄傳送監視器],監視器主要用來負責主要與次要伺服器的警示提醒的動作,如果透過另一台進行時,可以減輕二台主機的負擔,偍由於版本的要求,所以不像 Database Mirroring可以透過 Express來進行,所以此處可以不設定,我先將此監視器設定在第二台上。

10、設定完成後,回到主畫面,你可以看到設定如下,再點選 [確定] 即可。

 11、切換到次要伺服器上,你會發現已將資料庫新增完成,而且狀態會變成 [待命/唯讀]。


如果你在第8個步驟中,選擇 [不復原模式] 時,就會如下圖,無法進行讀取。

12、上述的流程已設定完成,Log Shipping已可正常執行,接下來我們來看一下目前的執行狀況,可以透過 [Instance] -> [報表]   -> [標準報表] -> [交易記錄傳案狀態]

13、你就可以透過此報表來觀察目前 Log Shipping 的狀況。


相關文章:
  1. SQL Server 2008 R2 容錯移轉叢集環境架設 - 利用 VM 與 Windows Storage Server - Part I
  2. SQL Server 2008 R2 容錯移轉叢集環境架設 - 利用 VM 與 Windows Storage Server - Part II
  3. SQL Server 2008 R2 容錯移轉叢集環境架設 - 利用 VM 與 Windows Storage Server - Part III(終)
  4. SQL Server - 雙主動模式叢集環境架設
  5. SQL Server - 如何建立 Database Mirroring

參考連結:
Log Shipping Overview
http://msdn.microsoft.com/en-us/library/ms187103.aspx
sp_help_log_shipping_monitor (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms187820.aspx
Using Secondary Servers for Query Processing
http://msdn.microsoft.com/en-us/library/ms189572.aspx
Database Mirroring and Log Shipping
http://msdn.microsoft.com/en-us/library/ms187016.aspx


關鍵字:Log ShippingHigh AvailabilityTransaction Logs

11 則留言:

  1. 實在太棒了 謝謝

    回覆刪除
    回覆
    1. 謝謝了,希望對你有幫忙。

      刪除
  2. c大不好意思,想請問一下這篇權限設定的方式。

    我在依照您這篇實作的時候,(兩台機器均無加入網域),將Agent啟動帳戶設為NetWorkService。並且在資料夾分享的權限都有加入該帳戶。但是最後在執行第一次初始化時都會出現存取被拒,最後我是修改兩邊SQL Server啟動的帳戶,改為用一個帳號與密碼,並且也將該帳戶至分享資料夾設定權限。才能成功執行第一次的建立動作。
    想請問c大是否做Log shipping 需要同時確認sql server與agent帳戶擁有對分享資料夾的權限呢?
    Thanks : )

    回覆刪除
    回覆
    1. 你好,其實你說的沒錯,在進行這類跨電腦的分享時,最好都是透過Domain Account來進行會比較好,因為在進行存取時,都是透過Agent的啟動帳號進行的,所以當然要進行權限的設定。

      刪除
    2. 感謝c大的回應 : ) 的確 .後來我做的時候也是按照c大的說法,才設置成功. 沒有Domain環境設定的真痛苦(笑)

      刪除
  3. 請問這只是單純的資料庫備份嗎

    那麼之後進形資料庫恢復的動作流程為何呢?

    回覆刪除
    回覆
    1. 簡單上來看,如同你所說,只是單純的資料庫備份,當發生問題時,你仍需你手動進行切換到備份的資料庫上,但由於架構簡單與操作上方便,所以仍有一定的支持者。

      關於後續的資料庫恢復的作法,你可以參考下列的連結進行設定:

      Fail Over to a Log Shipping Secondary (SQL Server)
      https://msdn.microsoft.com/en-us/library/ms191233(v=sql.110).aspx

      刪除
  4. 作者已經移除這則留言。

    回覆刪除
  5. 作者已經移除這則留言。

    回覆刪除
  6. C大你好,想請教你兩個問題,一是次要資料庫設定待命模式都會還原失敗,但設定不復原模式就可以正常執行,找不到失敗的原因;二是次要資料庫在還原交易紀錄檔時,會愈來越慢,頻率排程為備份,複製,還原各15分鐘,資料庫容量有4TB,15分鐘的交易紀錄檔平均30MB,是否是因為資料庫容量太大,還是有其他方式是可查詢原因?

    回覆刪除
  7. Hi

    請教一下,若是要設定的DB原本有如下DB backup:
    每周六Full備份一次
    每周1~5+日差異備份一次
    每30分鐘交易紀錄檔備份
    若是這個DB要建立log shipping,則以上備份是不是就不能跑了?
    我的環境是SQL2008R3+SP3

    回覆刪除