2013年1月30日 星期三

SQL Server 容錯叢集 vs Oracle RAC

        我想許多在評估SQL Server與Oracle的使用者,大多都會問為何SQL Server無法像Oracle一樣推出一個像RAC機制的Database Service,藉以達到Load Balance,其實這個在我之前的文章也有解釋過,但因為還是有許多的客戶與使用者有問到,所以我特別在這篇中再重新整理與說明,並希望給大家多一些參考。

PS:由於本人並未完全熟悉Oracle的部份,所以就技術底層的比較,本篇並不打算真正比較,以免成為眾所之的,也請大家如有認為有不妥的地方,再請提出討論,謝謝。


先前文章:
SQL Server 負載平衡架構介紹(Load Balancing)
http://caryhsu.blogspot.tw/2011/03/sql-server-load-balancing.html


1、成本比較:
其實在Oracle RAC的部份,由於我接觸的不多,所以不方便多進行著墨,但在Oracle官方宣稱RAC可以降低總成本,這點是我認為比較有值得探討的部份,因為光是初期的建置成本就已非常的高,這也是讓使用人望之退步的部份,想當初在前公司的時候,當時公司的資訊長找我與幾位Oracle的顧問進行開會討論,當實際討論到我方預算時(包含軟硬體),對方表情的變化真的是讓我印像深刻(京劇變臉),坦白說我們之前也有作功課,所以不可能亂開價格,但想不到我們的預算還是與Oracle RAC的費用有所差距,後來對方就直接建議我們建置單機的Oralce環境比較好,所以後來我們就多方考量後,選擇了SQL Server,但坦白說SQL Server也真的沒有讓我們失望。


1-1 維護合約費用:
Oracle的維護合約必須每年都要購買,如果有一年沒有買的話,就必須補齊之前未買的年份,假設你的主機在第三年的時候發生問題,需要請原廠協助時,你就必須也同時補買第一、二年的合約,此時才可以進行協助。

1-2 授權費用:
下列是分別兩家的售價表,可以看出兩者之間價格的差異。
Oracle的報價:


SQL Server報價:




總體簡易報價比較:
Component SQL Server Solution 2012 Oracle RAC Solution 11g
Core Database USD$115K USD$380K
HA option Included USD$184K
Total USD$115K USD$564K


Oracle Price List:http://www.oracle.com/us/corporate/pricing/technology-price-list-070617.pdf
Microsoft License Advisor:http://mla.microsoft.com/default.aspx


2、技術服務:
Oracle與SQL Server的技術服務在台灣都有當地的服務,但在遇到台灣無法解決的問題需開發部或其他進一步協助時,SQL Server還是有亞太中心的服務,在語系與時間上比較能配合,但如果是Oracle的話,你就只能配合國外的工程師,另外你也要有好的英文溝通能力才可以。


3、平台比較
Oracle可以配置在許多不同的作業系統上,如Linux、Windows與Unix上,但我認為這個部份取決你使用的平台,如果在Linux與Unix上,當然是Oracle最好了,但是如果是Windows上,雖然Oracle也可以支援,但我認為在Windows上,Oracle一定不會跑的比SQL Server好。


4、效能比較
Oracle RAC的效能主要是提升CPU與機器的使用率,藉以發揮機器效用的最大化,但坦白說大部份的資料庫效能皆在於Memory與Disk,CPU很少使用到滿載的情況,而在Oracle RAC中也是使用到同一個SAN Storage,這個也是與SQL Server的情況相同。

另外SQL Server最常被問題的就是在Cluster的架構下,只能是A/P Mode,也就是只有一台可以進行服務,而另一台則是在 Standby的狀況下,這樣對許多企業主來說,另外一台實在非常的可惜,其實這時候可以考慮透過 A/A Mode的架構,藉以讓兩台SQL Server都可以同時進行服務,詳細的部份,可以參考我先前的文章。

參考文章:
SQL Server - 雙主動模式叢集環境架設
http://caryhsu.blogspot.tw/2012/01/sql-server.html


5、高可用性復原模式比較

在SQL Server 2012上由於多加了AlwaysOn,所以可以只針對單一的資料庫進行HA,而且在硬體的選擇上也更多元化,建議有興趣的使用者可以參考我的AlwaysOn的相關文章。

High Availability Recovery Time:
Technology Recovery Time (approx.)
Oracle RAC 30 – 60 seconds*
SQL Server 2012 AlwaysOn Availability Groups <45 seconds
SQL Server 2012 Failover Cluster Seconds to minutes



