安裝 SQL Server 2008 容錯轉移叢集心得筆記 – 第 3 篇 (完)

暨【安裝 SQL Server 2008 容錯轉移叢集心得筆記 – 第 1 篇】與【安裝 SQL Server 2008 容錯轉移叢集心得筆記 – 第 2 篇】之後,今天將是完結篇的時候,我們要把第二台 SQL Server 2008 叢集主機設定完成,以達成 高可用性(High Availability; HA) 的目的。

安裝設定第二台叢集主機 SQL-2

昨天的文章一樣需修正 SQL Server 2008 RTM 的安裝程式支援檔案到 Service Pack 1 的版本,然後執行 setup.exe /PCUSource=C:\SP1 進行安裝。

確認這時設定的帳戶名稱與你第一台叢集電腦安裝的帳戶權限是否一致,像我就發現我的 SQL Server Integration Service 10.0 的帳戶被改變了,但是並無法手動修改,另外兩個帳戶名稱也無法修改,這時你必須輸入相同的密碼才行:

大功告成啦!我們可以看一下第二台叢集節點的 “SQL Server (MSSQLSERVER)” 服務的狀態是否一切正常:

我想我這一系列安裝步驟是目前中文語系最完整的逐步安裝指南,我大概裝了 4 次才完全安裝成功,真不是普通的複雜,當中還有許多 Know How 等著被釐清與建立,但光是安裝經驗就讓我多學到很多東西,正所謂「失敗為成功之母」,第一次就安裝成功是學不到東西的,在此僅向用心良苦的微軟至上深深的一鞠躬。XD

相關連結

之前遇到安裝失敗的問題與解答相關連結

完整安裝 SQL Server 2008 容錯轉移叢集的步驟文章

其他相關連結

  

此文章由 will 發表於 2010/1/19 下午 06:46:06

永久連結 | 評論 (8) | 此文章的RSSRSS comment feed |

分類: SQL Server | 系統管理

標籤: , , , , , ,

收藏:

安裝 SQL Server 2008 容錯轉移叢集心得筆記 – 第 2 篇

昨天的【安裝 SQL Server 2008 容錯轉移叢集心得筆記 – 第 1 篇】已經將叢集所需的基本環境建立完成,今天就要開始開始設定 Windows 叢集與架設 SQL Server 2008 容錯轉移的重頭戲了,好戲即將上場,敬請專心備戰。

安裝與設定 Microsoft 分散式交易調節器(MSDTC)

分散式交易調節器(DTC)是個交易管理員,負責處理多個不同資料來源的資料進行交易處理(ATOM),確保跨伺服器間的各種複雜操作,像 SQL Server 就是透過 MSDTC 服務進行跨伺服器的分散式交易作業。

伺服器管理員 - 叢集 SQLCluster 的摘要

 

在安裝分散式交易協調器時必須設定另一組「DTC 專用的電腦名稱」以及「DTC 專用的 IP 位址

昨天的文章有預先準備過一個 MSDTC (分散式交易) 專用磁碟給 1GB 大小的磁碟,你可以依據叢集磁碟的大小判斷出是哪一個硬碟,並選取給 MSDTC 使用。

安裝完成之後可以點選 SQLClusterDtc 服務,並確認所有項目都是 線上(Online) 的狀態

終於要正式開始安裝 SQL Server 2008 容錯轉移叢集了,但可千萬別急著開始安裝,因為 SQL Server 2008 RTM 的安裝程式有雷,直接安裝會讓你很受傷!另外,如果你是安裝在 Windows Server 2008 必須額外安裝 Windows Installer 4.5.NET Framework 3.5 with Service Pack 1,若是 Windows Server 2008 R2 則不用特別安裝。

修正 SQL Server 2008 安裝程式

由於 SQL Server 2008 RTM 版本根本無法成功架設叢集,所以必須在 安裝之前 完成以下步驟:

1. 下載 SQL Server 2008 Service Pack 1 繁體中文版

