透過批次檔及排程自動備援MS-SQL

對於常常應用MS-SQL的廣大鄕民們,對於目前沒有太多錢可運用的單位
MS-SQL備援方案有沒有更經濟一點的呢?這個問題應該帶給大家很大的困擾吧!

對於常常應用MS-SQL的廣大鄕民們,對於目前沒有太多錢可運用的單位
MS-SQL備援方案有沒有更經濟一點的呢?這個問題應該帶給大家很大的困擾吧!
其實Jason也曾深深的被困擾過,下列是Jason後來應用的方法,看看能否給大家一些想法。

若要達熱備援(Hot Site)可以透過Cluster技術達成,但其成本之高,若客戶是政府單位,且必須採用中信標的話,其試算如下: 

 

名稱

單價

數量

小計

OS

 

Windows server 2003 R2 Enterprise edition

NT$ 64,698

1

NT$64,698

Windows Server 用戶端存取授權 (User or Device CAL)

NT$769

5

NT$3,845

DB

 

Microsoft SQL Server 2005 Std edition

NT$ 24,169

1

NT$ 24,169

SQL Server 用戶端存取授權 (User or Device CAL)

NT$4,332

5

NT$21,660

小計

1組

NT$114,372
總計

2組

NT$228,774

 

光是個軟體授權費用就要將近11萬5千元,更別說硬體,若是要建置為Failover cluster
除了要一台SAN,兩片Disk Control Card還得要再買兩台中階伺服器
一台SAN至少要買到48萬元,一台伺服器至少買16萬5千元
光是硬體設備就將近85萬元+23萬的軟體授權,將將好快1百萬,老闆不殺了你我才不信,鬼才敢玩。

Failover示意圖

於是,Jason想了一個方法,透過批次檔設定兩台Server的自動工作排程來呼叫整個備份及備援的程序
首先我們先確認一下需求的環境:
1.至少要有一種方法可以傳遞備份檔(.bak)    ps.本範例以網芳為例。
2.主要伺服器要能夠信任備援伺服器的服務要求
3.備份檔案名稱必須相同
4.有一組可做還原的SQL帳戶。

為符合上述要求,假設主要伺服器IP為192.168.1.3,備援伺服器IP為192.168.1.5,其程序如下:
1.每天晚間半夜3點整是主要伺服器將資料完整備份至指定的目錄中
2.備援伺服器於每天半夜3點半自動將主要伺服器的備份檔透過網芳將檔案拉取過來
3.將檔案取得後透過T-Script自動的將資料還原到備援伺服器

主要伺服器透過網路讓備份的檔案能直接取取,其路徑為:\\192.168.1.3\databasesync\db.bak
備援伺服器將備份的檔案抓取過來至本機的磁碟內,其路徑為:d:\databasesync\
首先請先於主要伺服器上設定備份工作,並且設定完整備份至指定的檔案名稱,並且使用覆蓋原檔的方式

接下來在備援伺服器中建立一個批次檔(.bat),其內容如下: 

xcopy \\192.168.1.3\dabasesync\db.bak d:\databasesync\  /y  /s  
osql -S "備援伺服器電腦名稱" -U 可執行還原的帳號 -P "可執行還原的帳戶密碼” -i 還原T-Script的實體路徑.sql  
exit

其中還原T-Script的檔案(.sql)內容如下: 

USE master  
GO  
ALTER DATABASE 資料庫名稱 SET single_user WITH rollback immediate  
GO  
RESTORE DATABASE 資料庫名稱 FROM DISK='d:\databasesync\db.bak’ WITH RECOVERY  
GO  
ALTER DATABASE 資料庫名稱 SET multi_user  
GO

接下來手動的執行主要伺服器的備份程序,及備援伺服器的排定工作即可測試。

批次檔運作示意圖

這個方法可以直接在批次檔中加入其它欲備援的資料庫T-script,只要你在主要伺服器上有完整備份出欲備援的資料庫,並且將還原的t-script另外新增即可。


Anything keeps Availability.
Anywhere keeps Integrity.
Anytime keeps Confidentiality.
keep A.I.C. = Information Security