oracle
数据库系统是一个复杂的软件系统。如果不了解其内部的结构原理及关系,就不可能设计和编写出高质量的应用软件系统,也不可能管理好一个复杂的应用系统。为了给以后章节的打好基础,本章简要给出
ORACLE 8 /ORACLE8i
数据库系统结构的描述。
§2.1
术语
数据库块(
BLOCK
)
ORACLE
数据库中的最小存储和处理单位,包含块本身的头信息数据或
PL/SQL
代码。
ORACLE
块的大小是可以在安装时选择
“
自定义安装
”
来指定,也可以在
CREATE DATABASE
创建数据库实例时指定。其最小为
2K
,最大可达为
64K.
瓶颈(
Bottleneck
)
指限制系统性能的部件。
面向对象的关系数据库
具有关系数据库的全部功能,同时又支持面向对象的数据库,称作面向对象关系数据库系统。
Oracle7
是一种功能完备的关系数据库系统;
oracle8
是一种面向对象的关系数据库系统。
客户
/
服务器结构(
Client/Server
)
有客户机、服务器、网络三要素的结构,客户机(
PC
机)通过网络与服务器相连和工作。
胖客户机(
Fat Client
)
一般的
Client/Server
结构中的客户机均为胖客户机。因为这些客户机需要配置较高的设备,如内存、硬盘、主频、
CD_ROM
等。
瘦客户机(
Thin Client
)
也称作
NC
(网络计算机),是一种内存配置小(过去指一般只有
4M
,现无法定义),无硬盘,只有处理心片的处理机。
数据在线分析处理(
OLAP
)
是一种能以快速、交互、方便的方式洞察数据情况的技术。如
Oracle Express
,
Cognos
(加拿大)的
Power Play
,
Business Objects
公司的
Business Object
等。
多线程(
MTS
)
一个用户可以同时运行多个程序对数据库进行访问,比如
Visual C/C++
可以提供同时启动多个进程,而
Visual Basic
则不能。
数据仓库(
Data Warehouse
)
支持大量数据信息存储的叫做支持数据仓储或数据仓库。当把几个小型数据库集成为一个大型数据库,并为一个较广泛的组织服务时,如果该数据库存储历史数据,提供决策支持,提供数据汇总,提供只读数据,并且实质上充当所有向它提供数据的相关成品数据库的数据接收器,那么它通常被叫做数据仓库。
实例(
Instance
)
是访问
Oracle
数据库所需的一部分计算机内存和辅助处理后台进程。
对象(
Objects
)
是实现世界实体的软件表示,如表、索引、视图、同义词、过程等。
数据库文件(
Datafile
)
Oracle
系统中用于存放数据(应用系统数据)的文件。(
<
;
>14
中的例子不准确,容易误导读者)。
控制文件(
Control File
)
Oracle
中存放系统用的一些数据的文件。如数据文件的路径及文件名,初始化文件路径及
文件名等都存放在控制文件中。
日志文件(
Logs File
)
也叫事务记录文件,该文件记录有事物对数据库进行的一切修改操作或事务。
DBA
(
Database administrator-
数据库管理员)
是管理数据库系统的技术工具或人员,在完备的数据库系统中都提供
DBA
功能。
灰数据块(
Dirty data block
)
存放在内存中的原始数据已被修改,而修改后的数据还未写入数据库中。
热数据块(
Hot data block
)
存放着那些经常被修改数据叫热数据块。
LRU
(
Least Recently Used-
最近最少用)
Oracle
系统使用的一种算法,对于在内存中但最近又不用的数据块(内存块)叫做
LRU
,
Oracle
会根据那些数据属于
LRU
而将其移出内存而腾出空间来加载另外的数据。
表(
Table
)
存放专门数据而建立和分配的空间。
表空间(
Tablespace
)
是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表,
所以称作表空间。
回滚(
Rollback
)
将用户(或者说事务)改变的数据恢复到上一次所处的状态。
恢复信息(
Undo Information
)
记录用于恢复的信息称作恢复信息。回滚就是根据恢复信息内容进行恢复的。
§2.2 Oracle
数据库结构
Oracle
数据库结构是
Oracle
数据库系统的主要部分,它是一些可以看得见的软件,包括:
Oracle
数据字典
l
表空间与数据文件
l Oracle
实例(
Instance
)
§2.2.1 Oracle
数据字典
Oracle
数据库的重要部分是数据字典。它存放有
Oracle
数据库所用的有关信息,对用户来说是一组只读的表。数据字典内容包括:
数据库中所有模式对象的信息,如表、视图、簇、及索引等。
分配多少空间,当前使用了多少空间等。
列的缺省值。
约束信息的完整性。
Oracle
用户的名字。
用户及角色被授予的权限。
用户访问或使用的审计信息。
其它产生的数据库信息。
数据库数据字典是一组表和视图结构。它们存放在
SYSTEM
表空间中。
数据库数据字典不仅是每个数据库的中心。而且对每个用户也是非常重要的信息。用户可以用
SQL
语句访问数据库数据字典。
§2.2.2
表空间与数据文件简单说,表空间就是一个或多个数据文件(物理文件)的集合(逻辑文件)。一般有下面的表空间:
1
)系统表空间(
System tablespace
)
是各种不同版本的
Oracle
必备的部分,存放
Oracle
系统的一些信息,一般只有一个
SYSTEM
表空间。
2
)临时表空间(
Temporary tablespace
)
由于
Oracle
工作时经常需要一些临时的磁盘空间,这些空间主要用作查询时带有排序(
Group by
,
Order by
等)等算法所用,当用完后就立即释放,对记录在磁盘区的信息不再使用,因此叫临时表空间。一般安装之后只有一个
TEMP
临时表空间。
3
)工具表空间(
Tools tablespace
)
用于保存
Oracle
数据库工具所需的数据库对象,这些工具表空间存放在工作时所用的专用表。旧的
Oracle
版本无此表空间。安装之后的工具表空间是
Tools.
4
)用户表空间(
Users tablespace
)
用于存放一些实验例子用的空间,当然也可以用于存放应用系统的数据。旧版本无
Users
表空间。现在的用户表空间为
USERS .
5
)数据及索引表空间存放数据及索引的表空间,
Oracle7
以后都提倡在应用系统中,特别是具有大量数据的系统,要把数据和索引分开存放在不同的分区中,以便提高查询速度。在安装后索引表空间可能是
INDX.
数据表空间就是
USERS.
6
)回滚段表空间(
Rollback Segment
)
Oracle
数据库系统在运行
Insert
、
Update
、
Delete
时都需要一个磁盘空间来存放恢复信息(
Undo Information
),以便在进行恢复时能将原来信息读出来。安装后的回滚段表空间是
RBS
表空间。数据库管理员也可根据应用的需要建立另外的回滚段表空间。
Oracle
以表空间来存储逻辑数据并
以物理数据相连。
数据库被分成一个或多个逻辑部件称作表空间。而表空间又被分成称作段(
segment
)的逻辑部件。这些段再细分就叫扩展(
extents
)。
§2.2.3 Oracle
实例
Oracle
实例(
Instance
)是由一组后台进程和内存结构组成。每个运行的数据库系统都与实例有关。所以,有时称
Oracle
实例为数据库操作系统。下面是
Oracle
实例的解释。
Oracle
进程
Oracle
有两种类型的进程:
服务器进程和后台进程(
server processes and background processes
)。
服务器进程
Oracle
服务器进程是处理用户与实例连接的事务。任务是:
分析和执行应用所发出的
SQL
语句。
从数据文件读必要的数据到
SGA
区的共享数据区。
返回必要信息给应用。
后台进程
Oracle
系统使用一些附加的进程来处理系统的必须的工作。这些进程叫后台进程:
数据库写
(
DBW0
或
DBWn
)
日志写
(
LGWR
)
检测点
(
CKPT
)
系统监视
(
SMON
)
进程监视
(
PMON
)
归档
(
ARCn
)
恢复
(
RECO
)
锁(
LCK0
)
工作队列
(
SNPn
)
队列监视
(
QMNn
)
发布(
Dispatcher
)
(
Dnnn
)
服务器
(
Snnn
)
Oracle
的内存结构(
SGA
)
SGA
结构为:
数据高速缓冲区
l
重做日志缓冲区
l
共享池
l
大的共享池(可选)
数据字典缓冲区
l
其它数据缓冲区
§2.3 Oracle
数据库文件
ORACLE
数据库是一个复杂的数据库操作系统,由一系列部件组成,主要有:
1
)初始化参数文件、
2
)数据文件、
3
)控制文件、
4
)日志文件等。
§2.3.1
初始化参数文件初始化参数文件(
initialization parameter file
)
INITsid.ORA
,是
ORALE RDBMS
主要的配置点,它是配置参数和数值的集合。每一个参数值都控制或修改数据库和实例的某个方面。
早期的版本把参数都写在
initsid.ora
文件中,但在
ORACLE8
之后,多数参数已不在该文件中出现,需修改这些参数时只能在
SQL>
;下用
SET SESSION
或
SET SYSTEM
来进行。
查看系统参数可用。例如:
SQL>
;
select * from v$parameter
;
来列出。
Oracle
初始化参数文件是一个可以编辑的文本文件。它是在数据库实例启动时被访问,从而得到数据文件、日志文件、控制文件等的路径,此外,初始化参数文件还提供实例所用的参数等。
初始化参数文件
INITsid.ORA
参见
附录
.
§2.3.2
数据文件用于存放所有数据库的数据文件,
Oracle
安装过程中自动建立多个必要的数据文件。这些数据文件用于存放
Oracle
系统的基本数据。在应用系统开发过程中,我们可根据需要另建立一些数据文件。
如果数据文件按它们存放的数据类型来分的话,可以分为:
l
用户数据
存放应用系统的数据为用户数据。
系统数据
管理用户数据和数据库系统本身的数据,如数据字典,用户建立的表的名字,类型等都记录在系统数据中。
§2.3.3
控制文件控制文件是由
Oracle
数据库实例在启动时被访问的内部二进制文件,它们所存放的路径由参数文件的
control_files=
参数来确定。
Oracle
一般有两个或更多的控制文件,每个控制文件记录有相同的信息,在数据库运行中如果某个控制文件出错时,
Oracle
会自动使用另外一个控制文件。当所有的控制文件都损坏时系统将不能工作。
Oracle
数据库至少有一个控制文件;
一般数据库系统安装完成后,自动创建两个以上控制文件;
为了安全一般建议创建多个控制文件;
控制文件可用下面命令查到:
一般数据库系统安装完成后,自动创建两个以上控制文件;
为了安全一般建议创建多个控制文件;
控制文件可用下面命令查到:
select name
,
value from v$parameter where name like 'control_files'
;
§2.3.4
重做日志文件重做日志文件是
Oracle
系统中一个很重要的文件。特点是:
重做日志是
Oracle
的日记帐,负责记录所有用户对象或系统变更的信息;
安装完成后有多个重做日志文件,它们是几个分为一组,组内的重做日志文件大小要一样;
为了使系统性能更好可以在创建多重做日志文件组;
重做日志文件可以名下面命令查到:
安装完成后有多个重做日志文件,它们是几个分为一组,组内的重做日志文件大小要一样;
为了使系统性能更好可以在创建多重做日志文件组;
重做日志文件可以名下面命令查到:
select * from v$logfile
;
§2.3.5
其它支持文件除了上面的三类文件外,还有:
Sqlnet.ora 文件;
Tnsnames.ora 文件;
Listener.ora 文件等。
Sqlnet.ora 文件;
Tnsnames.ora 文件;
Listener.ora 文件等。
§2.4
重做日志和重做日志工作模式重做日志、日志文件及重做日工作模式是
Oracle
系统中很重要的概念,管理员要完全理解它们的原理和使用方法。下面只给简单的概念,有关的管理在另外章节给出。
§2.4.1
重做日志
Oracle
所作的一切操作都记录在日志文件中,
Oracle
系统在工作当中并不是每作一条记录的修改就立即存盘(写入数据文件),而是只作修改记录,联机重做日志就保存所有这些改变的信息。当所有的修改最后写入数据文件时,所有的修改仍记录在联机重做日志中,这将有利于对这些事务记录进行恢复操作。但如果不是联机重做日志,则只能恢复部分近期的操作。
§2.4.2
重做日志工作模式
Oracle
可以在两种模式之一来工作:
1
)
ARCHIVELOG
模式(可恢复)
Oracle
一般至少有两个日志文件。它们轮流交替地被写入所作的一切修改信息。当系统设置为可恢复模式,
Oracle
自动将每次即将被覆盖(冲掉)的日志信息先作备份,然后再其上记录所修改的信息。这样的方式,就可以利用备份与恢复工作进行某时期的数据恢复。
2
)
NOARCHIVELOG
模式(有限的恢复)
缺省情况下为
NOARCHIVELOG
,
Oracle
不保留旧的重做日志信息(可以在原来基础覆盖写入)。因此一般情况下不可恢复的。
§2.5
数据块、区间和段
§2.5.1
数据块(
data block
)
Oracle
的数据块也叫
Oracle
块;
Oracle 系统在创建表空间时将数据文件格式化成若干个 Oracle 块;
每个 Oracle 块是 Oracle 系统处理的最小单位;
块的大小在安装系统时确定,可以选择 “ 自定义安装 ” 来设置大小;
块的大小一旦确定下来就不能改动;
块的大小可以从 2k 至 64k 不等;
块的大小可以用下面命令查到:
Oracle 系统在创建表空间时将数据文件格式化成若干个 Oracle 块;
每个 Oracle 块是 Oracle 系统处理的最小单位;
块的大小在安装系统时确定,可以选择 “ 自定义安装 ” 来设置大小;
块的大小一旦确定下来就不能改动;
块的大小可以从 2k 至 64k 不等;
块的大小可以用下面命令查到:
select name
,
value from v$parameter where name like 'db_block_size'
;
§2.5.2
区间(
extent
)
l
分配给对象(如表)的任何连续块叫区间;
l
区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);
l
区间的大小由
next
决定;
l
一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象;
l
一个对象所用去多少区间可用下命令查到:
select segment_name
,
tablespace_name
,
count
(
*
)
from dba_extents having count
(
*
)
>
;
1 group by segment_name
,
tablespace_name
;
§2.5.3
段(
segment
)
l
段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;
l
段可以有表段、索引段、回滚段、临时段和高速缓存段等;
l
段使用同表空间中的若干
Oracle
块(可以位于不同数据文件中)。
例:
CREATE TABLE abc
(
empno number
(
4
),
ename varchar2
(
20
),
sal number
(
9
,
2
))
TABLESPACE user_data storage
(
initial 500k next 256k pctincrease 0
);
1)
段被分配=初始区间=
500k
;2)
当开始的
500k
用完后就再分配
256k
;
此时段=
500k+256k
;3)
如果所分配的区间又用完后,就再分配
256k
,
…
段(
segment
)、区间(
extent
)及块的关系(
seg_ext_block
)
§2.6 Oracle
数据库进程一般情况,当数据库启动完成后(
Instance
启动成功)就至少有六个后台进程在活动,这些进程根据数据库的需要而分工不同。他们分别是:
1
)数据库写入器(
DBWR
)
数据库写入器(
Database Writer
)的任务是将修改后的(在内存)数据块写回数据库文件中。在某些操作系统中,
Oracle
可以有两个
BDWR
进程。
2
)校验点(
CKPT
)
是一个可选进程。在系统运行中当出现查找数据请求时,系统从数据库中找出这些数据并存入内存区,这样用户就可以对这些内存区数据进行修改等。当需要对被修改的数据写回数据文件时就产生重做日志的交替写(
Switch
),这时就出现校验点。系统要把内存中灰数据(修改过)块中的信息写回磁盘的数据文件中,此外系统还将重做日志通知控制文件。
DBA
可以改变参数文件中
CHECKPOINT_PROCESS TRUE
来使能(
使有效或无效)该进程。
3
)日志写入器(
LGWR
)
用于将
SGA
区中的日志信息写入日志文件的进程。一般是用户所作的修改值先记入日志文件。等到一定时才真正将修改结果写回数据文件。
4
)系统监控器(
SMON
)
系统监控器(
System monitor
)是在数据库系统启动时执行恢复工作的强制性进程。比如在并行服务器模式下(两台服务器共用一磁盘组),
SMON
可以恢复另一台处于失败的数据库。使系统切换到另一台正常的服务器上。
5
)进程监控器(
PMON
)
进程监控器(
Process Monitor
)用于终止那些失败的用户,释放该用户所占用的资源等。
6
)归档器(
ARCH
)
可选进程,当数据库系统处于归档(
ARCHIVELOG
)模式时使用。
7
)锁(
LCKn
)
可选进程,当在并行服务器模式可出现多个锁定进程以利于数据库通信。
恢复器(
RDCO
)
分布式数据库(不同地点有不同机器和不同的
Oracle
系统)模式下使用的可选进程,用于数据不一致时作的恢复工作。在
RECO
解决恢复前,所作的修改数据的标志均标为
“
可疑
”
。
9
)调度(
Dnnn
)
可选进程,在多线程下使用,即对每个在用(
D000
,
……
,
Dnnn
)的通信协议至少创建一个调度进程,每个调度进程负责从所联接的用户进程到可用服务器进程的路由请求。把响应返回给合适的用户进程。
10
)快照进程(
SNPn
)
快照进程处理数据库快照的自动刷新,并通过
DBMS_JOB
包运行预定的数据库过程。
INITsid.ORA
参数
JOB_QUEUE_PROCESS
设置快照进程数,
参数
JOB_QUEUE_INTERVAL
决定快照进程在被唤醒以处理挂起的作业或事务之前休眠的秒数。
11
)并行查询进程(
Pnnn
)
可根据数据库的活动并行查询选项的设置,
ORACLE
服务器起动或停止查询进程。这些进程涉及并行索引的创建,表的创建及查询。
启动的数量与参数
PARALLEL_MIN_SERVERS
指定的数量相同,不能超出该参数指定的值。
§2.7 Oracle
内存结构前面提到过
Oracle
的数据库实例是一组后台进程和内存结构组成。而内存结构是包括:
l
系统全局区(
System Global Area
)
l
程序全局区(
Program Global Area
)
§2.7.1
系统全局区
Oracle
系统用于存放系统信息的一块存储区域,用户进程和
Oracle
后台进程都可以使用
SGA.
在
SGA
中含有许多组件(不同的部分)。
l
数据高速缓冲区(
Data Buffer Cache
)
在数据高速缓冲区中存放着
Oracle
系统最近使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用访问的数据。如果用户要查的数据不在数据高速缓冲区时,
Oracle
自动从磁盘中去读取。数据高速缓冲区包括三个类型的区:
1
)
脏的区(
Dirty Buffers
):包含有已经改变过并需要写回数据文件的数据块。
2
)
自由区(
Free Buffers
):没有包含任何数据并可以再写入的区,
Oracle
可以从数据文件读数据块该区。
3
)
保留区(
Pinned Buffers
):此区包含有正在处理的或者明确保留用作将来用的区。
Oracle8i
以后将缓冲池分为三个区(使用多个缓冲池特性时):
1
)
KEEP
缓冲池(
KEEP buffer pool
):在内存中保留数据块,它们不会被从内存中挤掉;
2
)
RECYCLE
缓冲池从不需要的内存将数据移掉;
3
)
DEFAULT
缓冲池包含有被分配的块。
l
重做日志缓冲区(
Rado Log Buffer
)
任何事务(
Transaction
)在记录到重做日志(恢复工作需要使用联机重做日志)之前都必须首先放到重做日志缓冲区(
Redo Log Buffer
)中。然后由日志写入进程(
LGWR
)定期将此缓冲区的内容写入重做日志中。
l
共享池(
Shared Pool
)
共享池是
SGA
保留的区,用于存储如
SQL
、
PL/SQL
存储过程及包、数据字典、锁、字符集信息、安全属性等。共享池包含有:
1
)
库高速缓存(
Library Cache
);
2
)
字典高速缓冲区(
Dictionary Cache
)。
l
库高速缓存(
Library Cache
)
该区包含有:
1
)
共享
SQL
区(
Shared Pool Area
);
2
)
私有
SQL
区(
Private SQL Area
);
3
)
PL/SQL
存储过程及包(
PL/SQL Procedure and Package
);
4
)
控制结构(
Control Structure
)。
也就是说该区存放有经过语法分析并且正确的
SQL
语句,并随时都准备被执行。
l
字典高速缓冲区(
Data Dictionary Cache
)
用于存放
Oracle
系统管理自身需要的所有信息,这些信息是登录到
Oracle
的用户名,这些用户有那些数据库对象以及这些数据库对象的位置等。
SVRMGR>
;
Show SGA Total System Global Area 35544188 bytes Fixed Size 22208 bytes Variable Size 3376332 bytes Database Buffer 122880 bytes Redo Buffer 32768 bytes
后四项相加等于前一项。
也可以使用
select * from v$SGA
;
查询当前实例的
SGA.
l
大的池(
Large Pool
)
在
SGA
中大池是可选的缓冲区。它可以根据需要有管理权进行配置。它可以提供一个大的区以供象数据库的备份与恢复等操作。
2
)程序全局区(
PGA
)
PGA
是
Oracle
使用的内存区域,该区同一时间只能被一单个进程存放数据和控制,用于存放会话变量及内部数组等。
SGA Oracle
内存结构(
SGA
图)
§2.7.2
程序全局区
PGA
是
Oracle
使用的内存区域,该区同一时间只能被一单个进程存放数据和控制,用于存放会话变量及内部数组等。
§2.8 Oracle
实例一个
Oracle
实例(
Instance
)
是由
SGA
,后台进程以及数据文件组成,每个数据库有自己的
SGA
和独立的
Oracle
进程集。如图所示:
Oracle
实例和后台进程(
instance
图)
在分布情况下,为使不同的数据库系统的名字不致混淆,
Oracle
使用了一个
SID
(
System Identifer
)来标识每个
Oracle Server
的名字,在
UNIX
环境中以变量
Oracle_Sid
来区分。
§2.9
多线程服务器
(
MTS
)
Oracle
多线程服务器(
Multithreader Server
)允许对数据库进行多个连接以充分共享内存和资源,这使得可以用较少的内存来支持较多的用户。
连接到
Oracle
数据库的进程都需要占用一定的内存空间,这样如果有过多的进程连接到
Oracle
,则出现了一个性能瓶颈。
Oracle8
可以允许一万个以上用户同时连接到
Oracle
,但并不是所有的用户都使用
MTS.
目前的一些
4GL
工具并不支持
MTS
,象
VB
,
PB
等不支持
MTS
,象
VC/C++
可以支持
MTS. Oracle
多线程服务器有自己的连接池(即共享服务器进程)。由于用户共享开放连接,这比原来的专用方法快的多(消除瓶颈)。
多线程对于一些专用的应用系统来说是非常合适的,比如订单登记系统,顾客提交订单,录入员该订单的数据;另外的录入员在与顾客交涉,并不都在录入数据(专用服务器进程闲着)。单这些终端被迫与系统连着,占据了其他用户的资源。
多线程服务器则消除这些缺点。多线程服务器只维护一个连接池,当某个终端需和系统对话则给其分配一个连接即可。不需要则可以去掉。这样系统的资源被多个用户平摊。
改变参数文件中的相关参数来达到使系统成为多线程服务器配置(重新启动即可有效)。另外,数据库实例必须提供用户数目与所放置的一样才行。
§2.10 Oracle
事务处理流程银行取款业务处理流程:
1.
发出查询余款的
SQL
语句,如:
Select account_balance From banktable Where account_number='111222333' And account_type='SAVINGS'
;
l SQL
语句通过
SGA
得到服务器进程;
l
服务器进程检查共享池中有无该条语句,无该条语句则将放置共享池中并准备运行;
l
执行
SQL
语句,把存放有余款的数据块从数据文件中读到
SGA
的数据高速缓冲区;
l
显示结果,比如余款为
$325.
2.
取款
$25
:
SQL
语句为:
Update Bank_table set account_balanct=300 Where account_number='111222333' And account_type='SAVINGS'
;
l
客户进程通过
SGA
把
SQL
语句传给服务器进程;
l
服务器进程查找有无该条语句,有执行(;
l
分析
SQL
语句并存入共享池;
l
执行
SQL
语句;
l
要处理的数据在数据高速缓冲区吗?是转
7
;
l
从数据文件中读数据块到数据高速缓冲区;
l
在回滚段中记录原来的数值(
$325
);
l
在重做日志中生成该事务的一个拷贝;
l
将数据高速缓冲区中的余额改为
$300
;
l
银行柜员机通过
SGA
发出工作完成信号(提交):
l
在重做日志中记录已完成事务;
l
清除回滚段中的恢复信息(
Undo Information
);
l
顾客取钱完成。
§2.11 ORACLE
系统的
SYS
和
SYSTEM
模式
SYS
和
SYSTEM
是每个
ORACLE
数据库系统缺省安装的两个帐户。
SYS
是所有内部数据库表、结构、过程包、等拥有者,此外它还拥有
V$
和数据字典视图,并创建所有封装的数据库角色(
DBA
,
CONNECT
,
RESOURCE
)。
Sys
是一个唯一能访问特定内部数据字典的用户。
System
也是在安装
ORACLE
时创建的用户,用于
DBA
任务的管理。
SYS
安装后的缺省口令为
change_on_install
;
SYSTEM
缺省口令为
manager.
为了安全,可在安装完成后。
用
ALTER USER sys IDENTIFIED BY password
;
命令修改这两个特权帐户的口令。
§2.12 ORACLE
系统跟踪文件所有
ORACLE
数据库都至少有一个文件用于记录系统信息,错误及主要事件。这个文件叫做
ALERTsid.log
(这里的
sid
为
oracle
的系统标识),存储位置由
INITsid.ORA
文件的
BACKGROUND_DUMP_DEST
参数给出。
后台进程和用户进程都可以建立各自的跟踪文件,后台进程跟踪文件位置由
BACKGROUND_DUMP_DEST
参数给出,
而用户跟踪文件位置由
USER_DUMP_DEST
参数给出。
如参数文件
initora8.ora
中给出:
# define directories to store trace and alert files background_dump_dest=d
:
/oracle/admin/ora8/bdump user_dump_dest=d
:
/oracle/admin/ora8/udump
后台跟踪文件被命名为
sidPROC.TRC
§2.13 ORACLE
系统数据字典数据字典(
data dictionary
)是存储在数据库中的所有对象信息的知识库,
ORACLE
数据库系统使用数据字典获取对象信息和安全信息,而用户和
DBA
用它来查阅数据库信息。数据字典保存数据对象和段的信息。如表、视图、索引、包、过程以及用户、权限、角色、审计等的信息。数据字典是只读对象,不允许任何人对其进行修改。
§2.14
其它数据对象
ORACLE
除前面给出的数据对象外,还有包括视图,序列,同义词,触发器,数据库链及程序包,过程和函数。下面是必要介绍。
§2.14.1
视图视图是存储在数据库中的查询的
SQL
语句,它主要出于两种主要原因:安全原因,
视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。
§2.14.2
序列序列是用于产生唯一数码的数据库对象,序列创建时带有
初始值,增量值,最大值等,最大可达
38
位整数。
§2.14.3
触发器触发器(
trigger
)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由个事件来触发,比如当对一个表进行操作(
insert
,
delete
,
update
)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。
触发器可以从
DBA_TRIGGERS
,
USER_TRIGGERS
数据字典中查到。
§2.14.4
同义词同义词(
synonym
)是指向其它数据库表的数据库指针。同义词有两种类型:私有(
private
)和公共(
public
)。私有的同义词是在指定的模式中创建并且只创建者使用的模式访问。公共同义词是由
public
指定的模式访问,所有数据库模式(用户)都可以访问它。
§2.14.5
数据库链数据库链(
database link
)是与远程数据库连接的存储定义,
它们用于查询分布数据库环境的远程者。
由于存储在
DBA_DB_LINKS
数据字典中,所以可以把它们看作一种数据库对象类型。