2. 解壓縮至 C:\SP1 目錄下

SQLServer2008SP1-KB968369-x64-CHT /x:C:\SP1 

3. 安裝 SP1 版本的 Microsoft SQL Server 2008 安裝程式支援檔案

C:\SP1\x64\setup\1028\sqlsupport.msi

4. 從指令列啟動 SQL Server 2008 安裝程式,並加上 /PCUSource=C:\SP1 參數

setup.exe /PCUSource=C:\SP1

詳細步驟請參考 How to update or slipstream an installation of SQL Server 2008 的說明,安裝過程如下:

SQLServer2008SP1-KB968369-x64-CHT /x:C:\SP1

C:\SP1\x64\setup\1028\sqlsupport.msi

開始以 SQL Server 2008 with Service Pack 1 安裝 SQL Server 容錯轉移叢集服務

備註:我的光碟機設定在 Z:\

 

 

安裝的結果會出現兩個警告畫面 (就算沒問題也會出現警告,請不用太過於緊張),但建議還是搞清楚狀況會比較好。

關於第一個警告可參考以下連結:

另一個 Windows 防火牆警告是提醒你「如果有自行修改過防火牆設定」者,可能會因為無法連接的關係而導致安裝失敗,但預設的情況下不會有防火牆阻擋的問題。若要瞭解需要設定哪些防火牆規則,可以參照此連結:將 Windows 防火牆設定成允許 SQL Server 存取

接下來請選取你要安裝的功能,以及「共用功能目錄」,這裡的目錄必須設定「本機磁碟」的路徑,不能選用「叢集磁碟」,而在之後的步驟會有機會讓你選擇「資料庫存放的路徑」,到時才會讓你選擇「叢集磁碟」。

接下來要設定這個 SQL Server 2008 容錯轉移叢集的主要網路名稱,日後所有 SQL 用戶端 (SQL Client) 都會以這個網路名稱連接 SQL 叢集。

在設定「叢集資源群組」步驟時,你可以直接使用預設的「SQL Server (MSSQLSERVER)」當做 SQL Server 叢集資源群組名稱,或可以直接手動輸入修改掉這個名稱,但唯讀下方這三個「限定」的名稱不能使用,請不要看到紅色圖示就開始害怕,只是提示你罷了。

接下來就要選取要再 SQL Server 資源叢集群組中的共用磁碟,我們將目前剩下的兩個叢集磁碟都選取起來,這些設定在日後還是可以變更。

設定「叢集網路」所需的組態設定,包括 SQL 叢集 對外的固定 IP ( 記得將DHCP欄位的勾選先移除 ),然後設定固定的 IP 位址以及子網路遮罩(Netmask)。

在「伺服器組態」的地方我們要將所有服務設定成一個 AD 使用者帳號,讓兩台叢集伺服器都擁有一樣的權限,所以我們先在 AD 中建立一個 SQLService 使用者:

然後將新增的使用者帳戶密碼輸入此頁

由於我們已經在先前幾步指派了「叢集磁碟」,所以在這個步驟的「資料目錄」頁籤可以讓你設定預設的資料資料庫所在目錄,預設路徑會以剛剛選取的「第一顆叢集磁碟」作為儲存路徑。

如果你安裝程式沒有事先修改以 Service Pack 1 的版本安裝的話就會遇到以下這個錯誤畫面:

如果你乖乖的一步一步走應該可以順利安裝成功

安裝成功後,可以進入伺服器管理員查看叢集服務是否運作正常,但我發現我昨天安裝的 MSDTC 服務竟然失敗了:

再進一步查看發現 MSDTC 服務的「目前擁有者」變成 SQL-2 了,而且也無法將該服務上線,這時我先手動將此服務移動到 SQL-1 節點,然後就可以上線了。

接著我們也再次檢查 “SQL Server (MSSQLSERVER)” 服務的狀態是否一且正常:

 

