ORACLE(甲骨文)與微軟公司出品的SQL Server是目前市場上主流應(yīng)用較多的商業(yè)數(shù)據(jù)庫產(chǎn)品,本人在電信公司計費部門工作過,對此兩個數(shù)據(jù)庫有較為深刻的體會及認識,下面談?wù)剛€人使用感受。
我們先不談理論,先談“公司”。Oracle是甲骨文公司出品,甲骨文是全球第二大軟件公司(僅次于微軟)。SQL Server為微軟公司旗下windows產(chǎn)品。首先第一個區(qū)別就是Microsoft SQL Server從屬于Windows大家族中的一員,當然只支持在微軟系統(tǒng)上運行(XP,NT2000等),而ORACLE支持多種不同的操作系統(tǒng)平臺,包括Windows(32位和64位),另外還有支持Linux和不同分支的Unix(Solaris、HP-UX、AIX等等)。從這個層面講,ORACLE屬于跨平臺產(chǎn)品(支持JAVA),使用更廣泛。
從Schema(模式,架構(gòu))上講,兩者都是遵循“數(shù)據(jù)庫三級模式結(jié)構(gòu)/二級映像”模式構(gòu)建,大體相同。 schema為數(shù)據(jù)庫對象的集合。進入Oralce或者SQL Server里面,我們在企業(yè)管理器下,看到的許多類似用戶名的節(jié)點,這些類似用戶名的節(jié)點其實就是一個schema,schema里面包含了各種對象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。一個用戶一般對應(yīng)一個schema,該用戶的schema名等于用戶名,并作為該用戶缺省schema。這也就是我們在企業(yè)管理器的方案下看到schema名都為數(shù)據(jù)庫用戶名的原因。從直觀上來講,我們可以稱schema為user的別名,可以不恰當?shù)卣f,schema就是user。
SQL Server有兩種數(shù)據(jù)庫:系統(tǒng)數(shù)據(jù)庫(system databases)和用戶數(shù)據(jù)庫(user databases)。在一個SQL Server實例安裝完成之后,將會自動創(chuàng)建5個系統(tǒng)數(shù)據(jù)庫:master, model, msdb, tempdb和resource。如果一個機器上面安裝了多個SQL Server實例時,每個實例都會有自己單獨的一套系統(tǒng)數(shù)據(jù)庫。SQL Server實例指:一個包含了操作系統(tǒng)文件、內(nèi)存結(jié)構(gòu)、后臺進程以及注冊表信息的獨立的應(yīng)用服務(wù)。(打開控制面板—服務(wù)與應(yīng)用程序,便可見到各種應(yīng)有服務(wù))。
Oracle則不太一樣:當它啟動實例時,會啟系統(tǒng)全局內(nèi)存:SGA(System Global Area)——被分為數(shù)個不同的結(jié)構(gòu),這些分配的內(nèi)存空間和后臺進程組合,就叫實例。而且,我們還沒有建立數(shù)據(jù)庫(表空間)。Oracle實例可以在不打開數(shù)據(jù)庫的情況下運行——這是與SQL Server數(shù)據(jù)庫最大的不同:SQL Server實例是不能夠離開系統(tǒng)數(shù)據(jù)庫而運行的。一個Oracle數(shù)據(jù)庫(表空間)則最少需要3個系統(tǒng)表空間才能正常操作,它們是:SYSTEM, SYSAUX和TEMP。在Oracle中,SYSTEM表空間等價于master數(shù)據(jù)庫,SYSTEM表空間包含了數(shù)據(jù)字典(data dictionary),也就是關(guān)于Oracle自身的元數(shù)據(jù)(metadata),這里的數(shù)據(jù)字典可以和SQL Server中的resource數(shù)據(jù)庫進行類比。
下面說下實際使用感受對比。從性能來講,Oracle比SQL Server好得多:Oracle的參數(shù)文件init.ora是可調(diào)的,既我們可以根據(jù)數(shù)據(jù)庫的規(guī)模調(diào)整Oracle對系統(tǒng)資源的使用情況,以達到最合理的資源分配,讓Oracle達到最佳的性能。因此Oracle的性能優(yōu)勢體現(xiàn)在它的多用戶上,比較適用于訪問量和并發(fā)用戶數(shù)大的大型應(yīng)用系統(tǒng)上。SQL Server的配置參數(shù)是內(nèi)定的不可調(diào)整,它對系統(tǒng)資源的分配是固定的,無法人工控制,因此無法同時處理大量用戶的需求,這限制了它只能作為中,小型數(shù)據(jù)庫。
從安全性來講,Oracle的數(shù)據(jù)字典和真實數(shù)據(jù)是分開存放的,不同的數(shù)據(jù)分別放在不同的表空間,而且基表(存儲系統(tǒng)參數(shù)信息)是加密存儲,任何人都無法訪問,只能通過用戶可視視圖查看。安全性高;Oracle的控制文件記錄了數(shù)據(jù)庫文件的物理位置和有效性,在每次打開Oracle系統(tǒng)都將自動對數(shù)據(jù)進行驗證,查看其有效性,防止數(shù)據(jù)的丟失。在創(chuàng)建表時用戶可以精確定義數(shù)據(jù)存放的表空間,甚至可以把一張表分開存放在多個表空間中,這樣可以將數(shù)據(jù)量龐大的表按某些字段分開存放,這將給查詢帶來極高的效率。而SQL Server里面,真實數(shù)據(jù)與數(shù)據(jù)字典存放在一起,對系統(tǒng)參數(shù)信息無任何安全機制。而且,用戶可以通過WINDOWS用戶帳戶和SQL Server身份驗證用戶連接數(shù)據(jù)庫;這在Oracle里面是不允許的:ORACLE只能通過注冊用戶登入。
當然,一分價錢一分貨,Oracle的花費相對較高,而且Oracle語法相對復雜許多(Oracle DBA數(shù)據(jù)庫管理員非常吃香)。SQL Server的初如花費比較少,而且Microsoft提供免費的SQL Server工具軟件。因此價格會比Oracle低很多。因此,Oracle數(shù)據(jù)庫主要運行大型、重要、安全性要求高、數(shù)據(jù)挖掘領(lǐng)域,如電信計費系統(tǒng)、銀行、證券交易系統(tǒng)等。SQL Server則應(yīng)用在中小型企業(yè),簡單維護的場合。當然,近些年來SQL Server發(fā)展很快,功能逐漸強大, 2008版本已經(jīng)逐漸在特大型企業(yè)數(shù)據(jù)處理中,發(fā)展勢頭迅猛。