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也可使用多個日誌文件,但將日誌文件分成多個虛擬日誌,以虛擬日誌爲單位進行循環。
=================================================================================
SQL SERVER2000與ORACLE的比較:
1、數據庫*作平臺的開放性
Oracle能在所有主要的平臺(其中包括Windows)上運行,並且完全支持所有的工業標準,所以,客戶可以利用很多種第三方應用程序、工具、網關和管理實用程序。Oracle採用開放策略,它使得客戶可以選擇一種最適合他們特定需要的解決方案。SQL Server只在Windows上運行,Microsoft這種專有策略的目標是將客戶鎖定到Windows環境中。由於SQL Server緊密的捆綁在Windows平臺上,所以,只有隨着Windows*作系統可靠性、開放性以及性能的改善,SQL Server的開放性和可靠性才能進一步提高。
2、性能價格比
選擇數據庫產品,首先要考慮數據庫產品的性能,同時還關心究竟要花多少錢才能建立並運行一套Oracle或SQL Server數據庫系統。這些錢不僅包含最初購置軟件、硬件的費用,還包含了維護、培訓費用。兩家公司都宣稱自己的性能價格比好,實際上,Oracle公司側重於產品的可靠性和實用性方面,而Microsoft公司更側重於產品價格方面。由於*作系統的原因,普遍認爲SQL Server的可靠性較差,而另一方面Oracle的初始花費則相對較高,尤其是在考慮工具軟件的因素時,與SQL Server免費提供工具軟件相比,Oracle更顯價格不菲。所以,在考慮該使用什麼軟件時,要根據自己的業務需求和基礎設施來綜合考慮。
3、工具軟件
使數據庫易於安裝、使用和管理--組合在一起稱爲"*作簡單"--是一個減少成本的關鍵因素。Microsoft產品具有易於使用的美譽,在很多方面也確實如此,SQL Server就得益於讓人感到使用起來比較容易。SQL Server企業管理器(Enterprise Manager)是SQL Server軟件的一個組成部分,給用戶提供了一個集成的管理控制檯來集中管理多個服務器。Oracle也由自己的企業管理器,比sql較差,它的性能改善有待完善,但PLSQL Developer管理軟件很多方面超過了SQL Server企業管理器,但需另外購買。SQL
Server與Windows*作系統無縫集成, Microsoft公司總是儘可能將所有的軟件功能捆紮在一起,除非用戶還需要其他用處的*作軟件包,否則功能已足夠使用了。而Oracle公司將工具軟件交給第三方軟件商來開發,花費高,尤其在別人的軟件免費提供的情況下,這種問題就更顯突出。
4、數據庫性能
那種數據庫更快?這其實是一個很難回答的問題,因爲存在許多不定因素,包括處理類型、數據分佈以及硬件基礎設施等。一些經驗表明在長時間運行大量事務方面Oracle數據庫要優於SQL Server,但在集羣技術等方面,SQL Server比Oracle數據庫要好一些。
各行業是出於何種考慮來選擇數據庫的呢?是由它的特點來決定的。這幾款主流數據庫的特點:SQL Server 2000是一個具備完全Web支持的數據庫產品,提供了可擴展標記語言(XML)核心支持以及Internet上和防火牆外進行查詢的能力,具有可伸縮性、靈活性、擴充性好,而且價格便宜等特點;IBM的DB2是目前世界上最昂貴的大型數據庫,但與它的服務器結合後其速度快、性能好的特點尤爲突出,適用於對速度要求較高的大型用戶;而Oracle則是以可靠的安全性受到一些高端用戶青睞,即使服務器崩潰了也不會宕機,速度比SQL
Server快上百倍,其價格在實施中卻比它高出了幾百倍,其ERP在中國市場佔有60%市場;Sybase分別在企業解決方案、電子商務應用、商務智能、移動與嵌入計算及企業的電子金融應用領域爲客戶提供業界領先技術,價格比SQL Server 2000高一些。
在sql Server中用top n 取得N條記錄,
select top 10 * from dbo.Customer
在Oracle中用 rownum
select * from dba_Customer where rownum<10
設置執行的語句執行的時間:
sql Server
>--測式數據庫語句運行的時間
2 |
declare
@starttime as datetime; |
3 |
declare
@endtime as datetime; |
4 |
set
@starttime = getdate(); |
5 |
--運行的語句 |
6 |
select
* from dbo.total
where companyinfo
like '%中南一路%' |
7 |
set
@endtime = getdate(); select
@starttime as 開始時間,@endtime as 結束時間,datediff(MS,@starttime,@endtime) as 運行時間 |
Oracle中
set timing on;
--1、用戶:
select usernamefrom dba_users;
-- 改口令
alteruser spgroup identifiedby
spgtest;
-- 2、表空間:
select*from
dba_data_files;
select
* from dba_tablespaces;//表空間
select tablespace_name,sum(bytes),sum(blocks)
from dba_free_spacegroupby tablespace_name;//空閒表空間
select
* from dba_data_files
where tablespace_name='RBS';//表空間對應的數據文件
select
* from dba_segments
where tablespace_name='INDEXS';
-- 3、數據庫對象:
select*from
dba_objects;
CLUSTER、DATABASE LINK、FUNCTION、INDEX、LIBRARY、PACKAGE、PACKAGE
BODY、
PROCEDURE、SEQUENCE、SYNONYM、TABLE、TRIGGER、TYPE、UNDEFINED、VIEW。
-- 4、表:
select*from
dba_tables;
analyze my_table computestatistics;->dba_tables後6列
select extent_id,bytesfrom dba_extents
where segment_name='CUSTOMERS'and
segment_type='TABLE'
order
by extent_id;//表使用的extent的信息。segment_type='ROLLBACK'查看回滾段的空間分配信息
-- 列信息:
selectdistinct table_name
from user_tab_columns
where column_name='SO_TYPE_ID';
--5、索引:
select*from
dba_indexes;//索引,包括主鍵索引
select
* from dba_ind_columns;//索引列
select i.index_name,i.uniqueness,c.column_name
from user_indexes i,user_ind_columns c
where i.index_name=c.index_name
and i.table_name='ACC_NBR';//聯接使用
-- 6、序列:
select*from
dba_sequences;
-- 7、視圖:
select*from
dba_views;
select
* from all_views;
text 可用於查詢視圖生成的腳本
-- 8、聚簇:
select*from
dba_clusters;
9、快照:
select
* from dba_snapshots;
-- 快照、分區應存在相應的表空間。
-- 10、同義詞:
select*from
dba_synonyms
where table_owner='SPGROUP';
//if ownerisPUBLIC,then
the synonymsis apublic synonym.
if owneris oneof users,then
the synonymsis a private synonym.
-- 11、數據庫鏈:
select*from
dba_db_links;
-- 在spbase下建數據庫鏈
createdatabase link dbl_spnew
connect to spnew identifiedby spnew using'jhhx';
insert
into acc_nbr@dbl_spnew
select
* from acc_nbrwhere nxx_nbr='237'and
line_nbr='8888';
--12、觸發器:
select*from
dba_trigers;
-- 存儲過程,函數從dba_objects查找。
-- 其文本:
select
text from user_sourcewhere name='BOOK_SP_EXAMPLE';
-- 建立出錯:
select
* from user_errors;