參考文章:
隱藏在Oracle 真實應用集群 (RAC) 市場訊息背後的真實
http://www.microsoft.com/china/sql/prodinfo/compare/oracle/oracle-rac.mspx
Real World Oracle Real Application Cluster challenges
http://www.linxcel.co.uk/Whitepapers/Real-World%20Challenges%20for%20Oracle%20RAC%20Implementation-Issue%201.pdf
Why Oracle RAC Might Not Be Suitable For You A Competitive Review of Real Application Clusters (RAC)
http://download.microsoft.com/download/C/D/C/CDCA80B2-FD63-49C5-AC66-8E3A179E31F7/SQL_Server_2012_Why_Oracle_RAC_Might_Not_Be_Suitable_For_You_Apr2012.pdf


關鍵字:SQL ServerOracleRACOracle Real Application ClustersCost容錯叢集Cluster

2013年1月28日 星期一

SQL Server - 如何在資料庫鏡像上啟用快照集隔離

       在前面的文章中有介紹到如何透過快照集隔離 (Snapshot Isolation Level) 來降低鎖定的問題,但如果要在有設定Database Mirroring的資料庫上進行設定時,就會遇到下列的錯誤訊息。


先前文章:
如何使用快照集隔離來降低鎖定問題的發生
http://caryhsu.blogspot.tw/2012/01/blog-post_31.html


錯誤訊息:
訊息 1468,層級 16,狀態 4,行 4
無法在資料庫 "Northwind" 上執行作業,因為它牽涉到資料庫鏡像工作階段。
訊息 5069,層級 16,狀態 1,行 4
ALTER DATABASE 陳述式失敗。


這個問題主要是由於Principal與Mirror之間需要進行同步確認,所以會保持連線,但是進行快照集隔離時需要變更資料庫的設定,所以不能有其他的使用者連線。

其實這個問題,解決方法上很簡單,只能透過 [移除鏡像] 的方式進行即可,但是這時候大家可能會有一個疑問,那就是一定要移除嗎?可否透過暫停Database Mirroring的方式,但可惜的是,這個方法是不行的,只能透過移除的方式,當設定好快照集隔離後再重新設定Database Mirroring即可。



參考連結:
How to Enable RCSI for a Database with Database Mirroring
http://blogs.msdn.com/b/sqlcat/archive/2010/03/16/how-to-enable-rcsi-for-a-database-with-database-mirroring.aspx


關鍵字:SQL ServerDatabase MirroringSnapshot Isolation LevelALTER DATABASE

2013年1月27日 星期日

SQL Server - 如何取回最高權限帳號

        最近接到一個客戶的問題,因為客戶公司策略的關係,所以本身的登入帳號只有最小的權限,但是他們忘記了最高權限 [SysAdmin] 的密碼,所以需進行管理時無法有較高的權限登入,而在SQL Server 2008之後由於不會將 [BUILTIN\Administrators] 所以就算Domain Admin也無法登入,所以下列我們就來介紹如何進行解決。

1、登入後發現由於權限不足,所以也只有看到 sa 的帳號,但可惜 sa 的帳號也被禁止登入。


2、開始 -> 程式集 -> Microsoft SQL Server 2012 -> 組態工具 -> SQL Server 組態管理工具

3、點選 SQL Server (Instance Name) -> 內容 -> 啟動參數,此時請將 -m 的參數加入,然後再請將SQL Server的服務重新啟動。

PS:上述的動作主要是將SQL Server切換成單人管理模式,此時請勿讓其他的應用程式或使用者連線到SQL Server,所以請特別注意。


4、請開啟一個DOS Command視窗輸入下列的指令

4-1 透過 sqlcmd 連線到SQL Server
sqlcmd -S servername -E
4-2 指定一個可以登入 Window 的帳號
create login [domain\user name] from windows;
go
PS:此步驟新增的帳號請確認此帳號已有存在Windows中。

4-3 新增一個SQL Server的帳號
create login [user name] with password = 'password';
go

4-4 賦與 SysAdmin 權限到指定的帳號上。
exec sp_addsrvrolemember 'user name', 'sysadmin';
go




5、此時再請將步驟三中新增的啟動參數移除後再重新開機,你就可以發現設定的帳號已有最高的權限了。



參考連結:
Database Engine Service Startup Options
http://msdn.microsoft.com/en-us/library/ms190737.aspx
How to: Use the Dedicated Administrator Connection with SQL Server Management Studio
http://msdn.microsoft.com/en-us/library/ms178068(v=sql.105).aspx


關鍵字:DACDedicated Administrator ConnectionLost all Administrator Account in SQL ServerSingle User Mode