呼~ 費勁千辛萬苦終於才把第一台 SQL Server 2008 容錯轉移叢集主機架設好了,但由於篇幅已經很大了,所以剩下的步驟還是留個第 3 篇明日在述!

相關連結

之前遇到安裝失敗的問題與解答相關連結

完整安裝 SQL Server 2008 容錯轉移叢集的步驟文章

  

此文章由 will 發表於 2010/1/18 下午 11:15:28

永久連結 | 評論 (1) | 此文章的RSSRSS comment feed |

分類: SQL Server | 系統管理

標籤: , , , , , ,

收藏:

安裝 SQL Server 2008 容錯轉移叢集心得筆記 – 第 1 篇

SQL Server 2008 容錯轉移叢集架設沒想像這麼簡單,絕對不是照著安裝精靈按下一步、下一步就能夠完成的,而且 SQL Server 2008 RTM 版本根本無法成功架設叢集,害我第一次架設了 6 小時然後在最後一步失敗,最後安裝失敗的 SQL 資料庫實體還移不掉,只好從作業系統全部重新再來一次,這難得的經驗還是要記錄一下,但由於步驟太多,所以會區分幾篇文章。

準備叢集電腦兩台 (可用 Hyper-V 架設)

  • 作業系統必須安裝 Windows Server 2008 企業版 ( 我是安裝 Windows Server 2008 R2 Enterprise )
  • 安裝/設定兩張網路卡
    • Node 1 (第一台電腦)
      • NIC1 IP: 192.168.5.91
      • NIC2 IP: 10.0.0.1
    • Node 2 (第二台電腦)
      • NIC1 IP: 192.168.5.92
      • NIC2 IP: 10.0.0.2
  • 設定電腦名稱並加入網域
    • SQL-1
    • SQL-2

準備共享磁碟 ( 請參考 WSS2008 的 iSCSI Software Target 3.2 設定筆記 進行安裝設定 )

  • 我們透過 iSCSI Target 提供 4 個共享磁碟區
    • 叢集仲裁磁碟 (Quorum Disk),大約給 1GB 即可
    • 分散式交易調節器(MSDTC) 專用磁碟,大約給 1GB 即可
    • SQL Server 系統資料庫專用磁碟,大約給 20GB 即可 ( 測試用途 )
    • SQL Server 使用者資料庫專用磁碟,大約給 20GB 即可( 測試用途 )
  • 建議軟體

將兩台叢集電腦都掛載四個 iSCSI Target 共享磁碟區

  • 仲裁磁碟 (Quorum Disk) 指派 Q: 磁碟代號  ( 通常仲裁磁碟都習慣用 Q: 做為磁碟代號 )
  • MSDTC (分散式交易) 專用磁碟 指派 D: 磁碟代號
  • SQL Server 系統資料庫專用磁碟 指派 E: 磁碟代號
  • SQL Server 使用者資料庫專用磁碟 指派 F: 磁碟代號

到目前為止兩台叢集電腦的設定都是一模一樣的,設定完成後的磁碟配置圖示如下:

image

新增「應用程式伺服器」角色

在安裝「應用程式伺服器」的「選取角色服務」時必須選取「連入遠端交易」與「連出遠端交易」

 

新增「容錯轉移叢集」功能

進入「容錯移轉叢集」功能,並驗證所有設定

將所有需要加入叢集的主機新增進來驗證

建議執行所有測試 ( 注意:你不需要兩台同時執行測試,只要在其中壹台執行測試即可 )

如果都沒有問題,就可以準備開始建立叢集了。我們直接在第一台建立叢集即可:

 

設定「叢集電腦名稱」與「管理叢集用的 IP 位址」

我們在第一台建立完成之後,可以直接到第二台主機查看會發現叢集也一併設定完成,而且我們之前準備的 4 個共享磁碟也會全部被掛載成「叢集磁碟」,其中 Q: 會自動被使用成 仲裁磁碟 (Quorum Disk)

