4.1 Oracle 9i系统概述
Oracle 9i继承了Oracle公司在数据库领域中的领先技术,增强了对Internet网络技术的支持,从而构成一个真正支持Internet网络计算的对象——关系对象型数据库管理系统。
Oracle 9i数据库提供三种版本,适用于不同的开发和部署环境。
(1)Oracle 9i标准版
该版本为工作组级应用、部门级应用及互联网/内部网应用提供前所未有的易用性、强大功能和性能价格比。它包括一套完全集成的易用管理工具、完全分布式的复制能力及Web功能,适合小型企业的单一服务器环境到高度分布式的分支机构环境。
(2)Oracle 9i企业版
该版本为高端应用提供高效、可靠及安全的数据管理能力,包括大数据量的联机事务处理(On-Line Transaction Processing,OLTP)环境、查询密集型数据仓库及要求苛刻的互联网应用等。Oracle 9i企业版提供多种工具和功能,能够满足当今企业关键任务应用的可用性与可伸缩性需要。
(3)Oracle 9i个人版
该版本支持需要与Oracle 9i标准版和Oracle 9i企业版完全兼容的单一用户开发与部署。将Oracle 9i数据库屡获殊荣的功能带到个人工作站之上,从而提供一种将世界上最受欢迎的数据库的强大威力与用户在桌面产品所期望的易用性和简单性相集合的数据库。
Oracle 9i个人版、Oracle 9i标准版、Oracle 9i企业版包含了一套共同的应用开发功能,这些功能包括SQL对象关系能力,以及用于编写存储过程和触发器的PL/SQL和Java编程接口。
Oracle 9i还提供若干附加的可选数据库产品,以增强Oracle 9i数据库满足特定应用需求的能力。
本章是以Oracle 9i Enterprise Edition for Windows NT为例,介绍Oracle 9i数据库管理系统的体系结构和系统组成。
4.2 Oracle 9i数据库体系结构
Oracle 9i数据库的体系结构可以从物理存储结构、逻辑存储结构、内存结构、进程结构四个方面来理解。
4.2.1 物理存储结构
从数据的物理存储结构来看,Oracle 9i数据库由数据文件(datafile)、重做日志文件(redolog file)和控制文件(control file)三类物理文件组成。这些物理文件都存储在操作系统的某一目录下。
(1)数据文件
数据文件是一个操作系统文件,这些文件的格式是只有Oracle数据库系统才能够正确识别的二进制格式。用户不要用非Oracle工具来修改这些数据文件,否则会导致Oracle数据库崩溃。在这些数据文件中存储了基表数据、索引数据、回退数据、临时数据及数据字典基表数据。每个数据库至少由一个或多个数据文件组成。
(2)重做日志文件
重做日志文件存储数据库的修改前与修改后的信息及事务标志。在数据库实例(instance)恢复期间,Oracle使用重做日志文件恢复所有用户对数据库所做的修改操作。所以,重做日志文件是增强数据库可靠性的重要保护措施。Oracle要求每个数据库必须拥有两个或两个以上的重做日志文件。这两个或多个重做日志文件之间采用循环写的方式进行日志切换。重做日志文件也是一个操作系统文件。
(3)控制文件
控制文件是一个二进制文件。控制文件记录数据库名、数据库的数据文件和联机重做日志文件的名称和位置、数据库建立日期、数据库的当前序列号、数据库检查点、数据库中表空间名等信息。对Oracle数据库来说,如果把数据文件比作一个仓库,那么重做日志文件相当于该仓库的货物进出口记录账本,控制文件就是该仓库的管理中心。每个Oracle数据库要求至少有两个或两个以上的控制文件,这多个控制文件的内容一模一样,实际上就是多个备份,其目的是降低磁盘介质失败给用户所造成的损失。Oracle能够自动维护所有控制文件。
除了以上三类物理文件之外,数据库中还包含初始化参数文件、口令文件、归档的日志文件等物理文件。其中初始化参数文件在数据库启动和数据库性能调优时使用,它也是很重要的文件。归档日志文件只有在数据库运行在归档方式时才有,是由ARCH归档进程将写满的重做日志文件拷贝到指定的存储设备时产生的。口令文件是为了使用操作系统认证Oracle用户而设置的。
4.2.2 逻辑存储结构
从逻辑的角度来看,数据库由多个表空间(tablespace)组成,每个表空间中存放了多个段(segment),每个段又分配了多个区(extent),并且随着段中数据的增加区的个数也会自动增加,每个区应该由连续的多个块组成。
4.2.2.1 表空间
Oracle数据库在物理上是由三类物理文件组成,但在逻辑存储上,Oracle将数据库所有数据文件所占的磁盘空间划分为一个或多个表空间进行存储管理。一个表空间可以跨越数据库的多个数据文件,但一个数据文件只能属于一个表空间,而不能同时属于多个表空间。一般一个数据库至少包含SYSTEM表空间、UNDOTBS表空间、TEMP表空间、USERS表空间、INDEX表空间等多个表空间,分别存放数据字典基表数据、回退数据、临时数据、基表数据、索引数据等数据。
数据库的物理存储结构与逻辑存储结构是从两个不同的角度理解数据库的组成,那么物理结构与逻辑结构之间是如何对应的呢?逻辑与物理之间的对应关系就是表空间与数据文件之间的对应关系。一个表空间包含一个或多个数据文件,这些数据文件的大小加起来就是整个表空间的大小。逻辑上存放在表空间的段的数据,物理上存放在该表空间所对应的数据文件中。
段数据不能跨越表空间(即不能将段的一部分数据存放在一个表空间,而另一部分数据存放在另一个表空间),但段数据可以跨越同一表空间的多个数据文件(就以数据段基表来说,表数据可以一部分存放在该表空间的数据文件1中,而另一部分数据可以存放在同一表空间的另一数据文件2中)。
4.2.2.2 段
表空间的下一级逻辑存储单元称为段,一个段只能存储同一种模式对象(Schema Object)。根据段中所存储的模式对象不同,段可分成以下几类。
数据段:存储表数据,当用户建立表或聚簇时,Oracle自动建立数据段。一般情况下,用户建立的各张表都存储在USERS表空间下。
索引段:存储数据库索引数据,每个未分区索引有一个索引段,分区索引的每一个分区均有一个索引段。当执行CREATE INDEX语句建立索引或索引分区时,Oracle自动建立索引段。一般情况,用户建立的各表上的索引都存储在INDEX表空间下。
临时段:在执行查询、排序、创建索引等操作时,Oracle自动在TEMP表空间上创建一个临时段,使用临时段保存SQL语句解释和执行过程中所产生的临时数据。
撤销段(回退段):记录数据库中所有事务修改前的数据值,这些数据用于读一致性、回退事务、恢复数据库实例等操作。一般情况,Oracle系统将回退数据(撤销数据)存储在UNDOTBS表空间下。
系统引导段:记录数据库数据字典的基表信息。它是在建立数据库时由SQL.BSQ脚本文件建立的。当数据库被一个实例打开时,系统引导段有助于初始化数据字典缓存。数据库管理员不能对系统引导段执行查询、更新或维护。一般情况下,数据库数据字典的基表都存储在SYSTEM表空间下。
4.2.2.3 区
Oracle系统按需要以区为单位为段分配空间。当段内现有区中的空间用完后,系统自动在表空间内为段分配一个新区。一个段只能存储在一个表空间中,但段可以跨越属于同一个表空间的不同数据文件。一个段内区的个数随着段内数据量的增加而增加。
下面以数据段基表为例说明段中的区是如何分配的:当建立基表时,系统首先按INITIALEXTENT 参数的值分配第一个区,当该表中的数据量达到INITIAL EXTENT参数值时,系统自动按NEXT EXTENT参数的值分配第二个区,当该表中的数据量达到INITIAL EXTENT和NEXT EXTENT参数值时,系统自动按NEXT*(1+PCTINCREASE)参数值分配第三个区,即第三个区在第二个区的基础上增加一个百分比,当该表中的数据量达到前三个区的大小时,系统自动在前一个区的基础增加一个百分比,分配下一个区,直到所分配的区的个数达到MAXEXTENTS参数的值为止。此时表中不能再分配区,也就不能往表中插入数据。
4.2.2.4 块
Oracle数据库的最小存储数据单元称为数据块(Data Block)。块是I/O的最小单位,而区是分配空间的最小单位。数据块的字节长度由初始化参数文件中DBBLOCKSIZE参数设置。一个区是由一定数量的连续数据块组成。
4.2.3 内存结构
内存是Oracle重要的信息缓存和共享区域,Oracle使用的主要内存结构包括SGA(System Global Area,系统全局区)和PGA(Program Global Area,程序全局区)。
1.SGA区
SGA区是Oracle实例的组成部分,其内容可以被所有用户所共享。SGA主要由数据库缓冲快存(Database Buffer Cache)、重做日志缓冲区(Log Buffer)、共享池(Shared Pool)、大池(Large Pool)、Java池(Java Pool)等几部分组成。
(1)数据库缓冲快存
用于记录从数据库数据文件中读取的数据,以及插入和更新的数据。该缓冲区的大小是由参数DBCACHESIZE决定的。用户在缓冲区中输入和修改数据,最终由DBWR进程将缓冲区中修改过并且已经提交的数据写入磁盘的数据文件中。
(2)重做日志缓冲区
记录数据库中的修改前和修改后信息。该缓冲区的大小是由参数LOGBUFFER决定。该缓冲区的内容被LGWR进程写入联机重做日志文件。
(3)共享池
包含库缓存(Library Cache)、数据字典缓存(Dictionary Cache)。其大小由参数SHAREDPOOLSIZE决定。库缓存包含SQL语句的语法分析树和执行计划,与会话相关的私有信息,存储过程函数等编译信息。数据字典缓存存储数据字典数据。
(4)大池
是数据库管理员的一个可选内存配置项,主要用于为Oracle共享服务器及使用RMAN工具进行备份与恢复操作时分配连续的内存空间。
(5)Java池
是数据库管理员的一个可选内存配置项,主要用于存放Java语句的语法分析和执行计划。当使用Java做开发时必须配置Java池。
2.PGA区
PGA区保存单个进程的会话数据和控制信息,其内容为指定服务器进程所专用,不能被其他服务器进程所共享。
4.2.4 进程结构
Oracle系统中的进程分为用户进程、服务器进程和后台进程三类。
1.用户进程
用户进程是为运行用户应用程序或Oracle工具所建立的进程。当用户执行应用程序连接到Oracle系统时,系统自动为其分配一个用户进程。
2.服务器进程
服务器进程处理用户进程的各种请求。解释、编译和执行用户进程所发的SQL语句,并将SQL语句执行结果返回给客户端用户应用程序。
3.后台进程
后台进程都具有固定的功能,实现复杂的数据库操作。后台进程包括以下几种。
DBWR:数据库写入进程,负责将SGA中数据库缓冲区的数据写入数据文件中。一个Oracle 数据库中最多可以配置10个DBWR进程。
LGWR:日志写入进程,负责将重做日志缓冲区的内容写入到联机日志文件中。
CKPT:检查点进程,当检查点发生时负责更新所有数据文件头信息和控制文件的信息。
SMON:系统监视进程,负责回收不用的临时空间、合并碎片、执行数据库的恢复等操作。
PMON:进程监视进程,检查用户进程的运行状态。当用户进程已结束时负责清除缓存、释放资源等操作。
ARCH:归档进程,当数据库运行在归档方式时,归档进程将联机重做日志文件的记录拷贝到指定的存储设备中,产生归档日志文件。
RECO:数据库恢复进程,该进程在分布式事务执行失败时,将自动连接远程服务器中的数据库实例。连接成功后,删除被挂起的事务及它所对应的行。
LCKn:锁进程。在Oracle并行服务器环境(Real Application Cluster环境,RAC环境)中,多个数据库实例可能同时操作相同的数据库对象。为了避免进程间数据存取冲突,在一个数据库实例访问期间,锁进程自动封锁它所访问的数据库对象。
SNPn:作业队列进程,执行DBMSJOB包所调度的数据库作业,并自动定期刷新分布式数据库中的数据库快照。
QMNn:队列监视进程,监视Oracle数据库实例中的消息队列。
Dnnn:调度进程。在共享服务器配置下,调度进程的支持使多个用户进程可以共享一个服务器进程,从而减少服务器进程数。
其中DBWR、LGWR、CKPT、SMON、PMON后台进程是任何数据库环境所必需的,而ARCH、LCKn、RECO、SNPn、QMNn、Dnnn等后台进程可以根据数据库运行环境和配置不同而选择配置。
4.2.5 Oracle实例
Oracle实例由SGA区和后台进程组成。当打开数据库时必须首先启动Oracle实例,也就是必须首先按参数文件中指定的SGA区的每一块缓冲区的大小分配相应大小的缓冲区,并且启动必要的后台进程。在启动实例后将数据库与该实例连接,也就是MOUNT(装载)数据库,此时系统根据参数文件中的参数值查找并打开所有的控制文件。最后才是打开已经连接到实例的数据库,此时系统根据已经打开的控制文件的内容,查找并打开所有的数据文件和重做日志文件。
4.3 Oracle 9i数据库的模式对象
模式是每个Oracle数据库用户相关的一组数据库对象的集合。模式所有者拥有该模式下所有对象的全部权限,还可以直接或间接地将其所拥有的模式对象的操作权限授予给其他用户。
4.3.1 表
表是数据库中基本的数据存储单元,由多行和多列组成。数据库中的一个用户或一个模式拥有表,表中的每一列都定义了数据类型,每一列的数据必须满足该列的特性。表中列的数据类型可以是Oracle 9i内置的数据类型,也可以是用户自定义的数据类型,甚至可以用另外一张表作为列的数据类型(即嵌套表类型)。一行又称为一条记录,由多列组成。
在建立表结构后,可以对表进行插入、更新、删除、按各种查询条件查询等操作。
4.3.2 视图
视图是用户查看表中数据的一种方式,通过视图可以查看一张表中部分或全部数据,而数据仍然存放在表中,可以将视图比作该表的一个查询窗口。这类视图也可以像表一样进行插入、更新、删除、查询等操作。
视图也可以从多张表或视图中派生出来,在派生视图时也可以使用各种函数。如果视图是从多张表中派生的,或者在派生视图时引用了集合函数,则该类视图只能进行查询操作,而不能进行插入、更新、删除操作。
引入视图可以简化用户的查询和处理操作,提高数据的安全性。
4.3.3 索引
在表上建立索引可以加快表的查询速度,也可以保证表上数据的唯一性。
当建立索引时,系统自动建立索引段,当对表进行插入、更新和删除时系统自动维护索引段。建立索引可以加快对表中数据的查询速度,但必然会降低数据的增、删、改操作性能,因为当插入、更新、删除表中数据时,系统要自动更新索引段中的索引数据,所以合理地使用索引,可以大大地减少系统磁盘I/O操作次数,否则会降低系统运行速度。
建立索引的原则是大表才建索引,如果是小表,建立索引可能会降低表的操作的性能。如果是为了加快查询速度,应该先往表中插入数据,然后再建索引。如果建立索引后,该表的插入、删除、更新操作很频繁,为了降低系统开销,应该先删除索引,在插入、更新、删除操作完成后再重建索引。如果为了保证表上数据的唯一性,应该先建索引,然后再往表中插入、更新数据,否则无法保证数据的唯一性。
4.3.4 序列生成器
序列生成器可以产生一组唯一的序列号。由于Oracle能够自动保证序列值的唯一性,所以在数据库设计时常用序列号作为表的唯一主键。序列号存储在数据库SYSTEM表空间中的数据字典内,与表无关,所以多张表可以共用同一个序列生成器。
4.3.5 数据库链路
数据库链路是指在分布式数据库应用环境中的一个数据库与另一个数据库之间的通信路径。一个数据库与远程数据库之间建立了数据库链路之后,所有能够访问本地数据库的应用程序即可访问远程数据库中的模式对象。但在访问远程数据库中的对象时,除了用户信息、对象信息以外,必须指出数据库链路信息。如“SELECT*FROMscott.emp@orcl.world。”其中,orcl.world是数据库链路名,scott是远程数据库中的用户名,emp是scott用户的表名。
4.3.6 同义词
同义词是表、视图、序列生成器、快照、过程、函数、包的别名。同义词与视图一样,在数据库中只存储其定义的文本,而不占用其他额外的存储空间。使用同义词的最大好处是安全、方便。同义词又分公用同义词和私有同义词两类:公用同义词为PUBLIC所拥有,数据库中的每个用户均可引用它;私有同义词是创建的用户所拥有,只有创建的用户有权访问。
4.3.7 存储过程、函数、包和触发器
存储过程和函数是由一组SQL和PL/SQL语句组成,完成固定功能的程序单元。它们存储在服务器的数据字典(userobjects)中,并且可以被连续执行。存储函数向调用者返回单个值,而存储过程不返回任何值。存储过程和函数均可通过输入参数、输出参数或输入输出参数与调用者进行通信。
包是存储过程和函数的封装,由一组相关的存储过程和函数组成。
触发器也是由一组SQL和PL/SQL语句组成,完成固定功能的程序单元。但触发器在满足触发条件时自动执行,不需要用户显式地调用。触发器不能接受输入输出参数。
4.3.8 快照
快照(Snapshots)就是对远程数据库上的表的复制,自动按时间间隔定时刷新表的数据。快照实用程序生成一张表,用来存放通过快照定义的查询条件获得的行。表的复制是异步完成的,并且不受网络失败的影响。
使用快照自动复制表。一张表的快照可以包含对主表的整个或部分数据的备份,表的快照是只读的,表的快照来自于查询。快照能够包含来自多张主表的数据,也可以是多张表的一个集合(GROUP BY),或者是一张表的子集(行,列)。
快照可以自动或手工刷新,在不同地点生成的几个快照可以基于同一张主表。在需要复制表的所有节点上都可创建快照,在同一用户中快照必须有一个能够区别于其他实体的名称,快照的存储参数与表的存储参数一样,它不能包含触发器或约束限制。
4.4 Oracle 9i数据库的安装
在安装前确保内存达到256 MB以上(含256 MB),硬盘空间至少还有3 GB以上。安装Oracle服务器的步骤如下。
1.启动操作系统并插入安装光盘
在操作系统启动后,将Oracle 9i的3张安装光盘的第一张插入光驱,系统出现界面,单击“开始安装”按钮后出现Oracle Universal Installer界面。
2.卸装以前安装的Oracle产品
如果该机器上原来已经安装过Oracle数据库,或者原来安装不成功,则在重新安装Oracle数据库之前,应该将原来安装的数据库产品先卸掉,否则会造成安装不成功。此时,界面中单击“卸装产品”按钮,弹出的“Inventory目录”对话框,提示该机器上已经安装的Oracle产品,选择希望删除的产品,然后单击“删除”按钮。系统开始删除以前安装的产品,并且显示删除的进度,系统将同时从注册表中删除该产品的注册信息。
3.选择产品和安装类型及设置各种配置参数
删除以前的产品后,系统显示的“Oracle Universal Installer文件定位”窗口,要求用户输入数据库的主目录名称和安装的路径,在“源”部分的“路径”不用修改,表示安装光盘所在的位置。在“目标”部分的“名称”和“路径”上输入主目录的名称和路径。如:名称“oracle”,路径“C:\oracle”。该名称和路径表示Oracle安装的位置和安装后的目录名。然后单击“下一步”按钮,进入“Oracle Universal Installer可用产品”窗口,选择要安装的产品。
可以选择的产品为:Oracle 9i数据库服务器、Oracle 9i 管理和升级工具、Oracle 9i 客户端软件。其中:
Oracle 9i数据库包含数据库服务器、客户端软件、管理工具和网络服务、基本的客户端软件、实用程序等。
Oracle 9i 管理和升级工具包含管理工具、网络服务、基本的客户端软件、实用程序、Management Server、Oracle Internet Directory、Oracle Integration Server等工具。
Oracle 9i 客户端软件只包含企业管理(OEM)工具、开发工具、网络服务和基本的客户端软件、预编译程序、实用程序。
在不同的机器上可以安装不同的产品,但必须有其中一台机器安装Oracle 9i 服务器,其他机器上的不同工具通过网络连接到Oracle 9i服务器,访问该服务器上的数据。
建议选择安装Oracle 9i数据库服务器,然后单击“下一步”按钮,“安装类型”窗口,选择安装Oracle服务器的类型。
可以选择的服务器类型为:企业版、标准版、个人版和自定义。
因为后面有些操作需要用到各种OEM工具,所以建议选择企业版安装类型,然后单击“下一步”按钮,进入“数据库配置”窗口,选择数据库的配置类型。
可以选择的数据库配置类型有:通用、事务处理、数据仓库、自定义和只安装软件。
注意:安装Oracle 9i 软件与创建数据库是两个完全不同的概念。如果只安装Oracle 9i软件,没有创建数据库,则无法实施对数据库的任何操作。所以在安装完Oracle 9i软件后,必须创建数据库。任何一台数据库服务器必须安装Oracle 9i软件,并且至少创建一个数据库。如果数据库服务器资源允许的情况下,在一台服务器上安装完Oracle 9i软件后,可以创建多个数据库,并且可以同时启动这多个数据库,供不同数据库下的用户访问。
创建数据库的方法有两种:第一种方法是在安装过程中数据库配置类型的选择时选择通用类型、事务处理类型、数据仓库类型、自定义类型之一,这几种数据库配置类型在安装完Oracle 9i软件后系统自动创建一个预配置的数据库;第二种方法是在安装过程中数据库配置类型的选择时选择只安装软件,在安装完Oracle 9i软件后,使用系统自带的Oracle DatabaseConfiguration Assistant(ODCA)工具创建一个数据库。
这里建议在选择数据库配置类型时选择“通用”类型,单击“下一步”按钮,进入“数据库标识”窗口。要求输入全局数据库名和数据库实例名SID。
Oracle 9i数据库用全局数据库名来作唯一标识,全局数据库名的形式为“数据库名·域名”。如果该机器不在某一网域,则可以不输入域名,只输入数据库名代表全局数据库名。如输入全局数据库名为:DB1(或DB2),则系统会自动在下面的数据库实例名(或系统标识符)SID 空白处输入DB1(或DB2)。一个数据库至少被一个Oracle 9i实例引用,通过Oracle系统标识符(SID),将该实例与计算机上的其他实例区别开来。
系统自动将刚输入的全局数据库名作为SID名,表示数据库名与实例名SID相同。可以将SID名与数据库名设为不同,但这里建议将数据库名与SID 名设为相同。
单击“下一步”进入“数据库文件位置”窗口,确定数据库文件的位置。
确定数据库文件的存储位置数据库文件是指组成数据库的三大类物理文件:数据文件、联机重做日志文件和控制文件。这三类文件的存放位置与Oracle安装软件的存放位置不同,但一般存放在同一个Oracle根目录下。假设安装Oracle的根目录是c:\oracle,则一般数据库物理文件存放在根目录下的oradata目录下,显示的数据库文件目录为c:\oracle\oradata。可单击“浏览”按钮选择存放数据库文件的目录。确认数据库文件目录后,单击“下一步”按钮进入“数据库字符集”窗口,选择数据库使用的字符集。如果字符集设置得不合适,就不能显示中文。
字符集的设置有三种选择。
“使用缺省字符集”,缺省字符集是根据机器所使用的操作系统自动设置的,如果操作系统是中文的Windows 2000/XP/ME/NT,则缺省的字符集是ZHS16GBK。
使用“Unicode(AL32UTF8)”作为字符集,采用该字符集时数据库可以存放多个语言组。
“选择常用字符集之一”,如选择简体中文ZHS16GBK,也可以在选择“选择常用字符集之一”后,单击其下列表框的右边箭头,选择其他的字符集。这里建议选择“使用缺省字符集”。
选择数据库使用的字符集后,单击“下一步”按钮,进入“摘要”窗口。
在“摘要”窗口中可确认安装过程中所有的设置和选择是否符合要求,如果设置都合适,则单击“安装”按钮进入“安装”窗口;否则单击“上一步”按钮返回上一步,重新进行相应设置。
4.开始安装
确认了前面所有的设置后,系统开始安装,用百分比显示安装进度。安装的过程大概需要35分钟左右,这取决于机器本身的性能和配置。在安装到17%时会提示用户插入第二张光盘,在安装到46%时会提示用户插入第三张光盘。
如果在安装的过程中想停止安装,单击安装进度条下面的“取消”按钮即可停止安装,但此时已经在相应的目录下安装了一些文件,同时在注册表中也加入了相应的注册信息。下次重新安装时必须首先进行卸装的过程,否则会造成下次安装不成功。在安装过程中不需要用户干预。
5.创建数据库和修改用户口令
如果在设置过程中,在数据库配置中选择了通用类型,则安装完Oracle软件后(即安装进度到100%后)自动进入创建数据库的界面。
在创建数据库的同时自动创建相应的数据字典,百分比显示创建数据库的进度。。从开始安装到创建完数据库的过程中不需要用户干预。
创建完数据库后,系统弹出一个的提示对话框,要求用户确认和修改数据库中SYS和SYSTEM用户的口令,SYS用户的系统默认口令为changeoninstall,SYSTEM 用户的系统默认口令是manager,出于安全考虑,应对SYS和SYSTEM用户的口令进行修改。
6.配置监听进程和网络服务名
创建完数据库后会弹出的“配置工具”窗口,系统自动启动网络配置工具(Oracle Net Configuration Assistant),该工具将自动设置监听进程服务,以便在启动操作系统时自动启动监听进程,并且自动配置连接到本服务器的本地网络服务名,默认的本地网络服务名为本服务器安装时输入的全局数据库名(如:DB1或DB2)。
网络配置工具配置完毕时,安装和创建数据库的工作也完成了,此时系统提示用户是否安装其他产品,这里选择“退出”按钮退出安装。此时已完成Oracle的安装和建库工作。
安装Oracle时,安装程序向Windows 2000操作系统中所添加的服务名称为OracleOracleHOMETNSListener和OracleServiceSID(其中OracleHOME为安装时的主目录(参见4.5节),SID是安装时所指定的数据库实例名)。根据用户所选择的安装类型、安装产品和建立的数据库不同,Oracle Universal Installer向系统中所添加的服务数量也随之改变。
4.5 Oracle 9i数据库目录结构和注册表信息
4.5.1 数据库的目录结构
安装Oracle软件和数据库文件后,其目录结构为一个树状结构,树的根部称为Oracle的根目录(OracleBASE)。一般为E:\Oracle(其中E代表驱动器盘符)。在OracleBASE目录下包含下列主要子目录。
(1)OracleHOME
OracleHOME代表安装Oracle的主目录。在一台机器上首次安装Oracle 9i时,主目录的默认值为Ora92。Oracle主目录下又包含下列目录。
Bin:存储了Oracle系统的可执行文件。
Network:存储了系统的网络配置文件。
Assistants:存储系统的辅助配置工具文件。
RDBMS:存储创建数据库和数据字典的脚本文件。
(2)ADMIN
数据库管理文件目录,每个Oracle数据库在ADMIN目录下有一个以数据库名称命名的子目录(如ORCL)。该数据库的所有管理文件均存储在ORCL下的子目录下。
ADHOC:指定数据库的专用SQL脚本文件目录。
ARCH:归档重做日志文件目录。
BDUMP:后台进程跟踪文件目录。
UDUMP:用户进程跟踪文件目录。
CDUMP:主备份文件目录。
CREATE:数据库创建日志文件目录。
EXP:数据库导出文件目录。
PFILE:数据库初始化参数文件目录。
(3)ORADATA
数据库数据文件存储目录。每个Oracle数据库在ORADATA目录下有一个以数据库名称命名的子目录(如ORCL),该数据库所有的数据文件、重做日志文件、控制文件均存储在ORCL子目录下。
4.5.2 Oracle 9i数据库在Windows 2000下的注册表信息
Oracle系统的配置和服务信息存储在操作系统注册表数据库中的以下子项中。
HKEYLOCALMACHINE\SOFTWARE\Oracle:包括Oracle安装程序的存储位置和Oracle object for OLE消息文件的存储位置。
HKEYLOCALMACHINE\SOFTWARE\Oracle\ALLHOMES:描述Oracle主目录的一般信息。包括默认的主目录名、主目录数、主目录中文件的物理存储路径等信息。
HKEYLOCALMACHINE\SOFTWARE\Oracle\HOMEx:描述Oracle主目录的配置参数。其中x代表了主目录序号。
4.6 Oracle 9i数据库数据字典
Oracle数据字典由一套表和视图构成,它存储Oracle系统的活动信息及所有用户数据库的定义信息。根据数据字典所存储的内容不同可以把它们划分为两大类:静态数据字典和动态性能表。
4.6.1 静态数据字典
静态数据字典是Oracle数据库的信息中心。它所提供的信息包括以下内容。
数据库中所有表、聚簇、索引、视图、同义词、序列、过程、函数、包、触发器等模式对象的定义。
数据库中所有列的默认值和模式对象中的完整性约束。
所有Oracle用户信息及他们所授权限和角色。
为模式对象所分配的存储空间及它们当前已使用的存储空间。
数据库的审计信息。
为数据库分配的回退段信息。
数据库的字符集信息。
其他数据库信息。
数据字典中存储大量有关数据库的重要信息,但对用户来说,数据字典中的所有表和视图是只读的(即只能查询,不能更新),数据字典的内容由Oracle系统自动维护和更新。数据字典的所有权属于sys用户,数据字典的数据存储在system表空间中。
为了便于用户查询,Oracle在数据字典表上建立了数据字典视图。这些视图主要分三类。
(1)用户视图
这类视图以USER为前缀,包含当前用户所拥有的全部对象信息。如:USEROBJECTS视图包含当前用户所建立的对象信息。
(2)扩展用户视图
这类视图以ALL为前缀,如:ALLUSERS,除包含当前用户所拥有的全部对象信息以外,还包含公共账号和显式授权用户所拥有的全部模式对象信息。
(3)数据库管理员视图
这类视图以DBA为前缀,包含整个数据库的所有用户所拥有的所有对象信息,而不局限于部分用户。如:DBAUSERS视图包含数据库中所有用户信息。
4.6.2 动态性能表
动态性能表是一套虚拟表,记录当前数据库的活动情况和性能参数。管理员查询动态性能表可以了解系统运行状况,诊断和解决系统运行中所出现的问题。动态性能表的拥有者为sys用户,名字均以V$为前缀。为了便于访问,Oracle在动态性能表的基础上建立了公用同义词,这些同义词的名字以V$开头。所有用户(不管是管理员还是普通用户)在查询系统性能表数据时都应该使用V$对象。如:V$BGPROCESS视图记录Oracle后台进程信息。
4.7 Oracle 9i分布式数据库体系结构
4.7.1 分布式数据库体系结构的软件组成
Oracle分布式体系结构减少网络拥挤程度,并将数据库操作分开运行,像输入和显示数据这样需要用户频繁干预的任务集中在作为客户端的计算机上完成。客户端可分别处理数据,但若需读取共享数据,必须依据网络管道向服务器端作存取申请,而文件I/O和查询处理等频繁需要数据的任务则集中在数据库服务器上完成。在分布式数据库体系结构中可有多个Oracle数据库,用户可以将共享数据分别存放在各个Oracle数据库上。客户端可同时向多个Oracle数据库存取数据,这样可以降低单个Oracle数据库处理过多数据的负担,提高系统的执行效率。
Oracle 9i分布式数据库的体系结构有以下两种:基于客户-服务器方式的两层结构、基于应用服务器方式的三层结构。
1.两层结构
在两层结构中,客户应用与数据库服务器通过Oracle NET进行连接。
(1)第一层:客户应用程序
负责实现在客户系统上的数据输入和显示操作,以及对用户输入作合理性检验等需要用户频繁干预的任务。主要是指实现应用逻辑和数据表现的开发工具,以及用开发工具生成的应用程序。开发工具可以是Oracle提供的开发工具,如:Developer 6i。Oracle开发工具与Oracle数据库服务器之间通过Oracle NET进行连接。也可以是第三方的开发工具,如:Powerbuilder、Delphi等工具。第三方开发工具与Oracle数据库服务器之间需要通过Oracle NET和ODBC进行连接。
(2)第二层:数据库服务器
它提供对数据库的管理和处理众多的连接请求,完成文件I/O和查询处理等频繁需要数据的任务,共享数据存放在服务器端,负责数据存取和完整性控制。Oracle 9i企业版就处于这一层。
2.三层结构
在三层结构中,客户应用与应用服务器连接,应用服务器再与数据库服务器连接。
(1)第一层:浏览器(browser)
负责在客户系统上的数据显示和输入,以及对用户的输入作合理性检验。如:IE就处于第一层。由于IE的操作界面是统一的,所以不需要对使用人员进行各种培训。
(2)第二层:应用服务器
负责连接客户端与数据库服务器,监听客户端的请求,将客户端的请求转换成对数据库的调用,最终以HTML格式返回给浏览器。如:Oracle ApplicationServer(IAS)就处于第二层。在第二层上必须安装的软件为:IAS、Oracle NET。IAS通过Oracle NET与数据库服务器连接。
(3)第三层:数据库服务器
与两层结构中的数据库服务器层有相同的功能和配置。这里就不再介绍。
4.7.2 分布式体系结构中的网络配置
无论是两层结构还是三层结构,在客户端与数据库服务器端安装必要的软件后,都需要配置相应的文件。在数据库服务器端配置监听程序LISTENER,使得数据库服务器能够监听并接受客户端的连接请求。为了配置监听程序,必须在服务器上配置LISTENER.ORA文件。在客户端建立网络服务名称列表,记录客户端所能访问的服务器信息。为了建立网络服务名列表,必须在客户端配置TNSNAMES.ORA文件。
无论是客户端还是服务器端,其配置文件(TNSNAMES.ORA文件、LISTENER.ORA文件)均存储在OracleHOME\network\admin目录下(OracleHOME代表Oracle系统安装时的主目录)。
4.7.2.1 使用配置工具配置监听程序
安装Oracle数据库后,默认情况为在创建完数据库后,系统自动启动Net Configuration Assistant工具进行网络的配置,其中包含监听程序的配置和启动。默认配置的监听程序名为LISTENER,并且被设置为自动启动。
如果在配置网络服务名时所有设置都正确(包括机器名、全局数据库名、测试的用户名和口令等信息都正确),但测试连接始终失败,则需要检查监听程序配置是否正确,是否已经启动。如果在安装并创建完数据库和监听程序后,修改机器的名字或IP地址,都会导致监听程序的配置不正确,不能监听客户的连接请求。如果出现这种情况,建议按下列步骤删除该监听程序,重新配置新的监听程序。在配置后系统自动启动新的监听程序。
4.7.2.2 客户端与服务器端的连接
Oracle允许用下列两种方式将客户端和服务器端连接:
如果客户端是Oracle的开发工具,则直接使用Oracle NET进行连接。
如果客户端是第三方的开发工具(如Delphi),则必须使用ODBC(或ADO)和Oracle NET进行连接。
1.安装Oracle开发工具的客户端与服务器的连接
在客户端配置好TNSNAMES.ORA文件及服务器端配置好LISTENER.ORA文件后,就可以进行客户端SQL*Plus工具与Oracle服务器端的连接。
首先启动服务器端的监听程序。启动监听程序的方法有两种:一种方法是进入Windows 2000的“控制面板”→“管理工具”→“服务”→OracleOraHome92TNSListener服务,启动该服务。另一种方法是选择“开始”→“运行”,进入命令行的运行状态,在命令行中输入“lsnrctl start”命令即可启动监听程序。
启动监听程序后需要将客户端的SQL*Plus工具与服务器端的某一数据库连接。首先选择“开始”→“程序”→“Oracle-OraHome92”→“Application Developer”→“SQL*Plus”,启动SQL*Plus工具,弹出登录界面,要求提供数据库中的用户名和口令(如:scott/tiger),同时必须提供在TNSNAMES.ORA中配置的访问该数据库的网络服务名(即主机字符串)。如果访问hjyhome服务器上的orcl数据库,必须提供网络服务名ORCL1。如果访问hjyhome服务器上的test数据库,必须提供网络服务名TEST1。输入上述内容后单击“确认”按钮,即可进入SQL*Plus工具的命令行界面。如果出现“SQL>”提示符,表明已通过SQL*Plus工具连接到Oracle数据库。在SQL>提示符下可以完成第5章所介绍的各种对象的建立、修改、删除等操作。
2.安装第三方开发工具的客户端与服务器的连接
ODBC是一个开放的数据库连接,ODBC通过使用驱动程序来提供数据库的独立性。驱动程序与具体的数据库有关,如操作SQL Server,就需要使用SQL Server的ODBC驱动程序。驱动程序是一个用以支持ODBC函数调用的模块(通常是DLL),应用程序通过调用驱动程序所支持的函数来操纵数据库。若想使应用程序操纵不同类型的数据库,就要动态地连接到不同的驱动程序上。ODBC驱动程序并不直接访问数据库,这些驱动程序实际上是数据库用于远程操作的网络通信协议的一个界面。
Oracle NET是分布式体系结构的最低层,它支持各种不同的通信协议。Oracle NET并不是由程序开发人员直接使用的,它提供客户端与服务器端的连接功能。如Delphi、PowerBuild、VB、VC等客户端应用程序,都是借助ODBC和Oracle NET与Oracle数据库连接,使应用程序直接操纵数据库中的数据。
(1)配置Oracle NET
按照4.7.2.1节和4.7.2.2节介绍的方法,在客户端配置好TNSNAMES.ORA文件及服务器端配置好LISTENER.ORA文件后就配置了Oracle NET。
(2)配置ODBC
在配置完Oracle NET后,就可以进行ODBC数据源配置。选择“控制面板”→“管理工具”→“ODBC数据源”,打开“ODBC数据源管理器”对话框。
(3)配置第三方工具
以Delphi工具为例,说明第三方工具如何连接到Oracle数据库。其他工具连接Oracle的方法和步骤类似。在Delphi工具启动后,在界面上有许多控件,只要这些控件中有一个datasource 属性,通过设置datasource属性的值就可以实现与Oracle数据库的连接。
例如:在Delphi的界面上,先建立一个Query控件。然后单击Query控件,单击鼠标右键,在弹出的菜单中选择“属性”,进入Query控件的属性窗口,将datasource属性值设置为配置ODBC数据源中新建的数据源名TEST。这样就建立了Delphi与Oracle数据库的连接,Delphi工具就可以访问Oracle数据库的数据。
4.8 Oracle 9i数据库的启动和关闭
当数据库启动时,Oracle为数据库分配一个内存区域,即系统全局区(SGA,它是数据库信息的共享内存区),并启动一个或多个Oracle后台进程。SGA和Oracle后台进程的组合称为Oracle数据库实例。每个打开的Oracle数据库均有一个相关的Oracle实例支撑。
4.8.1 打开数据库
只有数据库管理员才有权打开和关闭数据库,打开Oracle数据库的步骤分三步。
(1)启动实例
在Oracle实例启动阶段,首先读取初始化参数文件,根据参数文件中相应参数的设置,申请一块内存作为SGA,然后为实例创建后台进程。此时,所启动的Oracle实例与将要打开的数据库之间没有任何关系。
(2)装载数据库
将待打开的数据库与前一阶段启动的实例关联。Oracle实例打开数据库的控制文件,从控制文件中读取数据文件和重做日志文件名称。此时数据库仍然没有打开,普通用户不能访问数据库。
(3)打开数据库
Oracle打开数据库的所有联机数据文件和联机重做日志文件。如果这些文件均被正常打开,则完成数据库打开任务,此时普通用户才能正常访问。否则,返回一个错误。
打开数据库的命令有两种。一种方式是采用命令行的方式,命令如下:
C>sqlplus/nolog
SQL>connect/as sysdba
SQL>startup
另一种方式是选择“控制面板”→“管理工具”→“服务”,如果启动数据库orcl,则找到OracleServiceOrcl 服务,启动该服务。如果启动数据库test,则找到OracleServiceTest服务,启动该服务。
4.8.2 关闭数据库
关闭数据库与打开数据库的过程正好相反,关闭数据库也要经过三个步骤。
(1)关闭数据库
这一阶段,Oracle将所有数据库缓冲区中的数据和日志缓冲区中修改前后的数据分别写入数据库数据文件和重做日志文件中,并关闭打开的联机数据文件和重做日志文件。
(2)卸载数据库
系统删除数据库与Oracle实例之间的关联,并关闭数据库控制文件。但此时Oracle实例仍驻留在内存之中。
(3)关闭实例
终止Oracle后台进程的运行,并释放SGA内存区域。
关闭数据库的命令有两种。一种方式是采用命令行的方式,命令如下:
C>sqlplus/nolog
SQL>connect/As sysdba
SQL>shutdown
另一种方式是选择“控制面板”→“管理工具”→“服务”,如果停止数据库orcl,则找到OracleServiceOrcl 服务,停止该服务。如果停止数据库test,则找到OracleServiceTest服务,停止该服务。
如果在关闭数据库时,还有数据库用户连接到此数据库,则必须等待所有的用户都正常退出时才能关闭此数据库。
小结
本章简单地介绍Oracle 9i数据库产品所包含的各种版本信息,以及各种不同的版本适合使用的对象。从四个不同的角度(从物理结构、逻辑结构、内存结构、进程结构)介绍Oracle数据库的组成,以及物理结构与逻辑结构之间的对应关系。同时简单地介绍数据库下可以拥有的各种模式对象(表、视图、索引、同义词、序列生成器、存储过程函数、触发器、快照、链路等)。详细地介绍Oracle 9i数据库产品的安装步骤,以及安装后的目录结构和注册表中的注册信息。同时介绍在数据库安装并创建后系统自动产生的各类数据字典,以及不同的数据字典所包含的内容。接着详细地介绍Oracle 9i分布式数据库的体系结构,客户与服务器的配置方法、配置步骤,配置后所产生的配置文件,以及连接步骤和示例。最后介绍数据库的启动和关闭的步骤和命令。
在学习本章后应该对Oracle 9i数据库系统有一个全面的了解,并且按照本章介绍的安装和连接步骤能够独立完成Oracle 9i产品的安装和进行客户机、服务器的配置和连接。连接后在SQL>提示符下可以完成第5章介绍的各类对象的建立、修改、删除等操作。
习题
1.Oracle系统的实例(Instance)由哪几部分组成?
2.Oracle数据库的启动分几步实现?每一步完成什么功能?
3.试述Oracle分布式体系结构的形式及各自的组成和配置文件。
4.Oracle系统的数据字典包括哪两类?静态数据字典视图又包含哪几类?
5.Oracle数据库中模式(Schema)对象包括哪些?
6.Oracle系统包括哪几类进程?后台进程中必须包含的进程有哪些?
7.Oracle系统在逻辑上由哪些对象组成?按从大到小列出它们的层次结构。
8.Oracle系统启动后会开辟哪几块内存区域?SGA区又由什么组成?
9.Oracle系统由哪些物理文件来组成?这些物理文件各自的作用是什么?