北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.ORACLE数据库
? Oracle公司 1977年在加利福尼亚的 Redwood成
立,在 IBM的 System/R(关系模型 )的基础上,
推出了第一个使用 IBM的结构化查询语言 SQL的
RDBMS。今天,Oracle RDBMS可用于几乎所有
的操作环境,包括 IBM大型机,DEC VAX小型机、
基于 UNIX系统的小型机,Windows NT以及一些
专用硬件操作系统平台;该公司是世界上最大
的 RDBMS供应商,也是世界上最主要的信息处
理软件供应商,是仅次于微软公司的世界第二
大软件公司,在信息高速公路中扮演着一个重
要的角色。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.ORACLE数据库
? 本章介绍 ORACLE数据库管理系统 。
4.1 ORACLE数据库体系结构
4.2 ORACLE数据库实例管理
4.3 ORACLE数据库存取管理
4.4 ORACLE数据库规划和实施
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1 ORACLE数据库体系结构
? ORACLE产品结构:
– Oracle纵向产品,例如 Oracle DBMS,Oracle应用
服务器。另外,Oracle还提供了许多可用的开发工
具,这些工具包括 Designer/2000计算机辅助系统
工程 (CASE)工具和 Developer/2000 开发包。随着
INTERNET的发展,这些工具正逐渐变得基于 Web。
– Oracle横向产品, Oracle的应用软件为 Oracle带来
了大量收益。这些产品包括:
Oracle财务软件 (Oracle Financial);
Oracle制造业软件 (Oracle Manufacturing);
Oracle人力资源软件 (Oracle Human Resources);
Oracle自动控制软件 (Oracle Automotive);
Oracle保健系统;
Oracle基于不同客户环境的 Oracle RDBMS服务器工具,包括
Discoverer,Express及其他的软件。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1 ORACLE数据库体系结构
? ORACLE产品结构:
1.数据库, Oracle数据库服务器 (对象选件、分区、空间、
分布式、并行、多媒体 )。
2.开发工具,
1) C/S,developer2000(对应微软 VB)
2) B/S:服务器,IAS(对应微软 IIS)
开发工具,PL/SQL,Portal
Jdeveloper(Java开发工具 )
3) CASE,Designer(可生成 60%以上的 Form和 Report)
4)数据仓库,Discoverer(关系数据库 )
Express(多维数据库 )
3.ORACLE应用, ERP:财务管理、企业内部管理
CRM:客户关系管理、企业外部管理
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1 ORACLE数据库体系结构
? Oracle信息技术的显著特征:
– 决策支持系统 (DSS):以 Oracle Server为基础数据仓
库,使用 Express及 Oracle Discoverer等决策支持工
具,Oracle确立了其在 DSS领域的地位。
– 海量数据管理,Oracle对海量数据的管理非常重视,
版本 7.3中采用了数据分区的办法。采用数据分区后,
海量数据分成很多可管理的块,当系统操作或用户会
话处理查询时又能透明地将分块的数据组织起来。
– 保密机制,Oracle的高级保密机制通过各种各样的特
权,控制对敏感数据的存取。用这些机制来保证某些
用户能查看敏感数据,而有的用户被禁止。
– 备份与恢复,Oracle提供了高级备份和恢复的子例程。
备份创建 Oracle数据的一个副本,恢复把备份的数据
恢复出来。 Oracle的备份和恢复把数据丢失的可能性
降到最小,并使出现故障时的排错时间最少。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1 ORACLE数据库体系结构
? Oracle信息技术的显著特征:
– 空间管理,Oracle提供了灵活的空间管理。用户可以
为存放数据分配所需磁盘空间,也可以通过指示
Oracle为以后的需求留下多少空间来控制后继的分配。
– 开放式联接,Oracle提供和其他软件联接的开放式接
口。使用 Oracle Access Manager,用户很容易就能
将别的软件商开发的软件所运行的系统集成起来。
– 开发工具,Oracle Form和 Oracle report是 Oracle提
供开发工具的核心。与 Web相连进行发布,Oracle企
业开发套件中捆绑了一些组件,使得发布灵活、操作
性强、易于维护,很容易开发出不同层次的应用。套
件中有如下四个主要组件:
Oracle Designer; Oracle Developer;
Oracle Developer Server; Oracle Application Server。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1 ORACLE数据库体系结构
? DBA应当了解 ORACLE数据库是如何工作的和为什
么要那样工作,只有这样,DBA才能自如地调整
ORACLE数据库的对象,满足不同工作的需要。
首先介绍 ORACLE数据库的体系结构。
4.1.1 ORACLE数据库
4.1.2 系统数据库对象
4.1.3 用户数据库对象
4.1.4 数据库段
4.1.5 数据字典
4.1.6 其他对象
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.1 ORACLE数据库
? Oracle数据库定义, Oracle数据库为共同组成数据处
理环境的配置文件、数据文件、控制文件以及重做日志
文件的集合;也可以理解为处理数据文件的一批程序。
Oracle数据库 用来描述建立关系型数据库管理系统
(RDBMS)的逻辑的和物理的数据结构。
? 从逻辑上讲,一个数据库由若干个 表空间 组成,每个
表空间中有若干个表或其他数据库对象,表空间又分为
数据段、索引段等 段,每个段中又分为若干 区间,每个
数据区间由若干个 数据块 组成。
? 从物理上讲,一个数据库由若干个 物理文件 组成,物
理文件有数据文件、日志文件、控制文件、初始化文件、
归档文件、口令文件等。
? ORACLE数据库系统由 物理文件、内存结构,Oracle进程
三部分组成,内存结构,Oracle进程又组成 实例 。没有
例程的数据是死数据。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.1 ORACLE数据库
Oracle
体系结

Inatance
内存 共享池
SGA数据库缓冲区
日志缓冲区
进程
DBWR:数据库写入
其他进程:恢复、
快照、锁等
LGWR:日志写入
CKPT:检查点
SMON:系统进程
PMON:进程监控
ARCH:归档进程
Database
物理
存储
数据文件 其他文件:参数文
件、口令文件、归
档文件日志文件
控制文件
逻辑
存储
表空间

区间

北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.1 ORACLE数据库
Database
Instance
SGAShared pool
Database
Buffer cache
Redo log
Buffer cache
Library
cache
Data Dict
cache
PMON SMON DBWR LGWR CKPT Others
Password
file
Parameter
file
Data
files Controlfiles Archived
Log files
Redo log
files
User
process
Server
process
PGA
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2 ORACLE系统 数据库对象
? 数据库对象 分两种类型:一类是由 RDBMS内部使
用 的对象,称为系统数据库对象 (system database
object),另一类是可以通过 任何程序访问的对象,
称为用户数据库对象 (user database object)。
? 系统数据库对象,是指 RDBMS用于支持内部数据
库功能的数据库对象。这些对象是由数据库系统
管理员或服务器本身配置和创建的,并且不显式
地用于用户数据库事务。系统数据库对象有:
– 初始化参数文件
– 控制文件
– 联机和归档重做日志文件
– 追踪文件
– ROWID(行内部地址)
– Oracle 块
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.1 初始化参数文件
– 初始化参数文件:也称为启动参数文件,文件缺省名
为 init.ora,是 DBMS主要的配置点,包括定义名称的
参数、设置静态限制的参数、影响动态性能的参数,
控制或修改数据库和实例操作的某个方面。 当数据库
启动时,在创建实例或读取控制文件之前,先读取
init.ora文件 。
init.ora文件中的值决定着数据库和实例的特性,
例如共享池、高速缓存、重做日志缓存分配、后台进
程的自动启动、控制文件的读取、自动联机回滚段等
等。直到数据库被关闭并重新启动,对 init.ora文件
中参数的更改才被承认。
init.ora是一个 ASCII文本文件,默认条件下,文
件的名字为 init SID.ora,SID相当于它所控制的数
据库的标识符。每个 Oracle数据库和实例都有它自己
唯一的 init.ora文件。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.1 初始化参数文件
– 初始化参数文件:
在 Oracle RDBMS中,缺省的 init.ora文件位于 UNIX
服务器上的 $ORACLE_HOME/dbs目录下或 NT服务器上的
$ORACLE_HOME/database目录下。当创建新数据库和
实例时,这个文件可被复制和重新命名。
通过查询 V$PARAMETER视图,可以从数据库内部观
察 init.ora文件中的配置参数集。 V$PARAMETER视图
把所有的 init.ora 参数和它们的值都列出来,并且
每一个值都有一个标记符,用以指明参数值是否为服
务器默认值。
通过调整初始化参数可以改善数据库系统的整体性
能。
下表是 init.ora参数的一些表述,详细的参数设
置可参看使用手册。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.1 初始化参数文件
参数 缺省 范围 说明
audit_trail
background_dump_dest
control_files
db_block_buffers
db_block_size
db_files
db_name
db_file_multiblock_read_co
unt
dml_locks
log_archive_dest
log_buffer;
log_checkpoint_interval
none
32
2048
空值
none,DB
文件名 …
4..无限
依赖 OS
库名
使行写入审计跟踪接通或断开 ;
Oracle后台进程 LGWR,DBWR所使用的
追踪文件的路径 ;
数据库的控制文件 ;
包含在高速缓存中的数据库块数目 ;
Oracle 数据库块的大小。在数据库
建立起来后,这个值就不能改变了 ;
能够打开的数据库文件的最大数目 ;
可选择的数据库的名字。如果使用该
参数,它必须与用在 CREATEDATABASE语句
中的数据库名称相一致 ;
在顺序扫描中,一次 I/O操作所能读取
数据库块的最大数。这是用于顺序搜索的,
是非常重要的 ;
DML封锁的最大数 ;
归档重做日志文件的最终位置 ;
分配给重做日志缓冲区的字节数 ;
触发一个检测点需要填充的重做日志文件
块数 ;
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.2 控制文件
– 控制文件:控制文件是数据库的心脏,存储着数据
库的结构信息,它包含以下信息:属于数据库的数
据文件和重做日志文件的位置信息、数据库中的数
据应该以何种字符集存储的信息、数据库中每个数
据文件的状态和版本信息、检查点信息、表空间信
息、回退段信息、以及其他的重要信息。
包含在控制文件中的大部分参数是在数据库创建
过程中设定的,相对来说是静态的,它们不是经常
改变的。 控制文件采用二进制格式,并且是不可读
或手工编辑的 。
数据库可以操作多个控制文件。特定控制文件的
创建是在 init.ora参数 CONTROL_FILES中指定的。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.2 控制文件
– 控制文件:
如果没有正确的控制文件或控制文件毁坏,数据库
将无法启动,并且存储在数据库中的数据信息将无法
访问。正是由于这个原因,控制文件的镜像备份功能
是被 Oracle服务器内部支持的,并且也是大力推荐的 。
如果要将控制文件镜像备份到一个新的数据库中,
只需要在发出 CREATE DATABASE命令之前,为
CONTROL_FILES指定一个以上的参数值即可。
如果要将控制文件镜像备份到一个现有数据库中,
必须关闭数据库,将当前的控制文件拷贝到你想要备
份的目录当中,编辑 init.ora中的 CONTROL_FILES参
数,以指定新的控制文件的位置,然后启动数据库。
注意:应至少提供两个控制文件,并存放在不同的
磁盘上。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.2 控制文件
– 改变任何控制文件参数,必须重新创建控制文件 。重
新创建控制文件的步骤如下:
1)备份数据库。修改控制文件过程中,出现的任何一个错误都会毁
坏数据库,使之无法恢复。
2)执行 ALTER DATABASE BACKUP CONTROLFILE TO TRACE命令,建立
一个用户追踪文件(位于 USER_DUMP_DEST),该文件带有重建当
前控制文件所必须的命令。
3)编辑所产生的追踪文件。除了 CREATE CONTROLFILE语句外,删除
追踪文件中的所有行,设置新的参数值。
4)正常关闭( SHUTDOWN NORMAL)数据库。将旧的控制文件移放到
备份目录里,确保 Oracle在数据库启动时,不能在目录中找到控
制文件的任何副本。
5)执行 STARTUP NOMOUNT命令启动数据库,运行你所编辑的 CREATE
CONTROLFILE追踪文件,这将重建带有新参数值的控制文件。
6)执行 ALTER DATABASE OPEN命令。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.2 控制文件
– 在数据库创建时,把数据库参数值设为比你所需要的
值高一些,可以避免重建你的控制文件 。可配置的系
统控制文件参数,
MAXLOGFILES,联机重做日志文件的最大数 ;
MAXLOGMEMBERS,每个重做日志文件的最大成员数 ;
MAXDATA FILES,数据文件的最大数 ;
MAXINSTANCES,能够安装到这个数据库上的最大实
例数(并行服务器) ;
MAXLOGHISTORY,用于恢复实例的归档重做日志文件
组的最大数(并行服务器) ;
注意要改变数据库名,要像前面所描述的那样重新
创建控制文件。
V$CONTROLFILE视图列出了 Oracle服务器当前正在读
写的控制文件。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.3 联机重做日志文件
– 联机重做日志文件,日志写后台进程( LGWR)将重做日
志缓冲区的内容写入联机重做日志文件中,重做日志
贮存了数据库的所有变化信息,并在数据库的恢复期
间被 Oracle使用。联机重做日志文件为二进制文件,
结构不公开。
联机重做日志文件至少由两组重做日志文件组成,
并且按照一种循环的特性写入 。
LGWR
成员 1 成员 2 成员 3
成员 1 成员 2 成员 3 成员 1 成员 2 成员 3
日志组 1
日志组 2 日志组 3
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.3 联机重做日志文件
– 联机重做日志文件,
当前日志组被填满时,LGWR进程停止对它的写入而
转到下一个日志组。当日志切换发生时,前面写入的
重做日志组被归档 (ARCH)进程锁定,并被拷贝到磁盘
或磁带上。
如果 LGWR追上 ARCH进程,并且需要实时写入由 ARCH
正在写入的组时,所有的数据库活动将被挂起,直到
ARCH进程写完日志。 日志组不够用则影响数据库性能 。
每个日志组可由多个成员组成,日志组的每个成员
是其他成员的精确镜像,并且重做日志项被并行地写
入每个成员中。通过在每个组中使用多个成员,能防
止数据库由于丢失重做日志而导致失效。只要组里有
一个成员是可用的,数据库就能继续工作。
V$LOG和 V$LOGFILE视图保存联机重做日志文件的信
息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.4 追踪文件
– 追踪文件:所有的 Oracle数据库都至少有一个文件用于
记录系统信息、错误及主要事件 。这个文件叫做
sidALRT.log (sid是数据库系统的标识符),存储在由
init.ora参数 BACKGROUND_DUMP_DEST指定的位置。
当调查数据库故障时,应首先查看该文件,关键的错
误总是在这里被记载。
后台进程和用户进程也建立它们自己的追踪文件,记
载出现故障的信息。后台进程追踪文件贮存在
BACKGROUND_DUMP_ DEST所指定的位置,用户进程追踪文
件贮存在由 USER_DUMP_ DEST参数设置所指定的目录里。
后台进程追踪文件被命名为 sidPROC.trc,PROC是后台
进程的名字。用户会话追踪文件带有一个 ora前缀,后面
是一系列带有,trc文件扩展名的唯一标识数字。
可以在 V$PARAMETER视图中获得 BACKGROUND_DUMP_DEST
和 USER_DIMP_DEST参数的当前设置。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.5 ROWID
– ROWID,Oracle数据库能够用 ROWID(行内部地址 )唯
一识别数据库中的每一行 。
ROWID的格式,BBBBBBBB.RRRR.FFFF,BBBBBBBB是
数据文件中行所在的块号 (采用 16进制 )。 RRRR是数
据行所在块中的行号 (采用 16进制 ),FFFF是块所在
的文件号 (采用 16进制 )。
通过查询 DBA_DATA_FILES视图,可以把 RDWID中的
文件号和文件名相匹配。
当每行在第一次创建时,都会被分配一个 ROWID。
除非该行被删除或该行所在的段被重组 (通过导入 /
导出工具等等 ),否则这个 ROWID保持不变。
在数据库中使用 ROWID 是找到一行的最快方法。
数据库的每个表都有一个名为 ROWID 的伪列
(pseudocolumn),通过查询它可以列出表中每一行
的 ROWID。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.5 ROWID
– ROWID:
因为 ROWID的唯一性,它可以被用来创造性
地解决许多不同的难题 。
例如:下面的 SQL显示一个在其中含有表的行
的数据库文件数目:
select
count(distinct(substr(rowid,15,4)))
from 表;
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.6 ORACLE块
– Oracle块,Oracle块是数据库服务器能够访问的最
小存储单元。 Oracle块的大小是指一次 I/O过程中,
RDBMS从数据文件中读写的字节数、数据库对象大小
和高速缓存中的块也是以 Oracle块的形式设置的。
一个 Oracle块是由操作系统块组成的,但它们并不
相同。 Oracle块是操作系统块的整数倍 。例如:在
UNIX中,操作系统块通常为 8KB,那么将
db_block_size设置为 8192,16384等,使它成为 8KB
的整数倍。
Oracle块的大小是在数据库创建时为数据库设置的,
是不能改变的 。如果在创建数据库后,需要大一些的
(或小些的 )块,那么就必须重新建立整个数据库。
每个 Oracle块都包含头信息空间、块中数据将来的
更新空间以及块中实际存储行所占空间。块头保存着
诸如数据库段、同时可以有多少事务访问块等信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.2.6 ORACLE块
– Oracle块
每个块还分配了一定量的空间,用于块中贮存行的
将来更新 (PCTFREE和 PCTUSED存储设置来控制 )。
因为数据库块决定着在每一次 I/O操作中能从数据
文件中读取的字节数,所以它的大小是非常重要的调
整因素。 一个过大的数据库块将会把一些不必要的数
据读进缓冲区,而一个太小的块则会导致行链接 。
联机事务处理( OLTP)应用有时可以从较小的块
( 4KB或 8KB)上获益。
对于数据仓库或决策支持系统 (DSS)数据库来说,
较大的数据库块能够极大地提高性能。这些类型的应
用在一个事务过程中,常常需要处理大量的数据,并
且通常考虑系统的响应时间以分钟来计时,而不以秒
来计时。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.3 ORACLE用户 数据库对象
? 用户数据库对象,用户数据库对象是指那
些不是 Oracle RDBMS专用的对象。
当然,用户数据库对象是受 Oracle内部
管理的,但是它们能够提供一组用户建造
块,利用这些块用户可以创建自己的数据
库。用户数据库对象包括数据文件、区间、
表空间以及数据库段。
– 数据文件
– 区间
– 表空间
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.3 ORACLE用户 数据库对象
– 数据文件, Oracle数据文件是操作系统文件。
每个数据文件被分配给一个表空间,并且拥
有存储在那个表空间里的实际数据。 存储在
数据文件中的数据采用 Oracle二进制格式,
这样除了 Oracle外,不能被其他任何东西读
取。
数据文件是使用 CREATE TABLESPACE或
ALTER TABLESPACE创建的。一个数据文件的
大小是根据 CREATE语句中指定的大小来建立
的,而不是由它所贮存的数据量决定的。
访问 DBA_DATA_FILES和 V$DATAFILE视图,
可获得数据文件中为数据库定义的有关信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.3 ORACLE用户 数据库对象
– 区间:区间 (extent)是一个存储单位,由一
个或多个逻辑连续的 Oracle块组成,每个数
据库段都是由一个或多个区间组成,在一个
数据库段中的每个区间的大小可以相同或不
同。
一个数据库段在对象创建时,完全按照
CREATE命令的存储子句中所指定的来分配区
间 。当一个段无法把新数据填充到它当前分
配的区间中时,必须为它分配其他的区间。
下一个新区间的分配管理是数据库空间管理
主要涉及的内容。
区间信息贮存在 DBA_EXTENTS视图中。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.3 ORACLE用户 数据库对象
– 表空间:表空间 (tablespace)是一个数据结构,用于
组合被相似地访问的数据。 每个表空间都是由一个或
多个数据文件组成的,所有的数据库对象必须被指定
一个表空间,它们在那里被创建 。这样一来,组成对
象的数据就被贮存到分配给指定表空间的数据文件中。
表空间被用于分隔涉及数据访问的 I/O,例如:可
以创建一个表空间来存储数据对象,也可以创建另外
一个表空间来存储索引对象。通过给驻留在不同物理
磁盘上的表空间分配数据文件,可以确保对索引数据
的访问不会影响对索引指向的数据的访问。
在数据库备份和恢复中,表空间也扮演了一个重要
的角色。因为一个表空间直接映射着一个或多个数据
文件,备份和恢复数据通常是在表空间(数据文件)
级下进行的 。
在 DBA_TABLESPACES可查看表空间的信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.4 ORACLE数据库段
? 数据库段( database segment)是贮存在数据
库中的用户建立的对象 。
? 除了用户创建的数据和索引段外,通常还有临时
段和回滚段。尽管拥有合法权限的用户可以创建
这些段,但最好由 DBA创建,然后让应用用户和程
序共享这些段。
– 表,表( table)是存储数据的数据库段。每个表是由
一个或多个列组成的,每个列都被指定一个名字和数
据类型,每个列的数据类型为贮存在表中的数据定义
了类型和精度。
DBA_TABLES和 DBA_TAB_COLUMNS包含数据库中关于
表的信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.4 ORACLE数据库段
– Oracle表的数据类型,
CHAR 固定长度的字符,尾部使用空格填充,<=255字节
VARCHAR 变长字符,<=2KB
VARCHAR2 变长字符,<=2KB
LONG 变长字符,<=2GB
NUMBER 变长数字
DATE 日期和时间,从公元前到公元后 4712年 12月 31日
RAW 变长原始二进制数据,<=255字节
LONG RAW 变长原始二进制数据,<=2GB
Oracle建议所有的变长字符定义为 VARCHAR2,而不
是 VARCHAR。 Oracle保证永远不对 VARCHAR2做出导致
需要对应用程序修改才能使其向上兼容的功能性变化。
因为 VARCHAR的功能是由 ANSI标准委员会授权管理的,
Oracle不能保证这些功能在新版本里不发生巨大的变
化。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.4 ORACLE数据库段
– 索引,索引 (index)是为了加速对特定表数据的访问而
创建的数据段 。一个索引拥有表的一列或多列的值以
及与这些列值相对应的行内部地址 (ROWID)。当
Oracle服务器需要在表中查找某一指定行时,它在索
引中查找 ROWID,然后直接从表中提出数据。
在 Oracle中有几种可用的索引类型 。最常用的是 B-
树索引。簇索引是在簇中被表共享的列的索引,不同
于常规的索引,簇索引在索引中只存储一次索引键值,
而不管索引键在表中重复多少次。在簇上能够执行任
何数据操作语言前,必须在簇上创建簇索引。
最新的索引类型是位映射( bitmap)索引,在基数
较低(不同值数量较小)的列中,位映射索引可以比
传统的 B-树索引更小,更有效。
DBA_INDEXES和 DBA_IND_COLUMNS含有关于数据库中
全部索引的信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.4 ORACLE数据库段
– 回滚段,回滚段( rollback segment)是存储在数据
库事务中发生改变的原始数据块的数据库对象。它们
用于提供数据的已经改变但尚未提交的读一致性视图 。
多个用户会话可以共享一个回滚段,每个回滚段至
少由两个区间组成。当一个事务开始时,用户会话在
一个可用回滚段中得到一个可用区间的专用锁,如果
事务填满了第一个区间,它会被分配另一个区间。如
果另一个区间不可用,回滚段会自动地给自己分配其
他的区间,叫回滚段扩展 (rollback segment extension)。
如果回滚段不能分配其他的区间(因为已经达到回
滚段最大区间数,或者在回滚段表空间上没有更多的
自由区间),那么就会出现错误,而且事务将被回滚。
回滚段区间的分配影响数据库的性能,因此尽可能
在没有分配新区间的情况下,使所有事务能够执行 。
DBA_ROLLBACK_SEGS视图中含有关于回滚段的信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.4 ORACLE数据库段
– 表簇,表簇( table cluster)是一个数据库
对象,它 可以将那些经常在相同数据块中一
起使用的表进行物理分组 。当处理那些经常
连接在一起进行查询的表时,表簇是特别有
效的。一个表簇存储簇键以及簇表中的列值。
– 哈西簇,哈西簇( hash cluster)是数据库存
储的最后选项。 在一个哈西簇中,表是基于
哈西值组织的,在表的主键值上使用哈西函
数可以得到这个哈西值 。在从哈西簇中提取
数据时,哈西函数被用于要求的键值上,结
果值给出 Oracle哈西簇中的存储数据的块。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.5 ORACLE数据字典
? 数据字典( data dictionary)是存储在数据库
中的所有对象信息的知识库,Oracle使用数据
字典获取对象信息和安全信息,而用户和数据
库系统管理员用它来查阅数据库信息 。它保存
着数据库中数据库对象和段的信息,例如表、视
图、索引、包以及过程,它还保存着关于如用户、
权限、角色、审计和约束等的信息。 数据字典
是只读的,由四部分组成:内部 RDBMS( X$) 表、
数据字典表、动态性能 (V$)视图和数据字典视图。
– 内部 RDBMS( X$)表,Oracle数据库的心脏就是所谓的
内部 RDBMS( X$)表,这些表被 Oracle RDBMS用于跟
踪内部数据库信息。 X$表是加密命名的且几乎是无法
解密的。 X$表被设计成不能被数据库系统管理员或用
户直接使用 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.5 ORACLE数据字典
– 数据字典表,数据字典表 ( data dictionary table)
存储表、索引、约束以及所有其他数据库结构的信息。
它们属于 SYS,在数据库创建时自动发生。 在数据字
典视图中可以找到数据字典表中的大部分信息 。
– 动态性能视图,动态性能( V$)视图( dynamic
performance( V$) view)是 Oracle数据库系统管理
员的主要依靠,这些视图包含了大量数据库函数运行
时的性能和统计信息 。它们还具有相当的可读性(与
X$表相反),也就是说能够被数据库系统管理员用于
诊断和解决问题。关于大多数 V$视图的文档能够在
Oracle Reference Manual中查到。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.5 ORACLE数据字典
– 数据字典视图,数据字典视图是在 X$和数据字
典表上创建的视图,也就意味着它们能被终
端用户和数据库系统管理员使用和查询,它
们被分成三类,DBA_,ALL_和 USER_视图 。
DBA_视图包含了数据库所有对象的信息。例
如,DBA_TABLES包含所有已创建表的信息,
ALL_视图包含了用户查询表时可以访问的所
有对象的信息,USER_视图包含了用户查询表
时表所拥有的全部对象的信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.6 ORACLE其它对象
? 在数据库中还贮存着一些其他的对象,这些对象
没有被准确地按段分类,它们包括视图、序列、
同义词、触发器、数据库链以及存储包、过程和
函数。
– 视图 (View):视图是存储的能够被查询的 SQL语句。视
图用于隐藏一些数据,并使复杂的查询变得易于理解
和使用。通过在远程数据库表上创建视图,视图也能
被用于隐藏分布式数据库对象。任何可以做为 SQL查
询而执行的语句,都能被创建成为一个视图。
在设计应用程序时,视图是非常有用的,因为它们
能够以表的形式隐藏复杂的查询逻辑,使得更易于查
询。它们可以和嵌在它们内部的优化器提示一起被创
建,以确保最佳的查询性能。
DBA_VIEWS视图存有在数据库中创建的视图的信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.6 ORACLE其它对象
– 序列 (Sequence):序列是用于产生唯一数码的数据库
对象。序列创建时带有初始值、增量值以及最大值。
每次从序列中返回一个数字,当前序列值是一个一个
递增的,每个序列产生的数字可达到 38位长度。
可以通过选择来自序列的 NEXTVAL或 CURRVAL伪列使
用序列。例如:一个名为 EMP_SEQ的序列,
执行 SELECT EMP_SEQ.NEXTVAL FROM DUAL;
返回序列的下一个整数值,并且当前序列值加 1;
执行 SELECT EMP_SEQ.CURRVAL FROM DUAL;
返回当前序列的整数值。
序列最通常的用途是提供唯一的数字作为表主键列
的代用品 。
有关序列的信息贮存在 DBA_SEQUENCES视图中。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.6 ORACLE其它对象
– 触发器 (Trigger):触发器是存储过程,当针对一个表
发生特定的动作时,就会激活它。触发器可以被编码。
当针对一个表进行插入、更新、删除或三种操作的结
合时,激活触发器,也可以在某行被影响或某条语句
出现时被激活。触发器经常用于加强数据完整性约束
和业务规则。
关于触发器的信息可在 DBA_TRIGGERS视图中找到。
– 同义词 (Synonym):同义词是指向其他数据库表的数据
库指针。 当创建一个同义词时,就指定了一个同义词
名字和同义词所引用的对象 。当你引用同义词名字时,
Oracle服务器会自动地用同义词定义的对象名字来代
替同义词的名字。
同义词有两种类型:私有( private)和公共
( public) 。私有同义词是在指定的模式中创建的,
并且只允许拥有它的模式访问。公共同义词由 PUBLIC
模式所拥有,所有的数据库模式都可以引用它们。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.6 ORACLE其它对象
– 同义词,
如果执行 SQL语句, SELECT * FROM EMP;”,Oracle
服务器中对象名字的解析顺序 是,
1)首先,服务器查看在发出命令的用户模式中是
否有名为 EMP的表或视图。
2)如果这个表或视图不存在,Oracle检查名为 EMP
的私有同义词是否存在。
3)如果这个私有同义词存在,这个同义词所引用
的对象将取代 EMP。
4)如果这个私有同义词不存在,检查名为 EMP的公
共同义词是否存在。
5)如果这个公共同义词不存在,Oracle返回消息
,ORA-00942,table or view does not exist”。
关于公共同义词的信息贮存在 DBA_SYNONYMS中。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.6 ORACLE其它对象
– 数据库链( database link),数据库链是与远程数据
库连接的存储定义,它们用于查询分布式数据库环境
中的远程表。因为它们存贮在 Oracle数据库中,它们
被归入数据库对象类别。关于数据库链的详细信息可
以在 DBA_DB_LINKS数据字典视图中得到。
– 存储包 (Package),存储包是一个过程、变量和函数
的集合,包按照功能被逻辑地分组。包是有目的地将
一些过程、函数及程序块集合在一起的, 大, 程序。
– 过程 (Precedure),对无名的 PL/SQL块,只能使用文
件名的方式调用,在程序中略显不便。将程序块命名
就是过程。一个存储过程是一个操作的代码单元,可
以被传递参数,并能够返回值。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.1.6 ORACLE其它对象
– 函数 (Function):一个存储函数是一个代码单元,可
以被传递参数,并能够返回一个值。
存储包、过程和函数与它们的源代码一起存在数
据字典中。可以通过 DBA_OBJECTS和 DBA_SOURCE视图
查看有关存储包、过程和函数的有关信息。
– 快照 (Snapshot):分布式数据库中,对于那些实时性
不强而又要经济查询的信息来说,远程查询并不是良
策。基于此,Oracle提供一种快照对象。快照就是在
远程机器放置本地数据库信息的一个只读副本。这样,
查询远程数据库就像查询本地数据库一样,缺点可能
不实时,但减少了通信线路的影响。通过指定快照的
刷新方式,Oracle自动完成快照的更新。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
作业:
1.简述 ORACLE数据库的组成。
2.初始化参数文件的作用是什么?
3.如何为控制文件做镜像?
4.ORACLE日志能否替代第三章介绍的智能型
日志?说明理由。
5.试从 ORACLE数据库的存储结构谈谈 ORACLE
的先进性、灵活性?