1. Oracle為用戶端開啟會話有兩種方式:共用服務和專用服務。在專用服務情況下,監聽器為串連請求建立新進程(Unix環境下是Process,Windows下我想應該是Thread吧);共用服務情況下,監聽器將客戶請求交給Dispatcher,由Dispatcher安排多客戶的作業。SQL Server在預設情況下自動為用戶端串連建立線程,當有非常多的客戶串連時,SQL Server可以使用線程池管理多會話,這類似於Oracle的共用服務。
2. Oracle的記憶體管理分三塊:SGA、PGA、UGA;在MSDN中並沒有提及怎樣控制SQL Server的記憶體配置,只是提到SQL Server的虛擬位址空間分成緩衝池佔用空間和其餘空間,且SQL Server有動態記憶體管理機制。
3. Oracle的執行個體一次只能管理一個資料庫,資料庫在叢集環境下可由多個執行個體管理。而SQL Server單個執行個體一次能管理多個資料庫。Oracle資料庫儲存方式有OS檔案、裸分區、ASM等,SQL Server的資料庫儲存只能是系統檔案。
4. Oracle資料庫包含資料表空間,資料表空間可以使用多個檔案儲存體資料,資料表空間就類似於SQL Server中的檔案組。區是物理連續上串連的儲存空間,區中包括最小I/O單位——塊(Oracle)或頁(SQL Server)。但SQL Server頁大小是8KB,區包含8個頁;Oracle不同資料表空間可以有不同的塊大小,區的大小和保護塊的數量也不固定。SQL Server的頁由一個資料庫物件獨佔,物理儲存的資料庫物件只有索引和表兩種;而Oracle中的段由資料庫物件定義,且其儲存的對象複雜得多,有表段、索引段、復原段、臨時段等等,所以在一個聚簇段中的塊可能被多個表使用。
5. Oracle使用FREELIST管理可以塊,通過設定PCTFREE和PCTUSED控制快在何種條件下可用;SQL Server使用GAM、SGAN記錄可用頁,使用PFS跟蹤頁的使用狀況。
6. SQL Server的表有兩種方式組織資料的實體儲存體,一種是無序的堆組織,這Oracle是類似的;另一種是由聚簇索引決定資料排序方式,Oracle也可有索引組織方式,但不同於SQL Server,它依鍵排序資料,不增加一個索引用於聚簇,不會有額外的開銷。此外,Oracle的聚簇表是多表格儲存體在相同段上,像SQL Server的混合區可以包含不同表的頁,但Oracle的聚簇表是一組含有相同列的表可以儲存在相同的塊中,聚簇表的可以有索引或Hash方式組織資料。
7. Oracle建立表分區會建立不同的段,SQL Server 2005通過資料分割配置將不同分區儲存到不同的檔案組。Oracle有三種分區方法,SQL Server使用分區函數。Oracle 11g中還將加入時段分區、系統磁碟分割等。
8. SQL Server的索引只有B-樹,Oracle有B-樹、位元影像、函數、位元影像串連和可擴充索引。
9. Oracle的重做日誌與SQL Server的交易記錄都使用迴圈寫入策略,Oracle使用多個重做記錄檔,SQL Server也可使用多個記錄檔,但將記錄檔分成多個虛擬日誌,以虛擬日誌為單位進行迴圈。