體系結構
ORACLE的文件體系結構為:
數據文件 .DBF (真實數據)
日誌文件 .RDO
控制文件 .CTL
參數文件 .ORA
SQL SERVER的文件體系結構為:
.MDF (數據字典)
.NDF (數據文件)
.LDF (日誌文件)
ORACLE存儲結構:
在ORACLE裏有兩個塊參數PCTFREE(填充因子)和PCTUSED(復用因子),可控制塊確定塊本身何時有,何時沒有足夠的空間接受新信息(對塊的存儲情況的分析機制)
這樣可降低數據行連接與行遷移的可能性。塊的大小可設置(OLTP塊和DSS塊)
在ORACLE中,將連續的塊組成區,可動態分配區(區的分配可以是等額的也可以是自增長的)可減少空間分配次數
在ORACLEl裏表可以分為多個段,段由多個區組成,每個段可指定分配在哪個表空間裏(段的類型分為:數據段、索引段、回滾段、臨時段、CASH段。ORACLE裏還可對表進行分區,可按照用戶定義的業務規則、條件或規範,物理的分開磁盤上的數據。
這樣大大降低了磁盤爭用的可能性。
ORACLE有七個基本表空間:
SYSTEM表空間(存放數據字典和數據管理自身所需的信息)
RBS回滾表空間
TEMP臨時表空間
TOOLS交互式表空間
USERS用戶默認表空間
INDX索引表空間
DBSYS福數據表空間
不同的數據分別放在不同的表空間(數據字典與真實數據分開存放),在ORACLE裏基表(存儲系統參數信息)是加密存儲,任何人都無法訪問。只能通過用戶可視視圖查看。
SQL SERVER 存儲結構
以頁為最小分配單位,每個頁為8K(不可控制,缺乏對頁的存儲情況的分析機制),
可將8個連續的頁的組成壹個‘擴展’,以進壹步減少分配時所耗用的資源。(分配缺乏靈活性),在SQL SERVER裏數據以表的方式存放,而表是存放在數據庫裏。
SQL SERVER有五個基本數據庫:
master(數據字典)
mode(存放樣版)
tempdb(臨時數據庫)
msdb(存放調度信息和日誌信息)
pubs(示例數據庫)
真實數據與數據字典存放在壹起。對系統參數信息無安全機制。
ORACLE登入管理:
SYSTEM/MANAGER (初始帳戶)
SYS/CHANGE_ON_NSTALL
INSTALL/ORACLE(安裝帳戶)
SCOTT/TIGER(示例數據庫,測試用)
在ORACLE裏默認只有三個系統用戶,ORACLE是通過用戶登入。
SQL SERVER登入管理:
SQL SERVER身份驗證
WINDOWS 身份驗證
在SQL SERVER裏是通過WINDOWS用戶帳戶或是用SQL SERVER身份驗證連接數據庫的。
SQL不是壹種語言,而是對ORACLE數據庫傳輸指令的壹種方式。
SQL中NULL既不是字符也不是數字,它是缺省數據。ORACLE提供了NVL函數來解決。
ORACLE中的字符串連接為 string1‖string2 ,SQL中為string1+string2.
集合操作:在SQL中只有UNION(並操作),ORACLE中包含MINUS(差操作)、
INTERECT(交操作)、UNION(並操作)。
索引:SQL的索引分為聚集索引和非聚集索引,還包括全文索引;
ORACLE的索引包括:B+樹索引,Bitmap位圖索引,函數索引,反序索引,
主鍵索引,散列索引,本地索引。
ORACLE的數據類型比較復雜,有基本數據類型,衍生型,列對象型,表對象型,結構體型;SQL中的數據比較簡單,只有壹些簡單的基本數據類型無法提供事務操作。
在SQL中如果壹個事務從開始執行到結束時了錯了,它就會回滾到開始之前;
在ORACLE中它采用的是定點回滾,就是該事務函數化和精確錯誤定位,用savepoint標記保存點,用Rollback標記回滾錯誤的保存點。
在SQL中循環只有WHILE壹種這用起來不靈活,在ORACLE中有多種循環(LOOP循環、WHILE循環、FOR循環)。
在SQL中遊標的使用比較復雜,不能同時打開壹個以上的遊標,因為它只有壹個全局變量@@Fast_statues而且聲明遊標也麻煩,關閉遊標時也不清除內存的;ORACLE中遊標是以提高速度全部統壹的單項遊標,可以允許多用戶異步讀取,而且聲明比較簡單,就壹句declare cursor遊標名 is select 語句就可以了。
容錯機制:SQL中的錯誤機制比較復雜,沒有提供錯誤描述;ORACLE中容錯類型有三種,壹個是預定義錯誤,壹個是非預定義錯誤,壹個是用戶自定義,其中在自定義錯誤中它有兩個是在SQL中不有的,那就是SQLCODE 錯誤號、SQLERRM錯誤描述。
文件體系結構:SQL中有.MDF(主要數據文件)、.NDF(擴展文件,可以有多個)、
.LDF(日誌文件,可以有多個,存放在聯機重做日誌數據,這裏的日誌文件有壹個缺點就是如果日誌文件已填小巧玲瓏的話,SQL將自動停止運行並等待人工幹預,所以要經常監控日誌的情況保證系統的穩定運行)。ORACLE中有.DBF(主要數據文件)、.RDO(日誌文件,用來做災難性的數據備份)、.CTL(控制文件,將數據庫的物理文件映射到了數據字典中的邏輯表空間和連機重做日誌文件上去,確保數據的壹致性)、.ORA(參數文件)。
. SQL只能是本機備份本機的數據庫,無法聯機備份,而且備份壓縮很低,占用了大量空間;ORACLE提供了7種備份機制,具有聯機備份功能,有誌門的備份機子。
Oracle的日誌默認有3個,先寫入1號日誌,滿了後再寫入2號日誌,2號滿了再寫入3號日誌,3號滿了後Oracle將自動備分1號日誌的內容,然後清空後寫入新的日誌信息,且Oracle的日誌有多路復用功能,我們可以為日誌創建多個鏡像,把相同的日誌信息同時寫入多個日誌文件中,這樣可以防止磁盤損壞造成的數據丟失。
SQL Server對每個數據庫只能分配壹個日誌文件。且當日誌填滿後,日誌將停止工作,等待人工幹預,而無法自動重用。
Oracle的控制文件記錄了數據庫文件的物理位置和有效性,在每次打開Oracle系統都將自動對數據進行驗證,查看其有效性,防止數據的丟失,這體現了Oracle對數據管理的嚴密性。
SQL Server無此安全機制,只用在使用到了數據庫的信息後,系統才去查找數據是否存在。
Oracle的參數文件init.ora是可調的,既我們可以根據數據庫的規模調整Oracle對系統資源的使用情況,以達到最合理的資源分配,讓Oracle達到最佳的性能。
SQL Server的配置參數是內定的不可調整,它對系統資源的分配是固定的,不受擁護控制,因此無法同時處理大量用戶的需求,這限制了它只能作為中,小型數據庫。
Oracle以塊為最小存儲單位,以區為單位分配空間,用戶可以根據需要自己定義塊的大小,且區可以按等額或遞增進行分配,這可以大大減少系統的I/O操作提高數據庫的性能。
SQL Server中以頁為單位或使用擴展類型以8頁為壹單位進行空間分配而無法人工幹預,當遇到頻繁存儲或大數據量存儲時,系統將頻繁進行I/O操作使工作效率低下。
Oracle中的SQL語句書寫規範且提供了完整的函數和數據類型。Oracle提供了健全的錯誤機制,用戶可以輕松的獲得錯誤位置和錯誤原因而加以修改。用戶還可以自己定義所須的錯誤類型,用以檢查邏輯錯誤。Oracle中對數據類型的轉換和遊標的定義也十分方便。因此,我們對代碼的書寫和維護也比SQL Server方便許多。
SQL Server使用類C語言,不易維護和查看代碼。SQL Server包含的數據類型太少,無法定義結構體,數組,對象。SQL Server無法定義流程機制,類型轉換也極不方便,SQL Server中對遊標定義十分復雜,且當用戶定義的多個遊標同時打開時系統卻只有壹個遊標變量,這是SQL SERVER中壹個嚴重的缺陷。
ORACLE中用戶可以根據數據需要在創建塊時定義填充因子(空閑空間的百分比)和復用因子(當塊的存儲數據所占的空間下降到這個百分比之下時,塊才重新標記為可用)。用戶可以根據記錄變化頻率和數據量的大小設置合適的填充因子和空閑因子。
SQL SERVER只有填充因子,而它的定義與ORACLE剛好相反,它定義的是剩余可用空間的百分比。而SQL SERVER中沒有復用因子,當頁中數據低於填充因子,但剩余的空間已經不可能再插入新的數據,但頁還是標記為可用的,當系統要寫入新數據都要訪問這個頁而浪費時間,這種頁稱為廢頁,將使系統插入新數據時浪費大量時間查找可用的頁。
ORACLE在創建表時用戶可以精確定義數據存放的表空間,甚至可以把壹張表分開存放在多個表空間中,這樣可以將數據量龐大的表按某些字段分開存放,這將給查詢帶來極高的效率。