而且 2 個叢集網路中也會自動將 10.0.0.xx 開頭的網路變成「內部」專用的專屬介面,用來偵測心跳之用

 

咱們今天就先到這,這回先把小菜給吃了,下回開始吃點重口味的:安裝 SQL Server 容錯移轉叢集!

相關連結

之前遇到安裝失敗的問題與解答相關連結

完整安裝 SQL Server 2008 容錯轉移叢集的步驟文章

  

此文章由 will 發表於 2010/1/17 下午 08:25:58

永久連結 | 評論 (1) | 此文章的RSSRSS comment feed |

分類: SQL Server | 系統管理

標籤: , , , , , ,

收藏:

介紹好網站:從 SQL Developer Support 發現常見開發技巧

我有訂閱 MSDN Blogs RSS 的習慣,但這個 RSS 每天都差不多會有幾十篇到上百篇的文章在這裡出現,我當然無法全部看完,所以這個 RSS 對我來說純粹是一個「隨緣」的 RSS 訂閱,但三不五時就會發現一些不錯的部落格與文章,像是今天要介紹的 Common tips and tricks from a SQL Developer Support perspective 部落格就是一例,裡面有好多跟 SQL Server 開發相關的技巧,真的挖到寶了。

這些從 Support Team 寫出來的文章都是很恐怖的,我跟微軟技術支援中心的人交涉過幾次,他們的專業度都很高,那種能做超過五年的工程師基本上都不太像人,經常讓我佩服的五體投地。:-p

雖然這裡文章不多,但對細節都有很深入的探討,而且很實用,有好幾篇文章看到時都有種相見恨晚的感覺,像我們每天都在處理跟資料有關的應用,有時後光是當 茶包射手(Trouble Shooter) 是不夠的,多學一些東西對日常的開發工作有很大的幫助。

以下列出一些我看過覺得不錯的文章:

  

此文章由 will 發表於 2009/12/14 下午 09:43:58

永久連結 | 評論 (1) | 此文章的RSSRSS comment feed |

分類: .Net | SQL Server

標籤: ,

收藏:

提升 SQL SERVER 執行效率的小技巧:為 SQL 快取暖身

SQL Server 的效能調校是一門很大的學問,先不論 T-SQL 寫的好與壞如何衝擊效能,我們先假設 T-SQL 已經全部都調到最佳狀態(或是根本無法調整),在這種情境下如何再提升執行效能呢,答案還是非常多,例如:調整磁碟效能、加記憶體、….等,但我今天想特別強調的是 快取 (Caching)。今天我來分享一個非常實用且簡單的伎倆,讓你的應用程式一瞬間即可加快查詢速度。

SQL Server 使用三種不同的檔案儲存你的資料:

  1. MDF ( 主要資料檔 ):包括表格、索引、以及資料
  2. NDF ( 次要資料檔 ):跟 MDF 一樣,只是放在不同的檔案群組而已
  3. LDF ( 交易記錄檔 ):儲存所有資料檔的歷史變更紀錄

SQL Server 寫入資料時 (INSERT, UPDATE, DELETE),至少會先確保資料有寫入交易記錄檔才會進行下一步動作,而寫入交易記錄檔這一段幾乎是無法最佳化的,考驗的就是你的磁碟 IO 的效能,由於交易記錄檔的寫入幾乎是「循序的」,所以磁碟 IO 的效能數據 (IOps) 要看的是 循序寫入(Sequential WRITE) 的速度,所以一般都建議使用獨立的硬碟來放置交易記錄檔,以確保資料寫入的效能。

SQL Server 讀取資料時 (SELECT),就完全依賴 資料檔 (MDF, NDF) 的讀取速度,由於資料寫入資料檔時通常不是循序的,所以資料通常非常亂且透過內部索引指標指來指去的,所以 SQL Server 在讀取資料時幾乎都是「隨機存取」,所以磁碟 IO 的效能數據 (IOps) 要看的是 隨機讀取 (Random READ) 的速度,數據越高就代表讀取效能就越好。

