北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
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
,数据库设计与开发, 讲义
4.4.1 数据库应用程序类型
? 规划和配置数据库,需要知道将要操作数据库
的事务有什么,这些事务访问数据库的频率有
多大。针对不同的事务访问情形,对内存的要
求不同,磁盘 I/O操作的情形也不同。 只有设
置合适的 ORACLE实例,才能使数据库应用系统
获得快速、准确、可靠的事务响应。 ORACLE既
可以设置成处理长的密集型事务的系统,也可
以设置成处理大量的小型快速事务的系统。有
三种通用的数据库设置类型:
– 联机事务处理( OLTP)
– 决策支持系统( DSS)
– 批量作业系统
– 混合系统
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.1 数据库应用程序类型
– 联机事务处理( OLTP)
OLTP系统是一个包含繁重 DML的应用,其面向事务
的活动主要包括更新,但也包括一些插入和删除。典
型的例子是用于航空公司和旅馆的预定系统。 OLTP系
统可以允许有很高的并发性。
OLTP的特点是有大量短的事务高频率地访问数据库,
每一个事务操作的数据量不是很多,但事务比较频繁,
而且要求数据库响应事务的速度快。 一般来说 OLTP系
统需要 24*7地响应对数据库的请求。根据这些要求,
我们应该从以下几方面考虑:
1)大量的小回滚段。因为事务都不太大,对回滚
段空间的需求不可能很大,但事务数量多,引发回滚
段数量的增大。应该创建大量小的回滚段,把事务对
回滚段的争用减到最小。标准的配置可以考虑每四个
活动事务用一个回滚段,每个事务接受一个区间。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.1 数据库应用程序类型
– 联机事务处理( OLTP)
2) OLTP应用的表可能插入或者删除记录,所以存放
易变表和索引的表空间应被分配到它们最大的期望容量。
3)适当的估计重写日志缓冲区和日志文件大小,减
少日志写和日志切换的频率,尽可能降低对响应事务请
求的影响,另外频繁的检查点也可能影响事务响应速度。
4)拥有大型共享池。不同客户可能执行同样的 SQL语
句,SQL在共享池中缓冲,性能可提高(应用程序的 SQL
语句应当统一,另外 WHERE中使用绑定变量查询而不是
直接的值查询,使不同值的查询共享 SQL的执行计划)。
5)数据拥有单独的索引。 OLTP的事务请求基本在规
划设计范围之内,建立单独有效的索引,并在独立的表
空间中创建主键和其他索引,且存放在独立的存储器上。
6)使用小型临时段。需要小的排序应在内存中完成,
尽量避免 OLTP系统对临时段的请求进入磁盘。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.1 数据库应用程序类型
– 决策支持系统( DSS)
DSS系统通常是一个大型的、包含历史性内容的只读
数据库,通常用于简单的固定查询或特别查询。夜间
处理任务被认为是 DSS,查询(选择)是 DSS的主要活
动 。根据这些要求,我们应该从以下几方面考虑:
1)拥有少量的较大的回滚段。大型工作要创建大型
的回滚段,使用 SET TRANSACTION USER ROLLBACK
SEGMENT语句使事务强制使用专用回滚段。
2)为分类排序创建大型临时表空间,DSS经常超出
内存的使用空间而从内存转入磁盘(临时表空间)。
3)使用较小的共享 SQL区域而采用较大的数据缓冲
区高速缓冲。 DSS中 SQL的执行频率并不大,无需考虑
SQL语句的共享,但应增加数据库缓冲区高速缓冲的容
量,使得更多的数据块和回滚段在内存中高速缓冲。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.1 数据库应用程序类型
– 决策支持系统( DSS)
4)如前所述,DSS希望 Oracle块一次读取尽可能多的
行。因为 DSS查询一般触发整个表扫描,所以希望通过
读取多个连续的块使系统读取的块达到最大值。把
DB_BLOCK_SIZE和 DB_FILE_MULTIBLOCK_READ_COUNT参数
设置得尽可能高些。
5)运行的 SQL应当删除不必要的排序并充分利用索引,
以减少对临时表空间和回滚段的压力。 2种方法:在没
有可以选择的良好索引时不使用任何索引或屏蔽使用某
些索引(参见 4.3);使用位图索引。
6)不要在 DSS应用代码中使用绑定变量。在 OLTP下,
希望最小化应用进程开销 (语法分析 )。然而,DSS的查
询,语法分析占用整个查询时间的比例会更小。假如使
用绑定变量,优化程序不能调用它所存储的统计信息
(通过 ANALYZE命令)以选出存取数据的最好方法。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.1 数据库应用程序类型
– 批量作业系统
批作业处理系统是作用于数据库的非交互性的自动
应用。它通常含有繁忙 DML语句并有较低的并发性。
另外还有一些其他的应用类型:
OLAP(联机分析处理)系统可提供分析服务 。该系统在
数学、统计学、集合以及大量的计算方面区别于 OLTP
或 DSS模型。可以把 OLAP看作是在 OLTP系统或 DSS之上
的一个扩展或一个附加的功能层次。地理信息系统
( Geographic Information Systems,GIS)或有关
空间的数据库和 OLAP数据库相集成,提供图表的映射
能力。例如用于社会统计的人口统计数据库。
VCDB(可变基数数据库),这类数据库通常被用作
一个处理系统的数据库后端,这样就会导致在数据处
理期间,数据库中的表显著地增长或收缩。基数是指
在一个给定时间里一个表中行的数目。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.1 数据库应用程序类型
– 混合系统
混合系统混合了前面介绍的几种类型。许多实际应
用系统往往是 OLTP和 DSS甚至其他模型的集成。
从前面 OLTP和 DSS的需求对比来看,OLTP和 DSS的基
本特征似乎相反,如何协调这两种需求的矛盾?一般
有三种解决方法:
1) 在一个系统中的 OLTP和 DSS之间节流,白天运行
OLTP,而夜间进行批量处理。即白天运行 OLTP配置的
数据库,夜间跳回 DSS配置的实例。
这种方法的实际操作模式可以是以下两种,OLTP不
支持 24*7工作方式,DSS时不支持 OLTP; DSS操作的系
统反跳之后,OLTP可以使用,但系统性能将受影响。
DBA需要测试 DSS和服务器反跳对 Web用户的影响,必
要时选择其他解决办法来调整系统服务模式。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.1 数据库应用程序类型
– 混合系统
2) 同时运行两个数据库,一个服务于 OLTP,一个
服务于 DSS。 OLTP数据库进行实时更新,在有规则的
时间间隔内,将变化传递给 DSS数据库。
这种方法的实际操作模式可以多种。 DBA可以夜间
执行部分或全部 OLTP系统的输出,并输入到 DSS系统。
较好的解决方法是对实时方式下传递变化的连接数据
库使用复制技术,将变化的数据复制记录下来,OLTP
数据库只传递变化的数据给 DSS数据库。第三种方法
是使 ORACLE中 OLTP数据库的归档日志自动应用于 DSS
数据库,保证 DSS系统紧跟在 OLTP系统之后,DSS数据
库不仅作为 OLTP的备用数据库,而且自己又独立地服
务于决策支持。尽管这种方式可能不能保证 OLTP和
DSS数据库的绝对同步,但在 DSS的实时性要求不是很
强时,是一种很好的方法。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.1 数据库应用程序类型
– 混合系统
3) 在一个系统中同时运行 OLTP和 DSS。这是最普遍
的解决方法。系统经常作为 OLTP开始活动,逐渐加入
DSS需求使系统渐渐成为混合系统。
在这种情况下,DBA必须在 OLTP和批量处理之间寻
找平衡,并且应该偏向于 OLTP用户,创建与 OLTP同样
多的回滚段,而且要创建少量专门为大型事务指定的
大型回滚段,同时将高速缓冲和共享池保持合理的容
量,使系统既支持 OLTP对共享池的需求又支持 DSS对
数据库缓冲区高速缓冲的需求。还要确保临时表空间
够批量排序使用,同时将 OLTP排序控制在内存中。
推荐在这种情况下使用专用服务器,并且配置
ORACLE并行服务器 (Oracle Parallel Server,OPS),
因为 OPS允许多个实例访问同一个物理数据库,一个
实例为 OLTP配置,另一些为批量处理配置。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2 ORACLE空间设计
? ORACLE数据库的结构包括逻辑结构和物理结构。
在进行应用系统数据库设计时,空间设计是非
常重要的,它与今后运行系统的性能、可用、
维护、管理等有密切的关系。物理结构与逻辑
结构之间的关系如下图:
Tablespace
Segment
Extent
Oracle block
Data file
OS block
Database
Logical Physical
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.1 ORACLE表空间设计
? ORACLE表空间分为两大类:系统表空间和非系
统表空间。系统表空间是建库时自动创建的主
要用于存储数据字典、系统回滚段;非系统表
空间是由用户创建的表空间,主要用于分离段,
方便用户的数据管理。 ORACLE推荐一种最佳灵
活结构 OFA(Optimal Flexible Architecture)
可以用于表空间的设计。 OFA是 ORACLE软件安装
和数据文件的推荐目录结构 。 OFA只是一组建议,
并不是绝对原则。下面介绍基本 OFA和扩展 OFA。
– 基本 OFA
1)系统表空间( SYSTEM):系统表空间不具有重建
性,只用于存放数据字典,其他内容如数据段信息
等都应从系统表空间中移出。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.1 ORACLE表空间设计
– 基本 OFA
2)分离应用程序数据段( DATA):应用程序数据段
应是一个独立的表空间,即数据表空间。建立单独
数据表空间的理由是:应用程序与数据文件分离有
利于减少资源争用,简化文件管理;另外,当数据
段产生碎片时利于管理。
3)分离应用程序索引段( INDEX):索引段不应与
相关的数据段存储在一个表空间,以免产生资源争
用。由于表增长和不正确的尺寸设置可能产生索引
段的碎片,分离应用程序索引段,可以减少整理数
据表或索引碎片所需的管理代价。从数据表分离相
应的索引也可以通过 ALTER INDEX命令来实现。
4)分离工具段( TOOLS):许多第三方工具会将数
据存储在系统表空间中,为了避免这种情况,可将
它们的对象移出系统表空间。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.1 ORACLE表空间设计
– 基本 OFA
5)分离回滚段( RBS):回滚段会针对巨型事务动态
扩展尺寸,也会动态收缩到指定的优化尺寸(参见
4.3)。回滚段的 I/O通常与数据和索引表空间的 I/O同
步。将回滚段分离出来是出于减少 I/O冲突的考虑。
6)分离临时段( TEMP):临时段是数据库中动态生成
的对象,用来存储巨型排序操作(如 SELECT DISTINCT,
UNION,CREATE INDEX等)的数据。由于动态特性,临
时段不应与其他类型段一起存储。通常,在建立用户
时,将这些用户使用的临时数据段设置到临时表空间。
7)分离用户( USER):为用户帐号建立一个 USER表空
间,在建立用户时将用户的操作数据放在用户表空间。
以上 7个表空间是最基本的表空间,也是传统 OFA的
基本组成部分。随着应用的深入,又有扩展的 OFA。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.1 ORACLE表空间设计
– 扩展的 OFA
1)分离低使用数据段( DATA_2):在基表中,有一
些是动态数据,一些是静态数据,而动态数据和静
态数据常常被并发操作。静态数据在实际使用时只
是被提取信息,可以把这些静态数据表设置到一个
专用表空间( DATA_2),从而避免并发操作冲突。
2)分离低使用索引段( INDEX_2):数据表分为静
态表和动态表,则索引亦如此。对于静态表的索引
表应建立静态索引表空间( INDEX_2)。如果索引已
经生成,可以使用 ALTER INDEX语句来移动这些索引
到一个新的表空间中。
3)分离工具索引( TOOLS_1):如果数据库对 TOOLS
表空间有较多的操作,则这些工具表索引可以移到
另一个表空间( TOOLS_1),这样 TOOLS表空间就可
看成工具数据表空间。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.1 ORACLE表空间设计– 扩展的 OFA
4)分离特殊回滚段( RBS_2),RBS表空间的回滚段必
须有适当的大小和数量,以适应应用的使用。但大型
事务可能超过回滚段的配置。为了避免这种情况,可
以设置一个特殊回滚段,使大型事务只使用特殊回滚
段。建立一个特殊表空间来容纳这个特殊回滚段。
5)分离特殊用户临时段( TEMP_USER):和特殊回滚
段一样,一些特殊用户在做特殊操作时,可以设置一
个特殊用户临时表空间,这样便于系统管理。
– 附加的特殊应用 OFA扩展
1) SNAPS:用于快照 (Snapshots)。快照表是分布式数
据库处理的一种特殊表,为此类表建立相应的表空间。
2) PARTITIONS:用于分区 (Partition)。分区是为了
分配 I/O并且简化巨型表的管理。
3) TEMP_WORK:用于大型数据装载。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.2 数据文件设置
? 根据 ORACLE数据库结构特点,每个表空间至少要
有一个数据文件,因此,应用系统的每个表空间
均具有各自的数据文件。 Oracle 7.2以后可以支
持数据文件大小的重新定义,当表空间需要扩充
时,不必为其增加数据文件,而简单地将其扩充
即可,避免了预先分配过大的存储空间及过多数
据文件的问题。同时可以支持数据文件的自动扩
展,避免当表空间已满时,DBA手工扩充表空间
对用户使用的影响。
? 对于一个不太大的数据库,可以将数据库软件和
数据文件都放置在一个磁盘上,将它们设计成不
同的子文件即可。对于大型数据库,需要指定哪
些文件放置在哪个磁盘上。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.2 数据文件设置
– 表空间的磁盘分配,
一般情况下,90%以上的 I/O操作集中在系统表空间、
数据表空间、回滚表空间、索引表空间这 4个表空间
上,所以 这 4个表空间应单独存储在不同的磁盘上 。
– 系统文件的规划,
ORACLE有联机日志文件、归档日志文件、控制文件
和系统软件文件等,如何放置这些系统文件也是一件
重要的任务。
1)联机日志文件:每个数据库至少要有两个联机
日志文件,由于联机日志文件中保留了数据库的当前
事务,所以它无法从备份中恢复,他们是 ORACLE无法
用备份工具恢复的唯一文件类型。这类文件应单独存
储。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.2 数据文件设置
– 系统文件的规划,
2)控制文件:前面章节已经说明了控制文件的重
要性,每个数据库应当至少有 3个控制文件的拷贝,
它们被分布在 3个驱动器中。
3)归档日志文件:如果归档日志文件和联机日志
文件放在同一个磁盘上,当 LGWR在读盘时,ARCH也在
读同一磁盘,势必造成 I/O冲突,所以归档日志文件
和联机日志文件应分盘存储。
4) ORACLE软件,Oracle软件是系统运行的核心,
这些软件应放在独立的磁盘上。
– 磁盘规划设计,
磁盘规划设计可以依据下列准则:数据库必须可恢
复;必须对联机日志文件进行镜像;必须最小化 DBWR、
LGWR,ARCH之间的冲突;必须最小化 DBWR磁盘间的冲
突;估计数据库文件的 I/O量 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.2 数据文件设置
– 磁盘规划设计,
在磁盘规划设计过程中需要做一些数据库测量,以估
计其 I/O量,以下给出一参照的 7磁盘设计方案:
磁盘 存放内容
1 Oracle软件
2 SYSTEM表空间,控制文件 1
3 RBS,TEMP,TOOLS表空间,控制文件 2
4 DATA表空间,控制文件 3
5 INDEX表空间
6 联机日志文件 1,2,3,转储文件
7 应用软件,归档日志文件
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.2 数据文件设置
– 表空间与数据文件设置举例:
connect system/manager
create tablespace tsp_acct
datafile ‘d:\oracle\oradata\orcl\apacct.dbf’
size 32M reuse autoextend on next 4M maxsize unlimited;
create tablespace tsp_public
datafile ‘d:\oracle\oradata\orcl\appublic.dbf’
size 100M reuse autoextend on next 16M maxsize unlimited;
create tablespace tsp_temp
datafile ‘d:\oracle\oradata\orcl\aptemp.dbf’
size 500M reuse autoextend on next 32M maxsize unlimited;
连接数据库
创建 tsp_acct表空间
创建回滚段表空间
创建临时表空间
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.3 段存储分配设置
? 在数据库中,大量使用的段包括表段和索引段,
还有回滚段、临时段。表的逻辑定义信息放在
DBA_TABLES和 DBA_TAB_COLUMNS中,索引的定义
信息放在 DBA_INDEXS和 DBA_IND_COLUMNS中。从
存储管理角度看,表和索引都属于段,只是类
型不同而已,有关段及存储定义的系统数据字
典有 DBA_SEGMENTS和 DBA_EXTENTS等。
? 在应用系统中,对大量使用的段的规划主要是
它们的存储方案的设计,每个段由区间组成。
每个段使用的空间由它的存储参数决定,在
CREATE TABLE,CREATE INDEX,CREATE
CLUSTER,CREATE ROLLBACK等命令中都涉及到
STORAGE参数。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.3 段存储分配设置
? 如果在创建段的命令中不指定 STORAGE参数,
则使用它所在表空间的缺省参数。表空间的存
储参数或段的存储参数设计不合理将直接影响
数据库的性能,甚至直接影响到数据库的正常
运行。
对存储参数的确定问题,前面的讨论中已经
说明,应根据实际初始数据量的估算和数据的
动态变化情况以及段的性质等多方面来决定。
注意,ORACLE数据库在创建回滚段之后,状
态为脱机,因此必须由 DBA将其状态改为联机,
方可使用。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.3 段存储分配设置
? 段存储分配设置举例,
create table pat_master
(pat_id varchar2(10),name varchar2(8),… )
pctfree 10 pctused 60
storage (initial 16M next 16M minextents 1 maxextents
unlimited pctincrease 0)
tablespace tsp_acct;
create index pat_master_index
on pat_master (pat_id) pctfree 20
storage (initial 4M next 4M minextents 1 maxextents
unlimited pctincrease 0)
tablespace tsp_acct;
create public rollback segment rbs_public
tablespace tsp_public storage (initial 4M next 4M);
Alter rollback segment rbs_public online;
创建 pat_master表
创建 pat_master_index索引
创建回滚段
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.4 数据块利用设置
? 数据块空间利用参数可以控制表段和索
引段中的空间使用。分两类,控制并发性
的参数 (INITRANS和 MAXTRANS)、控制数
据空间使用的参数 (PCTFREE和 PCTUSED)。
? 可以使用 INITRANS和 MAXTRANS来确定一
个数据库块上活动事务的个数。
INITRANS是每个块的初始化事务入口数,
数据段和索引段的 INITRANS的缺省值分
别为 1和 2,增大其值则允许多个事务同
时操作数据块。 MAXTRANS是在每个块的
最大事务入口,缺省值为最大值 255。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.2.4 数据块利用设置
? 通过选择适当的 PCTFREE和 PCTUSED可以
提高性能和空间利用。对于改动较少的
表,在设置数据块空间利用参数时,
PCTFREE适当降低。对于经常改动的表,
尤其是数据行长度增加的改动,应该适
当提高 PCTFREE的设置,以免发生行转移。
数据行长度增加这类应用的一个例子:
医疗信息系统中,病案首页表中行的信
息开始长度可能不大 (许多字段值为空 ),
但随着病人住院的过程,行的信息不断
增加。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE安全设计
? 在 ORACLE中,DBA定义访问数据库的用户
名,安全域定义作用于用户的有关安全
方面的设置。
? 安全域包括:验证机制、表空间限额、
默认表空间、临时表空间、帐户锁、资
源限制、直接权限、角色权限 8个方面,
如下页图。 ORACLE的安全性设计围绕用
户的安全域展开。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE安全设计
Security
domain
默认表空间
临时表空间
表空间限额
资源限额直接权限
角色权限
验证机制
帐户锁
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE安全设计
– 安全域内容
1)验证机制:用户访问数据库可以通过数据
库、操作系统、网络这三种方式中的一种进
行验证,一个用户究竟使用何种验证方式,
根据具体需求决定。
2)表空间限额:表空间限额,可以控制一个
数据库的用户对数据库中表空间的物理存储
空间的分配数量。
3)默认表空间:定义用户在创建段时的存储
位置,当用户创建段时,如果指定存储表空
间,则使用定义段时指定的表空间,否则使
用这一默认表空间。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE安全设计
– 安全域内容
4)临时表空间:当用户执行排序操作时,临
时表空间定义临时段分配的位置。
5)帐户锁:帐户锁可以防止非法用户对系统
的登录。
6)资源限制:对用户使用资源进行一定的限
制。
7)直接权限:通过 GRANT直接授予用户的系
统权限和对象权限。
8)角色权限:通过 GRANT将系统权限和对象
权限授予角色,再将角色授予用户,使用户
间接获得权限。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE安全设计
– 口令和资源
配置文件是命名的一组口令和资源限制的设置集
合。 Oracle中存在一个名为 DEFAULT的配置文件,默
认配置文件中的所有项目都不受限制,如果创建用
户时没有指定配置文件子句,则系统将 DEFAULT指定
给该用户。
Oracle中允许 DBA修改 DEFAULT和用户定义的配置
文件,用 ALTER PROFILE命令。允许删除 DEFAULT和
定义的配置文件,用 DROP PROFILE CASCADE命令。
创建用户时需确定用户名和验证机制、指定默认
表空间和临时表空间、确定有关表空间的限额、指
定用户的配置文件。
ORACLE应用系统中一般定义一系列的用户和配置
文件、定义一系列的角色,然后将角色和配置文件
授予(或指定给)用户。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE安全设计
– 权限和角色
Oracle大约有 100多种的系统权限,包括诸如创建表
空间的系统范围级操作权限、诸如创建表的用户模式
内对象管理权限和诸如创建任意表的任意模式内对象
管理权限。系统权限和对象权限可以通过 GRANT或
REVOKE语句授予用户或收回。
角色是被命名的一组相关的权限,角色是属于系统
范围的,既不属于某个用户,也不属于某个模式。可
以把系统权限和对象权限授予角色,也可以把角色授
予另一个角色,最终把角色授予用户,由此方便
Oracle的安全管理。
使用角色的步骤是:创建角色、为角色授予相应的
权限、将角色授予特定的用户。
Oracle中有一些预定义角色可以使用,例如 DBA、
SELECT_CATALOG_ROLE等,DBA可以直接使用。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE安全设计
– 应用系统的用户
应用系统的安全设计一般要对用户进行分类,然后
根据用户类型的不同,对其进行设置、维护及管理。
数据库管理员( DBA),默认的数据库管理员
internal,sys和 system均具有 DBA权限。数据库打开、
关闭、恢复等操作时,需使用 internal;修改数据库
重要参数时使用 sys;其他一般管理应使用 system。
所有者( OWNER),对大型的应用系统,往往根据不
同的用户所属将对象进行划分,这样不同的用户拥有
不同的数据库对象,创建数据库对象的用户称为对象
的所有者(模式)。此类用户需要有 RESOURCE的权限。
一般用户( USER),一般用户即应用系统的最终用
户。此类用户对数据库而言仅需要有 CONNECT的权限
即可,但此类用户的角色权限和对象使用权限需要根
据具体工作和应用进一步规划和设计。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE安全设计
– 应用系统的一般用户
应用系统中除创建一系列数据库对象外,还
要创建一系列的应用程序,不同的应用程序执
行不同的操作。对于一般用户来讲,使用数据
库系统是通过使用用户管理应用程序开始的,
往往限制其使用一些应用程序的权力。对于这
种情形,处理办法是:在数据库和应用程序之
间建立用户管理应用程序层次,对每一个用户,
授予相应的数据库权限和使用应用程序的权限。
一般用户的配置:系统级权限仅限于角色
CONNECT,对象级权限仅限于相关应用系统的
自定义角色,应用程序使用权限仅限于相关应
用程序的使用级别 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE安全设计
– 应用系统的一般用户
在应用系统内部进行多个层次的检查和验证:
1)第一层,Oracle数据库系统层,判断其
能否建立会话。
2)第二层:应用程序的使用权限,检查验
证用户能够使用哪些应用程序。
3)第三层,Oracle数据库的对象级权限,
判断用户能否操纵其相应的对象,对象级权限
是通过自定义 Oracle角色来设置的。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE安全设计
? 在 ORACLE数据库中,当一个数据库用户被创建时,系统就
为该用户自动创建一个与用户同名的模式 。用户和模式的
概念在某种程度上是一样的。模式或用户可以拥有的对象
如下图。用户的定义应与数据库的对象定义结合起来。
Schema Objects
Tables 表
Triggers 触发器
Constraints 约束
Indexes 索引
Views 视图
Sequences 序列发生器
Stored program units 存储过程单元 (PL/SQL写 )
Synonyms 同义词
User_defined data types用户定义数据类型 (Oracle8i以后 )
Database links 数据库连接 (分布式数据库时使用 )
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE安全设计
? 安全设计举例:
create 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 data profile grace_5;
grant connect,resource to comm;
创建配置文件
创建用户
授权
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.4 ORACLE对象设计
? 数据库应用系统中肯定要建立大量的模式对象,
这些对象应作出合理的规划,尽量减少因设计
不周导致性能下降、表空间不足、用户权限不
够等问题的出现。
– 表
在创建表时,需要注意的事项如下:
1)对于表名、列名、约束名、索引名和聚集名使用
符合命名规则的并带有描述意义的名称。
2)建立相应完全的、详细的文档资料。
3)所有表都应当规范 (规范化至少是第三泛式 )。
4)定义允许为空的列,并保留一定的存储空间。
5)适当地使用聚集表,保留一定的存储空间。
6)表段应放在单独的表空间中。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.4 ORACLE对象设计
– 表
7)为了减少存储碎片产生,区间大小最好是数据块
的整数倍。
8)对于应用系统中频繁使用的数据行较少的表,考
虑使用 CACHE选项,即允许其长期保持在内存中,避
免反复读取,提高性能。
– 触发器
触发器作为 Oracle标准功能的补充提供给用户。使
用它通常实现如下功能:
1)自动生成可以派生的列值。
2)防止无效的处理。
3)增强复杂的安全验证。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.4 ORACLE对象设计
– 触发器
4)增强分布式环境中跨节点的引用完整性。
5)增强复杂的业务规则。
6)提供透明的事件登记。
7)提供高级的审计。
8)维护表复制的同步。
9)采集关于访问表的统计信息。
尽管触发器可实现许多功能,但是,能用其他方
式实现的功能尽量避免使用触发器 。过多的触发器
导致复杂的内部相关性,维护和管理变得复杂。特
别注意触发器的语句不要太多,不要创建递归调用的
触发器 (如一个对象的 AFTER UPDATE的活动中又有该
对象的 UPDATE操作 )。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.4 ORACLE对象设计
– 索引
索引一旦建立,其使用和维护都是由 Oracle自动实现
的。使用它应注意:
1)索引可以加速查询,但会降低修改速度,频繁改
动的表,尽量少建索引。
2)索引段应存储在独立的表空间中。
3)为减少存储碎片,区间大小应是数据块的整数倍。
4)为了避免索引的建立和改动操作生成大量的重做
日志,影响系统的性能,在创建较大索引时,使用
NOLOGGING选项。
5)由于索引项相对于数据项要短,使一个数据块中
容纳索引的数量要比数据行多,为了提高索引在数据
块一级上操作的并发性,可适当提高 INITANS参数的
值。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.4 ORACLE对象设计
– 索引
6)索引中 PCTFREE只在创建索引时使用。对于单调
增加的索引列值,可以将 PCTFREE设置得较低。因为
新的索引项始终是对已经存在的索引项的追加,不
需要在两个已经存在的索引项之间插入,所以没必
要预留过多的空间。如果索引列值是任意值时,则
可能需要预留较多的空间。
– 视图
对视图的操作类似表的使用,表可以使用的地方,
视图一般也可使用。视图可用于安全控制和简化查
询的目的,视图只能创建或删除,不能修改。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.4 ORACLE对象设计
– 序列
应用系统中,经常使用顺序号,并发用户中如何保证
顺序号的连续且不重复。序列发生器是数据库的一种
模式对象,可以解决上述问题,为应用系统开发人员
提供顺序号的自动管理与维护。 Init.ora中的参数
SEQUENCE_CACHE_ENTRIES与序列发生器有关,影响内
存中可以保留的顺序号个数。
– 存储过程
可以调用存储过程的环境有:另一个存储过程的过程
体或一个触发器中,一个存储函数可以从一个 SQL语
句中调用,其使用方式与调用 Oracle内置的 SQL函数
是一样的。创建存储过程时,应当注意该存储过程的
模式归属。
– 同义词
利用同义词可以将应用系统中模式对象的模式屏蔽掉。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.3 ORACLE对象设计
? 对象设计举例:
create table emp
(empno number(5) primary key,ename varchar2(15) not null,
deptno number(3) not null constraint dept_fkey references dept)
pctfree 10 pctused 40 tablespace users
storage(initial 50K next 50K maxextents 10 pctincrease 25);
create or replace trigger inp_bill_detail_insert
after insert on inp_bill_detail for each row
begin
update pats_in_hospital set
total_costs=decode(total_costs,null,0,total_costs)+:new.costs,
total_charges=decode(total_charges,null,0,total_charges)+:new.charges
where patient_id=:new.patient_id and visit_id=:new.visit_id;
end; /
create view exam_item_dict as
select item_code,item_name from clinic_item_dict where item_class=‘D’;
grant select on exam_item_dict to public;
创建触发器
授权
创建表
创建视图
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.5 DBA工具
? 通常情况下,DBA的操作都是以命令行的方式进
行,尤其对复杂任务。企业管理器 (Oracle
Enterprise Manager,OEM)给 DBA提供了图形界面。
Database Administration Tools
Tool Description
Oracle Universal
Installer(OUI)
Used to install,upgrade,or remove software
components
Oracle Database
Configuration
Assistant
A graphical user interface tool that interacts with the
OUI,or can br used independently,to create,delete
or modify a database
Password File
Utility
Utility fro creating adatabase password file
SQL*Plus A utility to access data in an Oracle database
Oracle Enterprise
Manager
Agraphical interface used to administer,monitor,and
tune one or more database
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.4.5 DBA工具
DBA Tools
(Standard application that can be launched from OEM)
Tool Description
Instance Manager Performs startup,shutdown and
monitor databases
Security Manager Used to manage users and privileges
Storage Manager Maintains tablespaces,data files,
rollback segments and log groups
Schema Manager Used to create and maintain objects
such as tables,indexes,and views
SQL*plus
Worksheet
Provides the capability to issue SQL
statements against any database
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
作业,
1.简述使用 Oracle数据库的步骤,
2.数据库应用程序的类型有哪些?混合系
统的数据库规划应注意哪些方面?
3.空间设计包括哪些方面?
4.安全性设计包括哪些方面?
5.表对象的设计应注意哪些方面?