1、北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4 4.4 ORACLE数据库规划与实施数据库规划与实施 ORACLE为信息系统提供了一个开放、综合、集成的方法。使用ORACLE数据库进行信息系统开发的步骤可以归纳为如下过程:建ORACLE数据库建表空间建回滚段建用户建数据库对象开发 本节介绍ORACLE数据库的规划与实施:4.4.1 数据库应用程序类型 4.4.4 ORACLE对象设计 4.4.2 ORACLE空间设计 4.4.5 DBA工具 4.4.3 ORACLE安全设计北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.1 4.4
2、.1 数据库应用程序类型数据库应用程序类型 规划和配置数据库,需要知道将要操作数据库的事务有什么,这些事务访问数据库的频率有多大。针对不同的事务访问情形,对内存的要求不同,磁盘I/O操作的情形也不同。只有设只有设置合适的置合适的ORACLEORACLE实例,才能使数据库应用系统实例,才能使数据库应用系统获得快速、准确、可靠的事务响应。获得快速、准确、可靠的事务响应。ORACLE既可以设置成处理长的密集型事务的系统,也可以设置成处理大量的小型快速事务的系统。有三种通用的数据库设置类型:联机事务处理(OLTP)决策支持系统(DSS)批量作业系统混合系统北京邮电大学软件学院 郭文明 2003.06郭
3、文明 2003.06.054.4.1 4.4.1 数据库应用程序类型数据库应用程序类型联机事务处理(OLTP)OLTP系统是一个包含繁重DML的应用,其面向事务的活动主要包括更新,但也包括一些插入和删除。典型的例子是用于航空公司和旅馆的预定系统。OLTP系统可以允许有很高的并发性。OLTPOLTP的特点是有大量短的事务高频率地访问数据库,的特点是有大量短的事务高频率地访问数据库,每一个事务操作的数据量不是很多,但事务比较频繁,每一个事务操作的数据量不是很多,但事务比较频繁,而且要求数据库响应事务的速度快。而且要求数据库响应事务的速度快。一般来说OLTP系统需要24*7地响应对数据库的请求。根据
4、这些要求,我们应该从以下几方面考虑:1)大量的小回滚段。因为事务都不太大,对回滚段空间的需求不可能很大,但事务数量多,引发回滚段数量的增大。应该创建大量小的回滚段,把事务对回滚段的争用减到最小。标准的配置可以考虑每四个活动事务用一个回滚段,每个事务接受一个区间。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.1 4.4.1 数据库应用程序类型数据库应用程序类型联机事务处理(OLTP)2)OLTP应用的表可能插入或者删除记录,所以存放易变表和索引的表空间应被分配到它们最大的期望容量。3)适当的估计重写日志缓冲区和日志文件大小,减少日志写和日志切换的频率,尽可能降低
5、对响应事务请求的影响,另外频繁的检查点也可能影响事务响应速度。4)拥有大型共享池。不同客户可能执行同样的SQL语句,SQL在共享池中缓冲,性能可提高(应用程序的SQL语句应当统一,另外WHERE中使用绑定变量查询而不是直接的值查询,使不同值的查询共享SQL的执行计划)。5)数据拥有单独的索引。OLTP的事务请求基本在规划设计范围之内,建立单独有效的索引,并在独立的表空间中创建主键和其他索引,且存放在独立的存储器上。6)使用小型临时段。需要小的排序应在内存中完成,尽量避免OLTP系统对临时段的请求进入磁盘。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.1 4.4
6、.1 数据库应用程序类型数据库应用程序类型决策支持系统(DSS)DSS系统通常是一个大型的、包含历史性内容的只读数据库,通常用于简单的固定查询或特别查询。夜间处理任务被认为是DSS,查询(选择)是查询(选择)是DSSDSS的主要活的主要活动动。根据这些要求,我们应该从以下几方面考虑:1)拥有少量的较大的回滚段。大型工作要创建大型的回滚段,使用SET TRANSACTION USER ROLLBACK SEGMENT语句使事务强制使用专用回滚段。2)为分类排序创建大型临时表空间,DSS经常超出内存的使用空间而从内存转入磁盘(临时表空间)。3)使用较小的共享SQL区域而采用较大的数据缓冲区高速缓冲
7、。DSS中SQL的执行频率并不大,无需考虑SQL语句的共享,但应增加数据库缓冲区高速缓冲的容量,使得更多的数据块和回滚段在内存中高速缓冲。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.1 4.4.1 数据库应用程序类型数据库应用程序类型决策支持系统(DSS)4)如前所述,DSS希望Oracle块一次读取尽可能多的行。因为DSS查询一般触发整个表扫描,所以希望通过读取多个连续的块使系统读取的块达到最大值。把DB_BLOCK_SIZE和DB_FILE_MULTIBLOCK_READ_COUNT参数设置得尽可能高些。5)运行的SQL应当删除不必要的排序并充分利用索引
8、,以减少对临时表空间和回滚段的压力。2种方法:在没有可以选择的良好索引时不使用任何索引或屏蔽使用某些索引(参见4.3);使用位图索引。6)不要在DSS应用代码中使用绑定变量。在OLTP下,希望最小化应用进程开销(语法分析)。然而,DSS的查询,语法分析占用整个查询时间的比例会更小。假如使用绑定变量,优化程序不能调用它所存储的统计信息(通过ANALYZE命令)以选出存取数据的最好方法。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.1 4.4.1 数据库应用程序类型数据库应用程序类型批量作业系统 批作业处理系统是作用于数据库的非交互性的自动应用。它通常含有繁忙DM
9、L语句并有较低的并发性。另外还有一些其他的应用类型:OLAPOLAP(联机分析处理)系统可提供分析服务(联机分析处理)系统可提供分析服务。该系统在数学、统计学、集合以及大量的计算方面区别于OLTP或DSS模型。可以把OLAP看作是在OLTP系统或DSS之上的一个扩展或一个附加的功能层次。地理信息系统(Geographic Information Systems,GIS)或有关空间的数据库和OLAP数据库相集成,提供图表的映射能力。例如用于社会统计的人口统计数据库。VCDB(可变基数数据库),这类数据库通常被用作一个处理系统的数据库后端,这样就会导致在数据处理期间,数据库中的表显著地增长或收缩。
10、基数是指在一个给定时间里一个表中行的数目。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.1 4.4.1 数据库应用程序类型数据库应用程序类型混合系统 混合系统混合了前面介绍的几种类型。许多实际应用系统往往是OLTP和DSS甚至其他模型的集成。从前面OLTP和DSS的需求对比来看,OLTP和DSS的基本特征似乎相反,如何协调这两种需求的矛盾?一般有三种解决方法:1)在一个系统中的在一个系统中的OLTPOLTP和和DSSDSS之间节流之间节流,白天运行OLTP,而夜间进行批量处理。即白天运行OLTP配置的数据库,夜间跳回DSS配置的实例。这种方法的实际操作模式可以
11、是以下两种:OLTP不支持24*7工作方式,DSS时不支持OLTP;DSS操作的系统反跳之后,OLTP可以使用,但系统性能将受影响。DBA需要测试DSS和服务器反跳对Web用户的影响,必要时选择其他解决办法来调整系统服务模式。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.1 4.4.1 数据库应用程序类型数据库应用程序类型混合系统 2)同时运行两个数据库,一个服务于同时运行两个数据库,一个服务于OLTPOLTP,一个,一个服务于服务于DSSDSS。OLTP数据库进行实时更新,在有规则的时间间隔内,将变化传递给DSS数据库。这种方法的实际操作模式可以多种。DBA
12、可以夜间执行部分或全部OLTP系统的输出,并输入到DSS系统。较好的解决方法是对实时方式下传递变化的连接数据库使用复制技术,将变化的数据复制记录下来,OLTP数据库只传递变化的数据给DSS数据库。第三种方法是使ORACLE中OLTP数据库的归档日志自动应用于DSS数据库,保证DSS系统紧跟在OLTP系统之后,DSS数据库不仅作为OLTP的备用数据库,而且自己又独立地服务于决策支持。尽管这种方式可能不能保证OLTP和DSS数据库的绝对同步,但在DSS的实时性要求不是很强时,是一种很好的方法。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.1 4.4.1 数据库应用
13、程序类型数据库应用程序类型混合系统 3)在一个系统中同时运行在一个系统中同时运行OLTPOLTP和和DSSDSS。这是最普遍的解决方法。系统经常作为OLTP开始活动,逐渐加入DSS需求使系统渐渐成为混合系统。在这种情况下,DBA必须在OLTP和批量处理之间寻找平衡,并且应该偏向于OLTP用户,创建与OLTP同样多的回滚段,而且要创建少量专门为大型事务指定的大型回滚段,同时将高速缓冲和共享池保持合理的容量,使系统既支持OLTP对共享池的需求又支持DSS对数据库缓冲区高速缓冲的需求。还要确保临时表空间够批量排序使用,同时将OLTP排序控制在内存中。推荐在这种情况下使用专用服务器,并且配置ORACL
14、E并行服务器(Oracle Parallel Server,OPS),因为OPS允许多个实例访问同一个物理数据库,一个实例为OLTP配置,另一些为批量处理配置。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2 ORACLE4.4.2 ORACLE空间设计空间设计 ORACLE数据库的结构包括逻辑结构和物理结构。在进行应用系统数据库设计时,空间设计是非常重要的,它与今后运行系统的性能、可用、维护、管理等有密切的关系。物理结构与逻辑结构之间的关系如下图:TablespaceSegmentExtentOracle blockData fileOS blockData
15、baseLogicalPhysical北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.1 ORACLE4.4.2.1 ORACLE表空间设计表空间设计 ORACLE表空间分为两大类:系统表空间和非系统表空间。系统表空间是建库时自动创建的主要用于存储数据字典、系统回滚段;非系统表空间是由用户创建的表空间,主要用于分离段,方便用户的数据管理。ORACLE推荐一种最佳灵活结构OFA(Optimal Flexible Architecture)可以用于表空间的设计。OFAOFA是是ORACLEORACLE软件安装软件安装和数据文件的推荐目录结构和数据文件的推荐目录结
16、构。OFA只是一组建议,并不是绝对原则。下面介绍基本OFA和扩展OFA。基本OFA 1)系统表空间(SYSTEM):系统表空间不具有重建性,只用于存放数据字典,其他内容如数据段信息等都应从系统表空间中移出。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.1 ORACLE4.4.2.1 ORACLE表空间设计表空间设计基本OFA 2)分离应用程序数据段(DATA):应用程序数据段应是一个独立的表空间,即数据表空间。建立单独数据表空间的理由是:应用程序与数据文件分离有利于减少资源争用,简化文件管理;另外,当数据段产生碎片时利于管理。3)分离应用程序索引段(IND
17、EX):索引段不应与相关的数据段存储在一个表空间,以免产生资源争用。由于表增长和不正确的尺寸设置可能产生索引段的碎片,分离应用程序索引段,可以减少整理数据表或索引碎片所需的管理代价。从数据表分离相应的索引也可以通过ALTER INDEX命令来实现。4)分离工具段(TOOLS):许多第三方工具会将数据存储在系统表空间中,为了避免这种情况,可将它们的对象移出系统表空间。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.1 ORACLE4.4.2.1 ORACLE表空间设计表空间设计基本OFA 5)分离回滚段(RBS):回滚段会针对巨型事务动态扩展尺寸,也会动态收缩
18、到指定的优化尺寸(参见4.3)。回滚段的I/O通常与数据和索引表空间的I/O同步。将回滚段分离出来是出于减少I/O冲突的考虑。6)分离临时段(TEMP):临时段是数据库中动态生成的对象,用来存储巨型排序操作(如SELECT DISTINCT,UNION,CREATE INDEX等)的数据。由于动态特性,临时段不应与其他类型段一起存储。通常,在建立用户时,将这些用户使用的临时数据段设置到临时表空间。7)分离用户(USER):为用户帐号建立一个USER表空间,在建立用户时将用户的操作数据放在用户表空间。以上7个表空间是最基本的表空间,也是传统OFA的基本组成部分。随着应用的深入,又有扩展的OFA。
19、北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.1 ORACLE4.4.2.1 ORACLE表空间设计表空间设计扩展的OFA 1)分离低使用数据段(DATA_2):在基表中,有一些是动态数据,一些是静态数据,而动态数据和静态数据常常被并发操作。静态数据在实际使用时只是被提取信息,可以把这些静态数据表设置到一个专用表空间(DATA_2),从而避免并发操作冲突。2)分离低使用索引段(INDEX_2):数据表分为静态表和动态表,则索引亦如此。对于静态表的索引表应建立静态索引表空间(INDEX_2)。如果索引已经生成,可以使用ALTER INDEX语句来移动这些索引
20、到一个新的表空间中。3)分离工具索引(TOOLS_1):如果数据库对TOOLS表空间有较多的操作,则这些工具表索引可以移到另一个表空间(TOOLS_1),这样TOOLS表空间就可看成工具数据表空间。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.1 ORACLE4.4.2.1 ORACLE表空间设计表空间设计扩展的OFA 4)分离特殊回滚段(RBS_2):RBS表空间的回滚段必须有适当的大小和数量,以适应应用的使用。但大型事务可能超过回滚段的配置。为了避免这种情况,可以设置一个特殊回滚段,使大型事务只使用特殊回滚段。建立一个特殊表空间来容纳这个特殊回滚段。5
21、)分离特殊用户临时段(TEMP_USER):和特殊回滚段一样,一些特殊用户在做特殊操作时,可以设置一个特殊用户临时表空间,这样便于系统管理。附加的特殊应用OFA扩展 1)SNAPS:用于快照(Snapshots)。快照表是分布式数据库处理的一种特殊表,为此类表建立相应的表空间。2)PARTITIONS:用于分区(Partition)。分区是为了分配I/O并且简化巨型表的管理。3)TEMP_WORK:用于大型数据装载。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.2 4.4.2.2 数据文件设置数据文件设置 根据ORACLE数据库结构特点,每个表空间至少要有
22、一个数据文件,因此,应用系统的每个表空间均具有各自的数据文件。Oracle 7.2以后可以支持数据文件大小的重新定义,当表空间需要扩充时,不必为其增加数据文件,而简单地将其扩充即可,避免了预先分配过大的存储空间及过多数据文件的问题。同时可以支持数据文件的自动扩展,避免当表空间已满时,DBA手工扩充表空间对用户使用的影响。对于一个不太大的数据库,可以将数据库软件和数据文件都放置在一个磁盘上,将它们设计成不同的子文件即可。对于大型数据库,需要指定哪些文件放置在哪个磁盘上。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.2 4.4.2.2 数据文件设置数据文件设置
23、表空间的磁盘分配:一般情况下,90%以上的I/O操作集中在系统表空间、数据表空间、回滚表空间、索引表空间这4个表空间上,所以这这4 4个表空间应单独存储在不同的磁盘上个表空间应单独存储在不同的磁盘上。系统文件的规划:ORACLE有联机日志文件、归档日志文件、控制文件和系统软件文件等,如何放置这些系统文件也是一件重要的任务。1)联机日志文件:每个数据库至少要有两个联机日志文件,由于联机日志文件中保留了数据库的当前事务,所以它无法从备份中恢复,他们是ORACLE无法用备份工具恢复的唯一文件类型。这类文件应单独存储。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.
24、2 4.4.2.2 数据文件设置数据文件设置系统文件的规划:2)控制文件:前面章节已经说明了控制文件的重要性,每个数据库应当至少有3个控制文件的拷贝,它们被分布在3个驱动器中。3)归档日志文件:如果归档日志文件和联机日志文件放在同一个磁盘上,当LGWR在读盘时,ARCH也在读同一磁盘,势必造成I/O冲突,所以归档日志文件和联机日志文件应分盘存储。4)ORACLE软件:Oracle软件是系统运行的核心,这些软件应放在独立的磁盘上。磁盘规划设计:磁盘规划设计可以依据下列准则:数据库必须可恢复;必须对联机日志文件进行镜像;必须最小化DBWR、LGWR、ARCH之间的冲突;必须最小化DBWR磁盘间的冲
25、突;估计数据库文件的I/O量。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.2 4.4.2.2 数据文件设置数据文件设置磁盘规划设计:在磁盘规划设计过程中需要做一些数据库测量,以估计其I/O量,以下给出一参照的7磁盘设计方案:磁盘存放内容1Oracle软件2SYSTEM表空间,控制文件13RBS,TEMP,TOOLS表空间,控制文件24DATA表空间,控制文件35INDEX表空间6联机日志文件1,2,3,转储文件7应用软件,归档日志文件北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.2 4.4.2.2 数据文件设置数据文
26、件设置表空间与数据文件设置举例:connect system/managercreate tablespace tsp_acctdatafile d:oracleoradataorclapacct.dbfsize 32M reuse autoextend on next 4M maxsize unlimited;create tablespace tsp_publicdatafile d:oracleoradataorclappublic.dbfsize 100M reuse autoextend on next 16M maxsize unlimited;create tablespace
27、tsp_tempdatafile d:oracleoradataorclaptemp.dbfsize 500M reuse autoextend on next 32M maxsize unlimited;连接数据库创建tsp_acct表空间创建回滚段表空间创建临时表空间北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.3 4.4.2.3 段存储分配设置段存储分配设置 在数据库中,大量使用的段包括表段和索引段,还有回滚段、临时段。表的逻辑定义信息放在DBA_TABLES和DBA_TAB_COLUMNS中,索引的定义信息放在DBA_INDEXS和DBA_IND_
28、COLUMNS中。从存储管理角度看,表和索引都属于段,只是类型不同而已,有关段及存储定义的系统数据字典有DBA_SEGMENTS和DBA_EXTENTS等。在应用系统中,对大量使用的段的规划主要是在应用系统中,对大量使用的段的规划主要是它们的存储方案的设计它们的存储方案的设计,每个段由区间组成。每个段使用的空间由它的存储参数决定,在CREATE TABLE、CREATE INDEX、CREATE CLUSTER、CREATE ROLLBACK等命令中都涉及到STORAGE参数。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.3 4.4.2.3 段存储分配设置
29、段存储分配设置 如果在创建段的命令中不指定STORAGE参数,则使用它所在表空间的缺省参数。表空间的存储参数或段的存储参数设计不合理将直接影响数据库的性能,甚至直接影响到数据库的正常运行。对存储参数的确定问题,前面的讨论中已经说明,应根据实际初始数据量的估算和数据的动态变化情况以及段的性质等多方面来决定。注意,ORACLE数据库在创建回滚段之后,状态为脱机,因此必须由DBA将其状态改为联机,方可使用。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.3 4.4.2.3 段存储分配设置段存储分配设置 段存储分配设置举例:create table pat_mast
30、er(pat_id varchar2(10),name varchar2(8),)pctfree 10 pctused 60storage(initial 16M next 16M minextents 1 maxextents unlimited pctincrease 0)tablespace tsp_acct;create index pat_master_indexon pat_master(pat_id)pctfree 20storage(initial 4M next 4M minextents 1 maxextents unlimited pctincrease 0)tables
31、pace tsp_acct;create public rollback segment rbs_publictablespace tsp_public storage(initial 4M next 4M);Alter rollback segment rbs_public online;创建pat_master表创建pat_master_index索引创建回滚段北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.4 4.4.2.4 数据块利用设置数据块利用设置 数据块空间利用参数可以控制表段和索引段中的空间使用。分两类:控制并发性的参数(INITRANS和M
32、AXTRANS)、控制数据空间使用的参数(PCTFREE和PCTUSED)。可以使用INITRANS和MAXTRANS来确定一个数据库块上活动事务的个数。INITRANS是每个块的初始化事务入口数,数据段和索引段的INITRANS的缺省值分别为1和2,增大其值则允许多个事务同时操作数据块。MAXTRANS是在每个块的最大事务入口,缺省值为最大值255。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.2.4 4.4.2.4 数据块利用设置数据块利用设置 通过选择适当的PCTFREE和PCTUSED可以提高性能和空间利用。对于改动较少的表,在设置数据块空间利用参数时
33、,PCTFREE适当降低。对于经常改动的表,尤其是数据行长度增加的改动,应该适当提高PCTFREE的设置,以免发生行转移。数据行长度增加这类应用的一个例子:医疗信息系统中,病案首页表中行的信息开始长度可能不大(许多字段值为空),但随着病人住院的过程,行的信息不断增加。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.3 ORACLE4.4.3 ORACLE安全设计安全设计 在ORACLE中,DBA定义访问数据库的用户名,安全域定义作用于用户的有关安全方面的设置。安全域包括:验证机制、表空间限额、默认表空间、临时表空间、帐户锁、资源限制、直接权限、角色权限8个方面,
34、如下页图。ORACLE的安全性设计围绕用户的安全域展开。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.3 ORACLE4.4.3 ORACLE安全设计安全设计AccountlockingAuthenticationmechanismRoleprivilegesDirectprivilegesResourcelimits TablespacequotasTemporarytablespaceDefaulttablespaceSecurity domain默认表空间临时表空间表空间限额资源限额直接权限角色权限验证机制帐户锁北京邮电大学软件学院 郭文明 2003.0
35、6郭文明 2003.06.054.4.3 ORACLE4.4.3 ORACLE安全设计安全设计安全域内容 1)验证机制:用户访问数据库可以通过数据库、操作系统、网络这三种方式中的一种进行验证,一个用户究竟使用何种验证方式,根据具体需求决定。2)表空间限额:表空间限额,可以控制一个数据库的用户对数据库中表空间的物理存储空间的分配数量。3)默认表空间:定义用户在创建段时的存储位置,当用户创建段时,如果指定存储表空间,则使用定义段时指定的表空间,否则使用这一默认表空间。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.3 ORACLE4.4.3 ORACLE安全设计安全
36、设计安全域内容 4)临时表空间:当用户执行排序操作时,临时表空间定义临时段分配的位置。5)帐户锁:帐户锁可以防止非法用户对系统的登录。6)资源限制:对用户使用资源进行一定的限制。7)直接权限:通过GRANT直接授予用户的系统权限和对象权限。8)角色权限:通过GRANT将系统权限和对象权限授予角色,再将角色授予用户,使用户间接获得权限。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.3 ORACLE4.4.3 ORACLE安全设计安全设计口令和资源 配置文件是命名的一组口令和资源限制的设置集合。Oracle中存在一个名为DEFAULT的配置文件,默认配置文件中的所
37、有项目都不受限制,如果创建用户时没有指定配置文件子句,则系统将DEFAULT指定给该用户。Oracle中允许DBA修改DEFAULT和用户定义的配置文件,用ALTER PROFILE命令。允许删除DEFAULT和定义的配置文件,用DROP PROFILE CASCADE命令。创建用户时需确定用户名和验证机制、指定默认表空间和临时表空间、确定有关表空间的限额、指定用户的配置文件。ORACLE应用系统中一般定义一系列的用户和配置文件、定义一系列的角色,然后将角色和配置文件授予(或指定给)用户。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.3 ORACLE4.4.3
38、 ORACLE安全设计安全设计权限和角色 Oracle大约有100多种的系统权限,包括诸如创建表空间的系统范围级操作权限、诸如创建表的用户模式内对象管理权限和诸如创建任意表的任意模式内对象管理权限。系统权限和对象权限可以通过GRANT或REVOKE语句授予用户或收回。角色是被命名的一组相关的权限,角色是属于系统范围的,既不属于某个用户,也不属于某个模式。可以把系统权限和对象权限授予角色,也可以把角色授予另一个角色,最终把角色授予用户,由此方便Oracle的安全管理。使用角色的步骤是:创建角色、为角色授予相应的权限、将角色授予特定的用户。Oracle中有一些预定义角色可以使用,例如DBA、SEL
39、ECT_CATALOG_ROLE等,DBA可以直接使用。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.3 ORACLE4.4.3 ORACLE安全设计安全设计应用系统的用户 应用系统的安全设计一般要对用户进行分类,然后根据用户类型的不同,对其进行设置、维护及管理。数据库管理员(DBA):默认的数据库管理员internal、sys和system均具有DBA权限。数据库打开、关闭、恢复等操作时,需使用internal;修改数据库重要参数时使用sys;其他一般管理应使用system。所有者(OWNER):对大型的应用系统,往往根据不同的用户所属将对象进行划分,这样不
40、同的用户拥有不同的数据库对象,创建数据库对象的用户称为对象的所有者(模式)。此类用户需要有RESOURCE的权限。一般用户(USER):一般用户即应用系统的最终用户。此类用户对数据库而言仅需要有CONNECT的权限即可,但此类用户的角色权限和对象使用权限需要根据具体工作和应用进一步规划和设计。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.3 ORACLE4.4.3 ORACLE安全设计安全设计应用系统的一般用户 应用系统中除创建一系列数据库对象外,还要创建一系列的应用程序,不同的应用程序执行不同的操作。对于一般用户来讲,使用数据库系统是通过使用用户管理应用程序
41、开始的,往往限制其使用一些应用程序的权力。对于这种情形,处理办法是:在数据库和应用程序之间建立用户管理应用程序层次,对每一个用户,授予相应的数据库权限和使用应用程序的权限。一般用户的配置:系统级权限仅限于角色一般用户的配置:系统级权限仅限于角色CONNECTCONNECT,对象级权限仅限于相关应用系统的,对象级权限仅限于相关应用系统的自定义角色,应用程序使用权限仅限于相关应自定义角色,应用程序使用权限仅限于相关应用程序的使用级别用程序的使用级别。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.3 ORACLE4.4.3 ORACLE安全设计安全设计应用系统的一般
42、用户 在应用系统内部进行多个层次的检查和验证:1)第一层:Oracle数据库系统层,判断其能否建立会话。2)第二层:应用程序的使用权限,检查验证用户能够使用哪些应用程序。3)第三层:Oracle数据库的对象级权限,判断用户能否操纵其相应的对象,对象级权限是通过自定义Oracle角色来设置的。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.3 ORACLE4.4.3 ORACLE安全设计安全设计 在ORACLE数据库中,当一个数据库用户被创建时,系统就为该用户自动创建一个与用户同名的模式。用户和模式的概念在某种程度上是一样的。模式或用户可以拥有的对象如下图。用户的
43、定义应与数据库的对象定义结合起来。Schema ObjectsTables 表Triggers 触发器Constraints 约束Indexes 索引Views 视图Sequences 序列发生器Stored program units 存储过程单元(PL/SQL写)Synonyms 同义词User_defined data types用户定义数据类型(Oracle8i以后)Database links 数据库连接(分布式数据库时使用)北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.3 ORACLE4.4.3 ORACLE安全设计安全设计 安全设计举例:crea
44、te profile grace_5 limit failed_login_attempts 3 password_lock_time unlimited password_lift_time 30 password_grace_time 5 sessions_per_user 2 cpu_per_session 10000 idle_time 60 conenct_time 480;create user comm identified by comm default tablespace data temporary tablespace tsp_temp quota 15M on dat
45、a profile grace_5;grant connect,resource to comm;创建配置文件创建用户授权北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.4 ORACLE4.4.4 ORACLE对象设计对象设计 数据库应用系统中肯定要建立大量的模式对象,这些对象应作出合理的规划,尽量减少因设计不周导致性能下降、表空间不足、用户权限不够等问题的出现。表 在创建表时,需要注意的事项如下:1)对于表名、列名、约束名、索引名和聚集名使用符合命名规则的并带有描述意义的名称。2)建立相应完全的、详细的文档资料。3)所有表都应当规范(规范化至少是第三泛式)。4
46、)定义允许为空的列,并保留一定的存储空间。5)适当地使用聚集表,保留一定的存储空间。6)表段应放在单独的表空间中。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.4 ORACLE4.4.4 ORACLE对象设计对象设计表 7)为了减少存储碎片产生,区间大小最好是数据块的整数倍。8)对于应用系统中频繁使用的数据行较少的表,考虑使用CACHE选项,即允许其长期保持在内存中,避免反复读取,提高性能。触发器 触发器作为Oracle标准功能的补充提供给用户。使用它通常实现如下功能:1)自动生成可以派生的列值。2)防止无效的处理。3)增强复杂的安全验证。北京邮电大学软件学院
47、 郭文明 2003.06郭文明 2003.06.054.4.4 ORACLE4.4.4 ORACLE对象设计对象设计触发器 4)增强分布式环境中跨节点的引用完整性。5)增强复杂的业务规则。6)提供透明的事件登记。7)提供高级的审计。8)维护表复制的同步。9)采集关于访问表的统计信息。尽管触发器可实现许多功能,但是,能用其他方能用其他方式实现的功能尽量避免使用触发器式实现的功能尽量避免使用触发器。过多的触发器导致复杂的内部相关性,维护和管理变得复杂。特别注意触发器的语句不要太多,不要创建递归调用的触发器(如一个对象的AFTER UPDATE的活动中又有该对象的UPDATE操作)。北京邮电大学软件
48、学院 郭文明 2003.06郭文明 2003.06.054.4.4 ORACLE4.4.4 ORACLE对象设计对象设计索引 索引一旦建立,其使用和维护都是由Oracle自动实现的。使用它应注意:1)索引可以加速查询,但会降低修改速度,频繁改动的表,尽量少建索引。2)索引段应存储在独立的表空间中。3)为减少存储碎片,区间大小应是数据块的整数倍。4)为了避免索引的建立和改动操作生成大量的重做日志,影响系统的性能,在创建较大索引时,使用NOLOGGING选项。5)由于索引项相对于数据项要短,使一个数据块中容纳索引的数量要比数据行多,为了提高索引在数据块一级上操作的并发性,可适当提高INITANS参
49、数的值。北京邮电大学软件学院 郭文明 2003.06郭文明 2003.06.054.4.4 ORACLE4.4.4 ORACLE对象设计对象设计索引 6)索引中PCTFREE只在创建索引时使用。对于单调增加的索引列值,可以将PCTFREE设置得较低。因为新的索引项始终是对已经存在的索引项的追加,不需要在两个已经存在的索引项之间插入,所以没必要预留过多的空间。如果索引列值是任意值时,则可能需要预留较多的空间。视图 对视图的操作类似表的使用,表可以使用的地方,视图一般也可使用。视图可用于安全控制和简化查询的目的,视图只能创建或删除,不能修改。北京邮电大学软件学院 郭文明 2003.06郭文明 20
50、03.06.054.4.4 ORACLE4.4.4 ORACLE对象设计对象设计序列 应用系统中,经常使用顺序号,并发用户中如何保证顺序号的连续且不重复。序列发生器是数据库的一种模式对象,可以解决上述问题,为应用系统开发人员提供顺序号的自动管理与维护。Init.ora中的参数SEQUENCE_CACHE_ENTRIES与序列发生器有关,影响内存中可以保留的顺序号个数。存储过程 可以调用存储过程的环境有:另一个存储过程的过程体或一个触发器中,一个存储函数可以从一个SQL语句中调用,其使用方式与调用Oracle内置的SQL函数是一样的。创建存储过程时,应当注意该存储过程的模式归属。同义词 利用同义