由於 SQL Server 讀取資料檔的效能較差,所以會盡可能的使用記憶體快取所有從資料檔讀出來的資料,以加速資料查詢的速度,一般來說 SQL Server 伺服器的記憶體的確是多多益善 (但 SQL Express 有記憶體使用限制),而且就單純的資料查詢來講,所有已經被載入到記憶體中的資料,SQL Server 都不會再去資料檔抓取資料,此時的 SQL Server 讀取速度最快,所以我們就打算用這個特性來優化資料庫的查詢效能。

所以當 SQL Server 主機重開機或是網站剛啟動且資料庫尚未被讀取任何資料時,此時的 SQL Server 資料庫的查詢效能最差,這個時候我們就可以透過 預儲程序(Stored Prodedure) 搭配 SELECT COUNT(*) 將所有你想要預先快取的資料表讀取並載入 SQL 記憶體快取 中。

當你的資料庫不太大且記憶體大到用不完的情況下,很適合執行以下 T-SQL 將特定資料庫中的所有資料表快取:

DECLARE @obj sysname , @sch sysname
DECLARE @owner varchar(100)
DECLARE @sql varchar(1000) 

DECLARE tblcur INSENSITIVE CURSOR FOR
    SELECT schema_name(uid) as schema_name, object_name(id) as obj_name 
    FROM sysobjects o WHERE OBJECTPROPERTY(o.id, N'IsUserTable') = 1 

OPEN tblcur 

WHILE 1 = 1
BEGIN
    FETCH tblcur INTO @sch, @obj
    IF @@fetch_status <0 BREAK 

    SET @sql = 'SELECT COUNT(*) FROM [' + @sch + '].[' + @obj + ']'
    EXEC(@sql)
END 

DEALLOCATE tblcur

如果你的 SQL Server 資料非常多,不建議一開始就將所有資料快取,因為如果記憶體不夠大,後來讀取的資料會把之前已經快取過的清除,如果快取到不常用的歷史資料表,反而踢掉常用的資料表時,這樣就沒有什麼效果了,所以建議的方式是將最常用的資料表或篩選特定條件下的資料快取起來就好。

如果你想查詢每一個資料表到底用了多少空間,可以利用 sp_spaceused 查詢各表格所使用的磁碟空間:

DECLARE @obj sysname , @sch sysname
DECLARE @owner varchar(100)
DECLARE @sql varchar(1000) 

DECLARE tblcur INSENSITIVE CURSOR FOR
    SELECT schema_name(uid) as schema_name, object_name(id) as obj_name 
    FROM sysobjects o WHERE OBJECTPROPERTY(o.id, N'IsUserTable') = 1 

OPEN tblcur 

WHILE 1 = 1
BEGIN
    FETCH tblcur INTO @sch, @obj
    IF @@fetch_status <0 BREAK 

    SET @sql = 'EXEC sp_spaceused N''[' + @sch + '].[' + @obj + ']'''
    EXEC(@sql)
END 

DEALLOCATE tblcur

利用 sp_spaceused 查詢各表格所使用的磁碟空間

若使用 Management Studio 也可使用內建的報表功能直接查詢出【依資料表的磁碟使用量】,這個介面就漂亮多啦!

使用 Management Studio 也可使用內建的報表功能直接查詢出【依資料表的磁碟使用量】

使用 Management Studio 也可使用內建的報表功能直接查詢出【依資料表的磁碟使用量】

透過這個技巧就是當資料尚未完全讀取到這些常用表格時預先讀入 SQL Server 的快取記憶體中,以提升這些常用表格的查詢效能,簡單、有效!

  

此文章由 will 發表於 2009/11/25 下午 11:41:21

永久連結 | 評論 (3) | 此文章的RSSRSS comment feed |

分類: SQL Server | Tips

標籤: ,

收藏: