1 表空间
表空间( t a b l e s p a c e )是数据库的逻辑划分,每个数据库至少有一个表空间 (称作S Y S T E M表
空间)。为便于管理和提高运行效率,可以使用一些附加表空间来划分用户和应用程序。例如:
U S E R表空间供一般用户使用,R B S表空间供回滚段使用(有关这方面的情况在本节后面描述 )。
一个表空间只能属于一个数据库。

2 文件
每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件 ( d a t a f i l e )。一个数
据文件只能属于一个表空间。在 Oracle 7.2中,数据文件创建后可改变大小。创建新的表空间
需要创建新的数据文件。
数据文件一旦加入到表空间中,就不能从这个表空间中移走,也不能与其他表空间发生
联系。
如果数据库对象存储在多个表空间中,那么可以通过把它们各自的数据文件存放在不同
磁盘上来对其进行物理分割。在规划和协调数据库处理 I / O请求的方法中,数据分割是一种很
重要的工具。数据库、表空间和数据文件之间的关系如图 1 - 2所示。

3 数据库内部结构
通过上面对数据库及实例的介绍, O r a c l e数据库结构可分为三个范畴:
• 数据库内部的结构(如表)。
• 存储区内部的结构(包括共享存储区和进程)。
• 数据库外部的结构。
以下几小节将对每一范畴内的每个元素进行介绍。这些范畴按上述顺序给出。
下一节将对数据库内部结构的元素进行介绍,这些元素包括:
• 表、列、约束条件、数据类型(含抽象数据类型)。
• 分区与子分区。
• 用户与模式。
• 索引、簇和散列簇。
• 视图。
实例1
( S G A +进程)
实例2
( S G A +进程)
数据库文件
• 序列。
• 过程、函数、软件包和触发器。
• 同义词。
• 权限及角色。
• 数据库链接。
• 段、盘区和块。
• 回滚段。
• 快照与显形图。
下面对上述每一种元素进行详细介绍

4 表、列和数据类型
表是数据在一个 O r a c l e数据库中的存储机制,如图 1 - 1所示,它包含一组固定的列。表中
的列描述该表所跟踪的实体的属性,每个列都有一个名字及各自的特性。
列由两部分组成:数据类型 ( d a t a t y p e )和长度( l e n g t h )。对于使用N U M B E R数据类型的列,
可以指定列的小数位及精度特性,精度决定数值的有效位数,小数位表示数值的小数点位置。
说明为N U M B E R ( 9 , 2 )的列表示该列总共有 9位数,其中2位数在小数点右边。缺省的数值精度
为3 8位数,这也是O r a c l e所允许的最大数值精度。

数据类型参数描述
char(n)n=1 to 2000字节定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)
varchar2(n)n=1 to 4000字节可变长的字符串,具体定义时指明最大长度n, 这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。 如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度, 如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。 可做索引的最大长度3209。
number(m,n)m=1 to 38 n=-84 to 127可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。 如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。 如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。 如:number(3,0),输入575.316,真正保存的数据是575。
date从公元前4712年1月1日到公元4712年12月31日的所有合法日期, Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒。 缺省格式为DD-MON-YY,如07-11月-00 表示2000年11月7日。
long可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。 long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
raw(n)n=1 to 2000可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。 raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
long raw可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。 在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
blob clob nclob三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。 LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。 可以执行读取、存储、写入等特殊操作。
bfile在数据库外部保存的大型二进制对象文件,最大长度是4GB。 这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。 Oracle 8i可以读取、查询BFILE,但是不能写入。 大小由操作系统决定。‘

除了上面所列的数据类型外,, O r a c l e还提供可作为A N S I标准数据类型的替代类型。对于
A N S I数据类型 C H A R A C T E R及C H A R,使用O r a c l e的C H A R数据类型;对于 A N S I数据类型
CHARACTER VA RY I N G及CHAR VA RY I N G,使用O r a c l e的VA R C H A R 2数据类型;对于ANSI NUMERIC、D E C I M A L、D E C、I N T E G E R、I N T和S M A L L I N T数据类型,使用 O r a c l e
的N U M B E R数据类型;对于 A N S I标准的F L O AT、R E A L和DOUBLE PRECISION数据类型,
O r a c l e支持P L / S Q L中的一个F L O AT数据类型。
从Oracle 8起可以创建用户自己的抽象数据类型。也可以使用特定的 R E F数据类型,这些
R E F数据类型引用数据库其他地方的行对象 (参见第5章)。
用户S Y S和S Y S T E M所拥有的表被称为数据字典表 (data dictionary table),数据字典表提
供一个数据库用来管理自己的系统目录。数据字典由 O r a c l e提供的一组目录脚本文件创建。每
当安装或升级一个数据库时,都需要使用创建或修改数据字典表的的脚本文件。当在数据库
中安装一个新的选项时,可能要运行另外一些附加的目录脚本文件。
表通过其共用的列相互关联。可以要求数据库通过引用完整性 (referential integrity)实施这
些关联。如果使用O r a c l e面向对象的特征,就可以通过称作对象 I D ( O I D )的内部引用使行相互
关联。引用完整性通过约束条件在数据库级实施。

5 约束条件
可以在一个表的列上创建约束条件 ( c o n s t r a i n t ),当一个约束条件应用于一个表时,表中的
每一行都必须满足约束条件定义所规定的条件。在下面的 create table命令中,表E M P L O Y E E
就是由多个约束条件创建的。

create table EMPLOYEE
(
    EmpNo  NUMBER(10) PRIMARY KEY,
    Name   VARCHAR2(40)  NOT NULL,
    DeptNo NUMBER(2)  DEFAULT 10,
    Salary NUMBER(7,2) CHEACK(salary<1000000),
    Birth_Date DATE,
    Soc_Sec_Num    CHAR(9) UNIQUE,
    foreign key (DeptNo) references DEPT(DeptNo)
)tablespace USERS;

首先,表被赋予了表名( E M P L O Y E E ),表中的每个列都有各自的列名 ( E m p N o、N a m e等),
每个列都有指定的数据类型及长度。 E m p N O列被定义为N U M B E R数据类型,没有小数位 (等
同于一个整数)。N a m e列被定义为VA R C H A R 2 ( 4 0 ),表示N a m e是一个可变长度列,其最大长
度可以达到4 0个字符。
表中的主键(Primary Key)是表中的一个列或多个列,它们决定表中每个行的唯一性,数
据库中的主键列必须是非空值 (NOT NULL),表示存储在表中的每一行必须有这个列的一个
值;它不能为空值( N U L L )。非空值约束条件可用于表中的其他列 (如上例中的N a m e列)。
一个列可以有一个 D E FA U LT (缺省)约束条件,这种约束条件使得在往表中插入一个行但
没有为列指定值时生成一个值。
C H E C K (检查)约束条件确保指定列中的值符合一定的条件 (如本例中,S a l a r y列的值小于
1 0 0 0 0 0 0 )。C H E C K列约束条件不能引用一个独立表。非空值约束条件被数据库看作是一个
C H E C K约束条件。
另一个约束条件是U N I Q U E (唯一性),用于保证应具有唯一性而又不是主键的一部分的那
些列的唯一性。在这个例子中, S o c S e c N u m列拥有U N I Q U E约束条件,所以表中的每个记
录都必须有该列的唯一值。

外键(foreign key)约束条件规定表间的关系性质。一个表的外键引用数据库中此前定义的
主键。
例如,如果表D E P T有主键D e p t N o,则D E P T中的记录将列出全部有效的 D e p t N o值。上述
程序段中所示的 E M P L O Y E E表中的 D e p t N o列,引用了 D E P T. D e p t N o列。通过指定
E M P L O Y E E . D e p t N o作为D E P T. D e p t N O的一个外键,可以保证只有 D E P T表中已存在D e p t N o
值时才能输入到E M P L O Y E E表中。
数据库的约束条件有助于确保数据的引用完整性。引用完整性保证数据库中的所有引用
都有效且全部约束条件都得到满足。

6 抽象数据类型
在O r c l e 8中,你可以定义自己的数据类型,例如,可以创建一个包括个人名字的多个部分
—名、姓、中名首字母、后缀等—的数据类型作为一个单独的数据类型。 N A M E _ T Y数
据类型的创建如下:

create type NAME_TY as object
(
    First_Name VARCHAR2(25),
    Middle_Initial CHAR(1),
    Last_Name    VARCHAR(30),
    Suffix    VARCHAR2(5)
);

上面清单中的creat type命令对O r a c l e 8有效。可以用用户定义的数据类型来规范应用程序
中对数据的使用。例如,你可以在任何地方像使用其他数据类型一样来使用 N A M E _ T Y数据
类型。在下面的例子中,对 E M P L O Y E E表进行重建;这次E M P L O Y E E . N a m e列的数据类型是
N A M E _ T Y数据类型:

create table EMPLOYEE
(
    EmpNo    NUMBER(10)    PRIMARY KEY,
    Name    NAME_TY,
    DeptNo    NUMBER(2)    DEFAULT 10,
    Salary    NUmber(7,2)     CHECK(salary<1000000),
    Birth_Date    DATE,
    Soc_Sec_Num    CHAR(9) UNIQUE,
    foreign key (DeptNo) references DEPT(DeptNo)
)tablespace USERS;

如上面N A M E _ T Y创建语句中所示,表E M P L O Y E E中的N a m e列包含四个属性。如果用户
对N A M E _ T Y数据类型定义一些方法 (定义一些对数据类型属性起作用的程序 ),就可以把这些
方法应用于 E M P L O Y E E表中N a m e列的值。