.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 username from dba_users;
-- 改口令
alter user spgroup identified by spgtest;
-- 2、表空间:
select * from dba_data_files;
select * from dba_tablespaces; //表空间
select tablespace_name,sum(bytes), sum(blocks)
from dba_free_space group by 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 compute statistics;->dba_tables后6列
select extent_id,bytes from dba_extents
where segment_name='CUSTOMERS' and segment_type='TABLE'
order by extent_id;//表使用的extent的信息。segment_type='ROLLBACK'查看回滚段的空间分配信息
-- 列信息:
select distinct 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 owner is PUBLIC,then the synonyms is a public synonym.
if owner is one of users,then the synonyms is a private synonym.
-- 11、数据库链:
select * from dba_db_links;
-- 在spbase下建数据库链
create database link dbl_spnew
connect to spnew identified by spnew using 'jhhx';
insert into acc_nbr@dbl_spnew
select * from acc_nbr where nxx_nbr='237' and line_nbr='8888';
--12、触发器:
select * from dba_trigers;
-- 存储过程,函数从dba_objects查找。
-- 其文本:
select text from user_source where name='BOOK_SP_EXAMPLE';
-- 建立出错:
select * from user_errors;