深度对比Oracle与SQL Server.doc_第1页
深度对比Oracle与SQL Server.doc_第2页
深度对比Oracle与SQL Server.doc_第3页
深度对比Oracle与SQL Server.doc_第4页
深度对比Oracle与SQL Server.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深度对比Oracle与SQL Server1. 概述1.1. 产品特点对比开放性SQL Server 只能在Windows 上运行,没有丝毫的开放性,操作系统的稳定对数据库是十分重要的。Windows9X系列偏重于桌面应用,NT server只适合中小型企业。而且Windows平台的可靠性,安全性和伸缩性是非常有限的。它不象UNIX那样久经考验,尤其是在处理大数据量的关键业务时。Oracle 能在所有主流平台上运行(包括 Windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。DB2 能在所有主流平台上运行(包括Windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%.可伸缩性、并行性SQL server并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。Oracle 平行服务器通过使一组结点共享同一簇中的工作来扩展WindowsNT的能力,提供高可用性和高伸缩性的簇的解决方案。 如果WindowsNT不能满足需要, 用户可以把数据库移到UNIX中。DB2具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境。数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。数据库分区有时被称为节点或数据库节点。安全性SQL server 没有获得任何安全证书。Oracle Server 获得最高认证级别的ISO标准认证。DB2 获得最高认证级别的ISO标准认证。性能SQL Server 多用户时性能不佳Oracle 性能最高, 保持WindowsNT下的TPC-D和TPC-C的世界记录。DB2 适用于数据仓库和在线事物处理,性能较高。客户端支持及应用模式SQL Server C/S结构,只支持Windows客户,可以用ADO,DAO,OLEDB ,ODBC连接.Oracle 多层次网络计算,支持多种工业标准,可以用ODBC, JDBC,OCI等网络客户连接DB2 跨平台,多层结构,支持ODBC,JDBC等客户操作简便SQL Server 操作简单,但只有图形界面Oracle 较复杂,同时提供GUI和命令行,在WindowsNT和UNIX下操作相同DB2 操作简单,同时提供GUI和命令行,在WindowsNT和UNIX下操作相同使用风险SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。Oracle 长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。DB2 在巨型企业得到广泛的应用,向下兼容性好,风险小。仅供参考。1.2. 区别和联系对于Oracle 8i初学者,很有可能会经常把MS SQL Server中的概念拿来与Oracle对照,这种对照,从我个人认为觉得不需要做过多的这种比较,一个如果从来没有学过其他数据库管理的人,可能更容易学习Oracle.现在我来说一下两者的区别和联系。1.2.1. 关于数据库的概念我怎么找到或者创建自己的数据库?Oracle的数据库的概念已经完全不同于MS SQL,Oracle的服务和数据库相当于MS SQL的数据库服务:Oracle的服务=后台进程+相关内存数据库=数据文件的集合而且Oracle的服务是完全可以与数据文件脱离开来的。那么MS SQL的数据库,在Oracle哪儿能找到呢?Oracle的Schema,Schema的中文意思:方案意思是一个用户所拥有所有对象的集合。这里的对象包括表、视图、实例化视图、序列、过程、函数、程序包、同义词(下面我会详细解释这其中的一些陌生的概念),所以我们要建立一个在Oracle中的类似于MS SQL的数据库的大致过程:建立数据表空间(相当于MS SQL的数据库的数据文件)建立临时表空间(相当于MS SQL的数据库的事务日志文件)建立用户,他的缺省表空间和临时表空间是刚建立的两个表空间给用户授权,最起码的角色权限是Connect 的角色以该用户登录,创建自己的表、视图、实例化视图、序列、过程、函数、程序包、同义词等1.2.2. 关于Oracle Manager Server与MS SQL的Enetrprise manager应该说这两者有很大的差别,DBA Studio工具提供了与MS SQL的Enetrprise manager同样的功用,DBA Studio工具对一般使用来说已经足够了。但这里有必要对Oracle Manager Server解释一下:它是Oracle 管理分布式数据库的服务,注意他是服务它缺省并不安装它需要有自己管理所需要的资料库,在某个数据库中需要建立相应的用户它的等录需要身份验证,注意这里的身份验证,与管理所需要的资料库的用户是不是一个概念,也不是数据库中的Sys、system用户,它的缺省用户是oemtemp,使用它,在管理端要启动Manager Server服务和智能代理服务(OracleAgent),被管理的数据库服务器要启动智能代理服务(OracleAgent)。1.2.3. 关于Oracle 的Sys、System的用户与MS SQL的master的比较MS SQL的master数据库存储了当前数据库服务的一些配置信息,如数据库设备(在MS SQL已经弱化)、字符集、数据文件、登录帐号、拥有的数据库、整个服务参数配制等信息。Oracle的Sys存储Oracle服务或者实例的信息及所有用户的数据字典信息,这一点不同于MS SQL,MS SQL每一个数据库拥有自己的对象的数据字典信息。System用户拥有数据字典是视图信息,有了这些视图,我们的查询数据库的信息就特别方便。缺省情况下,system用户拥有DBA系统角色权限,而sys不仅拥有DBA 的权限,还拥有SysDBA的权限。DBA与SysDBA这两个系统角色有什么区别呢?在说明这一点之前,我需要说一下Oracle服务的创建过程:创建实例启动实例创建数据库(system表空间是必须的)启动过程实例启动装载数据库打开数据库SysDBA,是管理Oracle实例的,它的存在不依赖于整个数据库完全启动,只要实例启动了,他就已经存在,以SysDBA身份登录,装载数据库、打开数据库。只有数据库打开了,或者说整个数据库完全启动后,DBA角色才有了存在的基础!1.2.4. Oracle中新的数据库对象:实例化视图、快照、序列、程序包、同义词、抽象的数据类型实例化视图又称显形图:实例化说明他有自己的存储空间;视图:说明他的数据来源于其他表数据。实例化视图中的数据,设置为隔一段时间更新数据,更新的模式可以定义为完全更新和增量更新。快照基本上同实例化视图,只不过数据来源不同,快照数据来愿于远程数据库,而实例化视图则来源于本地数据表序列,相当于MS SQL中的identity列,他是一个数字顺序列表。程序包:他是过程、函数、全局变量的集合,他封装了私有变量、私有过程和私有函数,如:dbms_out包同义词:是对数据库中的对象的别名,同义词可以是全局的也可以是私有的(属于某个用户的),如:Tab,col等抽象的数据类型,类似于C中的结构体或Pascal记录类型。关于类型,这里还有一个题外话:a)Tab%RowType:这是一个特别的抽象的数据类型,该类型的分量就是TAB的字段;b)Tab.TName%Type:这定义了一个和tab的字段TNAME相同的数据类型的变量。想想他有什么好处。1.2.5. Oracle数据库连接和MS SQL远程连接两者都是为了实现分布式数据库的操作。两者都能实现分布式事务,参见MS SQL的联机帮助1.2.6. Oracle回滚段和MS SQL的数据库事务日志文件回滚段提供了事物回滚需要使用的数据变化以前的映象。这些映象是按条目存储的,如果这些条目过少,一个事务等待另一个事务的几率增大,就会影响数据库的性能。缺省安装时,提供一个系统回滚段他在System表空间。为了提高性能system 表空间,不应存储有任何数据字典信息以外的信息。MS SQL数据库事务日志文件功能雷同于回滚段,只不过他是同特定的数据库密切相关的。1.2.7. 关于数据表的管理超大型数据表的管理一个数据表,尤其是那种流水帐表,长年累月后急剧膨胀,最后影响查询性能,怎么办?Oracle和MS SQL都提供了一种方法,把数据文件及其索引存放在一个特定的数据文件或表空间里,但这个还是不能解决问题,怎么办?开发人员只能给表添加时间的标志:如CWSJ2000(财务数据2000),CWSJ2001,CWSJ2002, 这种命名方式,确实能提高查询性能,但是给开发带来了不少的麻烦(浪潮财务就是这样做的),而且当你不知道数据在哪个表中的时候,你要联合这么表进行查询,岂不长哉!Oracle提供了很好的手段解决了这个问题:表及索引分区存储。按字段值的范围进行分区存储。具体做法不在说明。Oracle索引组织表和MS SQL簇索引表两者的数据存放顺序都是按照索引值的顺序存放的。无事务回滚概念的表对这种表的操作不存在事务的概念。记得以前MySQL是不提供事务的回滚(不知现在有否变化),而Oracle提供了建表参数nologging,使对该表的操作不参与事物的回滚。索引Oracle提供了多种MS SQL没有的索引类型位图索引,比方说性别,仅有男女:第1条记录:男第2条记录:男第3条记录:女第4条记录:男第5条记录:女第6条记录:男.那它的索引:110101.看这种索引多节省空间,它适用于字段值是的已知几个中的一个,基于函数或者说表达式的索引,这个功能可谓强大。1.2.8. 外连接MS SQL SERVER 支持两种形式表间连接: 从Sybase继承来的形式:字段1 *= 字段2 (左连接)字段1 =* 字段2 (右连接)没有这种形式的全外连接语法 标准的外连接语法left outer join on 逻辑表达式right outer join on 逻辑表达式full outer join (全外连接) on 逻辑表达式这里的逻辑表达式可以是很复杂的表达式例如:A.ID=B.ID AND (A.Parebt_ID=1 OR A.Parent_ID=2)需要提醒大家的是:你写的查询语句报告过这样的错误:Joined tables cannot be specified in a query containing outer join operators. Joined tables cannot be specified in a query containing outer join operators. View or function dbo.VU_CAF_BILLS contains joined tables这句话告诉你,你查询语句引用的视图或者子查询也用到了外连接,但是引用视图或者子查询外连接语法与你的外连接语法不一致导致的,例如:select A.ZONE,A.FLAG,A.FlagDesc,A.CAF_NOfrom dbo.VU_CAF_BILLS A,TU_Flagwhere A.CAF_NO*=TU_Flag.ObjNo视图dbo.VU_CAF_BILLS的外连接语法是标准的SQL语法,而本语句中的外连接语法却是Sybase式的外连接语法。Oracle不支持标准的外连接语法,也没有全外连接,这是它的缺陷。字段1 = 字段2(+) (左连接)字段1(+) = 字段2 (右连接)使用外连接语句的用处: 不想因为表连接而使主表数据行丢失,这一点毋庸多说。 找某条记录在A表存在,而在B表不存在,按常规做法使用not in (select 查询子句) 语法,使用not in 最大的缺点速度慢,原因是每个数据行都去做select 查询子句,而使用下面的语法:select TU_COMPANY.*from TU_COMPANY left join TU_Comp_Agent on TU_COMPANY.ID=TU_Comp_Agent.CompCodewhere TU_Comp_Agent.Id is null1.2.9. 触发器从我了解到的,MS SQL SERVER,仅有表的触发器,而且触发时机不够丰富。如插入触发在子,不区分单条插入还是多条插入,也不区分插入前触发还是插入后触发。碰到多条数据的插入,需要使用游标处理每条插入的数据。Oracle提供的触发器不仅有基于表的触发器,而且其他类型的,例如数据库级的触发器:数据库启动、数据库关闭。对于表级的触发器,区分单条插入还是多条插入,也区分插入前触发还是插入后触发。1.2.10. 表数据复制库内数据复制MS SQL ServerInsert into 复制表名称 select 语句 (复制表已经存在)select 字段列表 into 复制表名称 from 表 (复制表不存在)OracleInsert into 复制表名称 select 语句 (复制表已经存在)create table 复制表名称 as select 语句 (复制表不存在)文本文件转入、转出的批量处理MS SQL ServerBCP命令行程序2. 体系结构2.1. 文件体系结构ORACLE的文件体系结构:数据文件 *.DBF (真实数据)日志文件 *.RDO控制文件 *.CTL参数文件 *.ORASQL SERVER的文件体系结构:*.MDF (数据字典)*.NDF (数据文件)*.LDF (日志文件)2.2. 存储结构ORACLE存储结构:在ORACLE里有两个块参数PCTFREE(填充因子)和PCTUSED(复用因子),可控制块确定块本身何时有,何时没有足够的空间接受新信息(对块的存储情况的分析机制)。这样可降低数据行连接与行迁移的可能性。块的大小可设置(OLTP块和DSS块) 。在ORACLE中,将连续的块组成区,可动态分配区(区的分配可以是等额的也可以是自增长的)可减少空间分配次数。在ORACLEl里表可以分为多个段,段由多个区组成,每个段可指定分配在哪个表空间里。段的类型分为:数据段、索引段、回滚段、临时段、CASH段。ORACLE里还可对表进行分区,可按照用户定义的业务规则、条件或规范,物理的分开磁盘上的数据。这样大大降低了磁盘争用的可能性。ORACLE有七个基本表空间:l SYSTEM表空间(存放数据字典和数据管理自身所需的信息)l RBS回滚表空间l TEMP临时表空间l TOOLS交互式表空间l USERS用户默认表空间l INDX索引表空间l DBSYS福数据表空间不同的数据分别放在不同的表空间(数据字典与真实数据分开存放),在ORACLE里基表(存储系统参数信息)是加密存储,任何人都无法访问。只能通过用户可视视图查看。SQL SERVER 存储结构:以页为最小分配单位,每个页为8K(不可控制,缺乏对页的存储情况的分析机制),可将8个连续的页的组成一个扩展,以进一步减少分配时所耗用的资源。(分配缺乏灵活性),在SQL SERVER里数据以表的方式存放,而表是存放在数据库里。SQL SERVER有五个基本数据库:l master(数据字典)l mode(存放样版)l tempdb(临时数据库)l msdb(存放调度信息和日志信息)l pubs(示例数据库)真实数据与数据字典存放在一起。对系统参数信息无安全机制。2.3. 登入管理ORACLE登入管理:l SYSTEM/MANAGER (初始帐户)l SYS/CHANGE_ON_NSTALLl INSTALL/ORACLE(安装帐户)l SCOTT/TIGER(示例数据库,测试用)在ORACLE里默认只有三个系统用户,ORACLE是通过用户登入。SQL SERVER登入管理:l SQL SERVER身份验证l WINDOWS 身份验证在SQL SERVER里是通过WINDOWS用户帐户或是用SQL SERVER身份验证连接数据库的。2.4. 区别综述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在创建表时用户可以精确定义数据存放的表空间,甚至可以把一张表分开存放在多个表空间中,这样可以将数据量庞大的表按某些字段分开存放,这将给查询带来极高的效率。3. ORACLE的表空间管理和SQL SERVER的文件组对比3.1. 概念对比SQL Server里对数据库文件的管理比较简单,主要的概念有:1. 文件组:数据库对象的存储分配单位,目的是为了容纳更多的数据库文件、扩展空间2. 文件:文件组的成员,有空间分配是否自动增长的管理3. 默认文件组4. 只读文件组:这是在sqlserver2005后才有的概念,sqlserver2000没有!5. master、tempdb数据库:用于基本的字典、临时空间管理Oracle里对数据库文件的管理就比较复杂了,基本的概念:1. 表空间2. 表空间的数据文件成员3. 默认表空间4. 只读表空间5. 脱机表空间6. 脱机表空间数据文件成员7. system、sysaux、undo、temporary表空间专门作为数据自动、undo、临时空间存在8. bigfile文件9. 对空间进行logging|nologging|force logging从上的基本对比中:1. Oracle的空间管理有sqlserver所没有的许多特性;2. Oracle的管理变得复杂了。其实某些特性完全可以依赖于os,也许这就是Oracle为了平台无关所做的妥协吧。3.2. Oracle表空间的基本要素1. 性质:用户的永久表空间、undo表空间、temporary表空间2. 是否使用bigfile特性3. 名称4. 表空间文件成员,如果使用bigfile特性,只能使用一个文件成员:datafile、tempfile5. 是否记录日志:logging、nologging、force logging。不能用户temporary、undo表空间上6. 是否联机:noline、offline7. 数据块尺寸:blocksize 2k、4k. 。必须要相应配置db_nk_cache_size初始化参数。且值不能小于os的块大小!temporary表空间不能使用非标准的数据块!8. 扩展区管理模式,注意temporary、undo表空间各有特殊要求!extent management dictionary|local autoallocate|uniform size nm|k|g.9. 段管理模式,不能用户temporary、undo表空间上:segment space management auto|manual10. 闪回特性是否打开:flashback on|off 。不能用户temporary、undo表空间上11. 闪回保留模式:retention guarantee|noguarantee3.3. Oracle的和表空间相关的基本操作0. 注意:1) temporary表空间只能使用add tempfile file-spec一个语句2) undo表空见可以修改的地方也十分有限3) system表空间不允offline 和 read1. 增加表空间:create bigfile tablespace tbs_name datafile file-spec,.2. 修改表空间:增加、删除文件:alter tablespace tbs_name add|drop datafile|tempfile file-spec,.3. 修改表空间:移动、重命名文件:alter tablespace tbs_name rename datafile file-spec,. tofile-spec,.4. 修改表空间:联机、脱机文件:alter tablespace tbs_name datafile|tempfile online|offline5. 修改表空间:表空间名称:alter tablespace tbs_name rename to new_tabs_name6. 修改表空间:日志模式:alter tablespace tbs_name logging|nologging|no force logging7. 修改表空间:表空间联机、脱机模式:alter tablespace tbs_name online|offline8. 修改表空间:修改读、写模式:alter tablespace tbs_name read only|write9. 修改表空间:修改闪回模式:alter tablespace tbs_name flashback on|off10. 修改表空间:修改闪回数据保留模式:alter tablespace tbs_name retention guarantee|noguarantee11. 修改表空间:修改bigfile文件的尺寸:alter tablespace tbs_name resize n k|m|g|t12. 修改表空间:修改bigfile文件的区自动扩展模式:alter tablespace tbs_name autoextend off|on next n maxsize m|unlimited13. 修改表空间:修改temporary空间的组模式:alter tablespace tbs_name group group_name|14. 修改表空间:在permanent 和 temporary模式间转换,转化前需要考虑temporay表空间的诸多限制,否则不会成功:alter tablespace tbs_name permanent|temporary15. 修改表空间:修改是否在线backup模式:alter tablespace tbs_name begin|end backup16. 修改表空间:修改读、写模式:alter tablespace tbs_name read only|write17. 设置默认表空间:alter database set default temporary tablespace tbs_name18. 删除表空间:drop tablespace tbs_name including contents and|keep datafiles cascade contraints19. omf管理方式:只要设置db_create_file_dest即可。并且可以和用户定义方式混合使用。20. 查询表空间的基本信息:select * from dba_tablespaces;select * from v$tablespace;21. 查询表空间数据文件的基本信息:select * from dba_data_files;select * from v$datafile;22. 查询temporary表空间、数据文件的基本信息:select * from dba_temp_files;select * from v$tempfile;select * from dba_tablespace_groups;23. 修改数据库:修改数据、临时文件的大小,不限于bigfile或smallfile:alter database datafile|tempfile file-spec,. resize n k|m|g|t.24. 修改数据库:修改数据、临时文件的区自动扩展模式,不限于bigfile或smallfile:alter database datafile|tempfile file-spec,. autoextend off|on next n maxsize m|unlimited 25. 修改数据库:移动、重命名文件:alter database rename file file-spec,. tofile-spec,.26. 修改数据库:联机、脱机文件,如果是datafile offline 可以 选择 for drop:alter database datafile|tempfile file-spec,. online|offline27. 修改数据库:删除tomporay文件:alter database tempfile file-spec,. drop including datafiles28. 修改数据库:创建datafile文件:alter database create datafile file-spec,. |newfilenumber as file-spec,. | new29. 修改数据库:重命名redo文件:alter database rename redo-file-spec,. toredo-file-spec,.30. 修改数据库:创建redo文件组:alter database add standby logfile group n redo-file-spec,.31. 修改数据库:创建redo文件组成员:alter database add standby logfile member redo-file-spec,. to group n32. 修改数据库:删除redo文件组:alter database drop standby logfile redo-file-spec|group n33. 修改数据库:删除redo文件组成员:alter database drop standby logfile member redo-file-spec,.34. 修改数据库:创建物理、逻辑 standby controlfile文件:alter databasecreate logical|physical standby controlfile asctlfilespec reuse35. 修改数据库:备份controlfile到指定的全路径文件:alter database backup controlfile to ctlfilespec reuse36. 修改数据库:备份controlfile到指定的、或默认的跟踪文件:alter database backup controlfile to trace asctlfilespec reuse resetlogs|noresetlogs37. 修改数据库:删除redo文件组成员:alter database drop logfile member redo-file-spec3.4. Oracle数据库文件的管理Oracle的数据库文件,用在以下语句上:1. create database2. alter database3. create controlfile4. create tablespace5. alter tablespaceOracle的数据库文件主要有两种类型:datafile_tempfile、redo_logfile。其主要区别在于:redo_logfile文件不能自动autoextend!指定数据库文件的主要规范如下:full_path_filename size nreuseautoextend off|on next maxsize unlimited|m注意:size 可以有多种文字单位k|m|g|t|p|.,但是如果不指定单位,就是byte字节。对于undo表空间的文件,必须指定size。其他的表空间如果文件已经存在 或者 使用 omf 可以不指定size。如果忽略autoextend :对于omf,如果指定了size 则禁止扩展;否则自动扩展;对于用户定义的文件,禁止。4. 实例、数据库和表空间4.1. 实例实例:数据库服务器中一个开拓单独提供数据管理服务。一个数据库系统可以创建多数据库实例。他们之间可以单独管理,可以有同字符集、用户模式、内存管理模式等等。Oracle:实例用SID来标识,其内部管理的用表空间来划分;SQL Server:实例就是系统的服务,其内部使用库来管理。对使用者来说两者最多大的区别,主要是管理模式不同。SQL Server和Oracle之间第一个架构级别的差异就在于对实例(instance)和数据库(database)概念的定义了。SQL Server中,实例一词用来代表一个包含了操作系统文件、内存结构、后台进程以及注册表信息的独立的应用服务。在Windows系统中用一个存在着停止和运行状态的服务来代表一个实例,当处于运行状态时,实例要占用一定的服务器内存以及生成一定数量的后台进程。SQL Server实例的中心是数据库。一个SQL Server数据库指的是一个资料库以及操作数据所需要的程序代码,当实例没有运行时,实例中的数据库就不能够访问。4.2. 数据库SQL Server有两种数据库:系统数据库(system databases)和用户数据库(user databases)。在一个SQL Server实例安装完成之后,将会自动创建5个系统数据库:master, model, msdb, tempdb和resource。如果一个机器上面安装了多个SQL Server实例时,没有实例都会有自己单独的一套系统数据库。除了msdb数据库之外,其它数据库不能访问或是被损坏都会导致实例无法启动。相比之下用户数据库由DBA或者是开发人员在数据库实例安装完毕、系统数据库都启动之后所创建的,这些数据库中保存着公司的业务资料。简而言之,一个SQL Server实例总是要包含一些数据库(尽管有时只是那些系统数据库),一个数据库也总是要有一个(且仅有一个)与之关联的实例。从物理角度说,一个SQL Server数据库表现为存储于磁盘上面的一组操作系统文件的集合。数据库文件分为两种:数据文件(data file)和事务日志文件(transaction log file)。一个数据库至少要包含一个数据文件和一个事务日志文件,SQL Server数据库的资料主要是存在于数据文件中,事务日志文件用来记录发生在这些数据上面的变更记录,SQL Server在执行系统恢复的时候要用到它。一个数据文件或事务日志文件只能隶属于一个特定的数据库,不存在两个数据库共用一个数据文件或者是日志文件的情况。一个数据量很大的数据库可以使用多个数据文件,这些数据文件能够被逻辑的组合成一个称为文件组(file group)的逻辑组。在Oracle中,这一切看起来都有点反着来了。当Oracle启动时,它和SQL Server一样要先占用一些服务器内存用于执行操作,这个内存区域著名的SGA(System Global Area)被分为数个不同的结构,在创建SGA的同时也会启动一系列的后台进程用于和SGA进行交互,在这里这些分配的内存空间和后台进程组合起来就是Oracle实例了。请注意现在我们没有见到数据库的影子还,实际上Oracle实例在没有数据库或是数据库不能访问时也是跑的很好的,在安装Oracle时,我们可以选择只安装软件,完了之后再安装数据库。Oracle中的数据包含了一组操作系统文件。不像SQL Server数据库,Oracle数据库并不能代表数据库对象的逻辑分组,它更像是表示包含多个存在于磁盘上的用来保存数据的文件的一个单个的集合名词。组成Oracle数据库的文件可以分成三个类型:数据文件(data file)、重做日志文件(redo log file)和控制文件(control file)。数据文件保存数据,Oracle中可以存在任意数量的数据文件;重做日志文件跟SQL Server的事务日志文件一样用来保存对数据更改的记录,在系统恢复阶段需要用到;控制文件是一些特别的小文件,用来保存一些至关重要的关于数据库的信息,没有这个文件的话,实例就无法打开数据库。除了数据文件、重做日志文件、控制文件之外,数据库还包含参数文件(parameter file)、密码文件(password file)和可选的归档日志文件(archive log files),后面很快会对这些文件类型展开讨论。Oracle系统启动时,首先在内存中创建数据库实例,然后由实例找到保存在磁盘中的数据库,最后打开数据库让用户操作。当系统关闭时,实例会从内存中清除掉:整个内存结构和后台进程都会消失,但是数据库依然存在于磁盘上,只是处于关闭的状态。之前也说过,Oracle实例可以在不打开数据库的情况下运行这是与SQL Server数据库最大的不同,SQL Server实例是不能够离开系统数据库而运行的。不过和SQL Server一样Oracle数据库在实例没有启动的情况下也是不能访问的。一般来说Oracle实例和数据库之间是一对一的关系。一个实例对应着一个数据库,但是一个数据库却可以同时由多个实例去访问它。一个独立的Oracle安装包含一个实例和一个供实例操作的数据库,而配置成RAC(Real Application Cluster)的安装则可以允许多个存在于不同机器上的实例访问存在于一个共享磁盘上面的数据库。4.3. 表空间那Oracle中数据库对象的逻辑分组在那儿呢?在SQL Server中逻辑分组由数据库自己来完成,而在Oracle中,这项工作由表空间(tablespace)完成,Oracle表空间是用来对表、视图、索引和其他数据库对象进行分组的逻辑结构。例如,你的Oracle产品库可以给HR应用一个单独的表空间,支付应用则使用另外一个。一个数据库可以逻辑的分成若干个表空间,这些表空间在物理上则由一个或者多个数据文件组成。因此在Oracle中与SQL Server数据库等价的是表空间。由于这两种结构在功能上相当类似,在SQL Server中建立数据库的过程和在Oracle中建立表空间的过程也非常相似。不管是建立数据库还是表空间,DBA都要首先指定一个名字,然后给新建的数据库或者表空间分配一个或多个数据文件,并为每个数据文件指定初始大小和数据增长情况。在SQL Server中可以做到让一个用户数据库离线或是只读,Oracle的用户表空间也一样可以。在SQL Server中可以让一个用户数据库中的一个或者多个数据文件只读,而Oracle用户表空间中的一个或者多个数据文件也同样能标记为离线。不过数据库和表空间在某些方面还是有差别的:l SQL Server中,数据文件可以用文件组逻辑的进行分组,而Oracle表空间就没有类似的概念。l SQL Server的每个数据库都有自己的事务日志文件,而且在创建数据库的时候就要指定这些日 志文件的属性。而在Oracle中整个数据库(意为所有的表空间)的事务日志都是记录在同样的一样重做日志中,因此也不存在说给每个表空间建立一个单独的日志文件的说法。 l SQL Server中,数据库可以设置成简单恢复模式(simple recovery mode),简单恢复模式指的是活动的数据库日志在checkpoint操作完成之后就会截断。Oracle也有类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论