第四章 ORACLE 数据库
DBMS结构与功能
ORACLE体系结构
事务处理
并发控制
备份恢复
安全管理
4.1 DBMS结构与功能数据库系统中对数据进行管理的软件,是数据库系统的核心组成部分 。
数据库定义:
DBMS提供数据库定义语言定义数据库结构,包括外模式,模式,内模式及相互之间的映射,定义完整性约束,安全限制等;
数据操纵:
提供数据库操作语言实现对数据库的操纵;
数据库运行控制:
数据安全性控制;
数据完整性控制;
并发控制;
数据库恢复机制;
数据库维护:
数据的载入,转储,数据库的重组织,性能监视及分析等 。
事务管理
事务 是一个操作集合,完成数据库应用中的单个逻辑功能
事务管理部件确保数据库在即使发生了系统故障 (e.g.,电源故障和操作系统崩溃 )或事务故障的情况下仍处于一致 (正确 )状态,
并发控制管理器控制并发事务之间的交互,以确保数据库的一致性,
存储管理
存储管理器提供存储在数据库中的底层数据与应用程序和提交给系统的查询之间的界面,
存储管理器负责下列任务,
– 与文件管理器的交互
– 高效地存储,获取和修改数据
查询处理及优化
备份及恢复
Oracle公司 1977年在加利福尼亚的 Redwood成立,在
IBM的 System/R(关系模型 )的基础上,推出了第一个使用 IBM的结构化查询语言 SQL的 RDBMS;
Oracle RDBMS可用于几乎所有的操作环境,包括 IBM大型机,DEC VAX小型机、基于 UNIX系统的小型机、
Windows NT以及一些专用硬件操作系统平台;
世界上最大的 RDBMS供应商,也是世界上最主要的信息处理软件供应商,是仅次于微软公司的世界第二大软件公司。
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:客户关系管理、企业外部管理
ORACLE体系结构:
ORACLE内存结构
ORACLE进程结构
ORACLE物理存储结构
ORACLE逻辑存储结构
4.2 ORACLE体系结构
ORACLE体系结构
P M O N L C K n R E C O R E C O
sh a r e d P o o l D a t a b a se B u f f e r C a ch e
R e do L og
B u f f e r
S G A
D a ta
D a ta
D a ta
D a ta
D a ta
D a ta
D a ta
D a ta
D a ta
D a ta
D a t a
f i l e s
R e d o L o g
f i l e s
P a r a m e t e r
F i l e
C o n t r o l
f i l e s
S e r v e r
U s e r
D B WR L G WR
C K P T
A R C H
O f f l i n e
st o r a g e
Oracle
体系结构
Instance
内存 共享池
SGA数据库缓冲区日志缓冲区进程
DBWR:数据库写入其他进程:恢复、
快照、锁等
LGWR:日志写入
CKPT:检查点
SMON:系统进程
PMON:进程监控
ARCH:归档进程
Database
物理存储数据文件 其他文件:参数文件、口令文件、归档文件日志文件控制文件逻辑存储表空间段区间块
ORACLE的进程结构用户进程指一般的应用程序或 ORACLE工具代码。
ORACLE进程执行 ORACLE服务器代码,包括服务进程和后台进程。
服务器进程用于接受和处理连接到该实例的用户进程的请求。
后台进程为了提高系统性能异步执行各自特定任务的一组进程。
服务器进程:
当应用程序和 ORACLE运行在同一机器上时,可将用户进程和相应服务器进程组合到单个进程;
当不在同一机器上时,用户进程通过一个单独的服务器进程与 ORACLE联系,完成:
( 1)分析和执行由应用发来的 SQL语句;
( 2)将不在 SGA中的所需数据块从数据文件拷贝到共享数据库缓冲区;
( 3)按应用程序处理信息的方法返回结果。
后台进程:不是所有的一直都存在。
DBWR数据库写进程,把所有修改过的缓冲块写回数据文件,同时使用 LRU
算法以保证最近被使用过的块在内存中,以及延迟写以实现 I/O优化。
LGWR日志写进程,负责把信息从日志缓冲区写回磁盘。
CKPT检测点进程,到达检测点时,进程将修改数据文件的标记和记录检测点的细节。
SMON系统监控进程,自动执行自动实例恢复,收回排序等操作使用的临时段所占用的空间,合并 DATAFILE中的自由空间。
PMON进程监控,用户监督进程,当检测到非正常终止的用户进程后,就会清除这个用户进程所作的连接,滚回它提交的事务,释放它保持的资源锁
,释放未这个失败进程分配的 SGA资源。 PMON还会自动检测死锁并滚回事务以自动解决死锁。
ARCH归档进程,可被将启动将日志文件归档到一个更大的、但可以是低速的存储设备上。
RECO恢复进程,用以解决分布式事务的失败所引起的问题。
LCKN锁进程,在并行服务器中执行内部实例锁。
SNPn作业队列进程:用于分布式数据库配置,可以自动刷新表快照;
QMNn队列监控进程:是为监控消息队列的 Oracle高级队列的可选后台进程;
Dnnn调度程序进程:通过允许用户进程共享限定数量的服务器进程来支持多线索配置;
Snnn共享服务器进程:在多线索配置中,每个共享服务器进程服务于多个客户请求。
ORACLE的内存结构基本内存结构:
软件代码区;
系统全局区( SGA);
程序全局区( PGA):堆栈区、数据区排序区软件代码区:
用于保存正在执行或可能执行的代码。
软件区的大小一般不变,是只读的,可以是共享或非共享的。
PGA
程序全局区,包含某个服务器或后台进程的数据和控制信息。局部的,非共享的数据结构。当一个用户进程连接到 ORACLE数据库从而建立起了一个会话时,ORACLE就分配一个 PGA区给它。
PGA包括的信息:
堆栈空间,保存会话的变量、数组和其他信息;
会话信息:
私有 SQL区:用于保存捆绑变量和运行缓冲区。
SGA
由 ORACLE为某实例分配的共享内存结构,它包含该实例的数据和控制信息。
包括:
数据库缓冲区;
共享池;
日志缓冲区;
数据库缓冲区( DataBase Buffer Cache):
它保存着读从磁盘读出的数据块的副本,由所有当前连接到
ORACLE实例的用户进程所共享,缓冲区由一个个数据块所组成,
块大小可由参数 DB-BLOCK-SIZE决定,块大小与块数参数 DB-
BLOCK-BUFFERS可共同确定数据库缓冲区的大小,
数据库缓冲区由两个表来描述:
脏表( Dirty List)和最近最少使用表( LRU)。脏表描述了修改过但还没有写回磁盘的缓冲区中的数据块;而 LRU表则描述缓冲区中,那些是自由缓冲区、约束缓冲区(当前正在存取)
和脏缓冲区(已改,需写回外存)。
当一个服务器进程要把数据块从磁盘读入数据库缓冲区时,
它就搜索 LRU表,以找出一个自由缓冲区并把脏缓冲区写入脏表中。当它找到了一个自由缓冲区,或已经搜索了指定数量的缓冲区仍没有找到一个自由缓冲区时,就停止搜索。
共享池包括库高速缓存和数据字典缓存。
共享缓冲池的大小是由参数 SHARED_POOL_SIZE决定,
库高速缓存包括共享 SQL区、私有 SQL区,PL/SQL过程和包以及控制结构。共享 SQL区包括 SQL语句的文字形式、
分析后的形式以及执行方案。当两个用户执行相同的一条 SQL语句时,可以重用相同的共享 SQL区及相关信息。
数据字典缓存保存数据字典信息。
日志缓冲区是一个环形缓冲区,用于保存对数据库所做的全部修改信息。信息保存在重做条目中。
后台进程( LGWR)负责把信息从日志写回磁盘。另一个后台进程:存档进程( ARCH)可被启动将日志文件归档到一个更大的、但可以是低速的存储设备上,如磁带机。所以日志文件又叫:联机日志文件,被归档的日志文件叫做存档日志文件。
排序区排序需要内存空间,ORACLE利用排序区的内存部分进行排序。
排序区存在于要求排序的 ORACLE用户进程的内存中。
SORT_AREA_RETAINED_SIZE决定排序区减少到的大小,最小值等于一个数据块,最大值是初使化参数
SORT_AREA_SIZE的大小。
当一个用户会话使用 SQL*Net驱动程序连接到服务器会话时,开始一个事务。
这个连接可以使用它自己的一个服务进程进行专用连接,或通过调度进程处理的一个共享连接。
服务器会话对传递给它的 SQL语句与已经保存在共享
SQL区中的语句进行比较,如果在共享池中发现有完全一样的语句,使用该语句早已存储的做过语法分析的形式与执行计划。如果在共享池中没有发现匹配语句,服务器进程对这些语句进行语法分析。
ORACLE处理过程
服务器会话查看在数据库缓冲区中是否已经存储了完成该事务所必须的数据块。如果在缓冲区中没有,服务器会话就从数据文件中读取必要的数据,将它们拷贝到缓冲区中。如果事务是一个查询,服务器会话将查询的结果返回给用户进程(执行必要次数的数据块读和拷贝以返回所有数据)。
对一个修改数据的事务例如更新。在将必要的数据块读入缓冲区高速缓存中之后,修改内存中的数据块。修改的缓存块标记为脏的,并把它们放入脏列表中。还产生重做信息,并将重做信息存储在重做日志缓存中。
如果事务是相对短期的,事务完成,用户提交,发出信号给 LGWR进程让它将重做日志缓冲区刷新到联机重做日志文件。如果事务相对持续很长和复杂,则:
1)产生的重做引起重做日志缓冲区写满三分之一的空间,这会触发 LGWR进程刷新重做日志缓冲区。
2)放入脏列表中的块数达到限定的长度,这会触发 DBWR进程将数据库缓冲区所有脏列表项刷新写入到数据文件中,它反过来也使 LGWR进程向磁盘刷新重做日志缓冲区。
3)遇到一个数据库检查点,这将触发数据库缓冲区高速缓存和重做日志高速缓存刷新。
4)可获得的缓冲区高速缓存中的自由缓存空间下降到规定的门限以下,这也会引起数据库高速缓存缓冲区的刷新。
5)产生一个不可恢复的数据库错误,这迫使该事务中断、回滚并向服务器会话报告错误。
当事务正在处理向重做缓存生成的重做并刷新时,联机重做日志逐渐被填满。当前日志被填满后,LGWR进程开始写入下一个日志组;与此同时,归档进程将重做日志复制到磁盘或磁带。因为直到所有重做日志信息从重做缓冲区写入到联机重做日志之后,事务才被记录为执行成功的,所以 LGWR和 ARCH必须各自有能力在无错误的情况下完成自己的任务。
ORACLE实例系统全局区和后台进程称为 ORACLE的一个实例。
打开一个 Oracle数据库的过程具体包括以下三步:
1)创建一个 Oracle实例
2)由实例安装数据库
3)打开数据库
Oracle实例在数据库启动时创建。读取 init.ora参数文件,启动后台进程,初始化系统全局区( SGA)。
init.ora文件定义了实例的配置,包括内存结构的大小和启动后台进程的数量和类型等。
实例安装数据库阶段。 init.ora文件中的控制文件参数值决定数据库的安装实例。在安装阶段,读取控制文件并使其成为可访问的,可以对控制文件内存储的数据进行查询和修改。
打开数据库阶段。在这一阶段,存储在控制文件中的数据库文件以排它使用方式被实例锁定,使数据库能够被普通用户访问。打开是数据库的正常操作状态,在数据库打开之前,只有 DBA能访问数据库,且只能通过服务器管理器对其进行访问。
启动数据库命令:
STARTUP [FORCE][RESTRICT][PFILE=filename]
[OPEN [RECOVER]|MOUNT|NOMOUNT];
FORCE 强制关闭数据库,然后正常启动,
RESTRICT 启动数据库,只允许具有特权的用户访问,
RECOVER 启动数据库同时开始介质恢复,
PFILE 说明启动实例使用的参数文件及其位置。
Oracle
启动进程
0 开始状态
SHUTDOWN
1 启动实例读参数文件;分配 SGA;
启动后台进程;打开跟踪文件和警告。
NOMOUNT
(Start up
nomount;)
2 装载数据库打开控制文件 (控制文件的位置在参数文件中约定 )。
MOUNT
(Alter database
mount;)
3 打开数据库打开数据文件;打开日志文件; (数据库包含的文件名及位置信息在控制文件中约定 )。
OPEN
(Alter database
open;)
关闭数据库过程与启动相反,关闭数据文件,关闭日志文件,关闭控制文件,关闭实例并释放资源。
关闭数据库命令:
SHUTDOWN
[NORMAL|TRANSACTIONAL|IMMEDIATE|ABORT];
NORMAL等待所有用户正常结束他们的会话;
TRANSACTIONAL等待事务结束,但不等待用户退出;
ABORT立即关闭实例,不等待任何未完成事务的完成和用户的退出;
IMMEDIATE则是终止目前正在执行的 SQL语句,滚会所有未提交的事务,然后关闭。
数据文件存储所有的数据库数据,以及元数据。
日志文件记录了所有对数据库的修改信息,用于数据库的恢复。
数据库的每个实例都有两个或更多个联机重做日志文件。
控制文件保存对于 DBMS操作关键的信息。
参数文件决定一个实例的特性。
Oracle物理存储结构数据文件:
数据库的全部数据被逻辑地存储在表空间中,而被物理地存储在数据文件中。 存储在数据文件中的数据采用 Oracle二进制格式,这样除了 Oracle外,不能被其他任何东西读取。
每个数据文件只与一个数据库相关联;
数据文件一旦被建立,就不能改变大小,但可向表空间增加数据文件;
一个表空间由一个或多个数据文件组成。
数据文件信息可以在下面的表中获取:
DBA_DATA_FILES:数据库文件的信息;
V$DATAFILE:数据文件的状态信息。
日志文件:
重做日志文件用于记录对数据库所做的全部修改,可用于故障时恢复数据库。
数据文件和日志文件不应当保存在同一个磁盘上。
联机重做日志按循环方式使用。第一个被填满,日志操作将移到第二个文件。
要考虑是否将日志存档,存档是将联机重做日志变为存档重做日志的处理过程,后台进程 ARCn自动实现存档操作。
描述数据库结构的小的二进制文件。包括数据库名、数据库的数据文件、日志文件的名称、位置、数据库建立的时间、恢复数据库所需的同步信息等。
所有数据文件和日志文件都在控制文件中被标识,数据库名也存储在控制文件中。用于恢复的同步信息也存放在控制文件中。
在打开和访问数据库时一定要使用控制文件。参数文件中的参数 CONTROL_FILES用来指出控制文件。
控制文件的破坏将引起数据库系统的完全瘫痪。
建议的配置是至少有两个控制文件分别在不同的磁盘上。
控制文件:
如果没有正确的控制文件或控制文件毁坏,数据库将无法启动,并且存储在数据库中的数据信息将无法访问。
正是由于这个原因,控制文件的镜像备份功能是被
Oracle服务器内部支持的,并且也是大力推荐的 。
如果要将控制文件镜像备份到一个新的数据库中,只需要在发出 CREATE DATABASE命令之前,为
CONTROL_FILES指定一个以上的参数值即可。
如果要将控制文件镜像备份到一个现有数据库中,必须关闭数据库,将当前的控制文件拷贝到你想要备份的目录当中,编辑 init.ora中的 CONTROL_FILES参数,以指定新的控制文件的位置,然后启动数据库。
注意:应至少提供两个控制文件,并存放在不同的磁盘上。
– 可配置的系统控制文件参数,
MAXLOGFILES,联机重做日志文件的最大数 ;
MAXLOGMEMBERS,每个重做日志文件的最大成员数 ;
MAXDATA FILES,数据文件的最大数 ;
MAXINSTANCES,能够安装到这个数据库上的最大实例数(并行服务器) ;
MAXLOGHISTORY,用于恢复实例的归档重做日志文件组的最大数(并行服务器) ;
注意要改变数据库名,要像前面所描述的那样重新创建控制文件。
V$CONTROLFILE视图列出了 Oracle服务器当前正在读写的控制文件。
参数文件:
1 用来决定 ORACLE的实例的特性。 INIT.INI,INIT.ORA文件。
2 参数文件在数据库建立过程中和启动过程中只读
3 参数文件在经过修改后,必须关闭和重启数据库,才能使新的参数值有效。
4 参数文件的作用如下:
估计 SGA成分的大小;
设置数据库的全部缺省值;
设置数据库的范围;
定义数据库的各种物理属性(仅在数据库建立时);
指定控制文件;
通过调整内存结构,优化数据库性能;
定义各种操作参数。
( 5)在 Oracle RDBMS中,缺省的 init.ora文件位于 UNIX服务器上的 $ORACLE_HOME/dbs目录下或 NT服务器上的
$ORACLE_HOME/database目录下。当创建新数据库和实例时,这个文件可被复制和重新命名。
( 6)通过查询 V$PARAMETER视图,可以从数据库内部观察
init.ora文件中的配置参数集。 V$PARAMETER视图把所有的
init.ora 参数和它们的值都列出来,并且每一个值都有一个标记符,用以指明参数值是否为服务器默认值。
参数 缺省 范围 说明
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封锁的最大数 ;
归档重做日志文件的最终位置 ;
分配给重做日志缓冲区的字节数 ;
触发一个检测点需要填充的重做日志文件块数 ;
对原参数文件进行编辑,需要指定的参数如下:
DB_NAME—— 数据库标识名,是唯一的,不超过 8个字符。
CONTROL_FILES—— 控制文件名,可以有多个。
INIT_SQL_FILE—— 在数据库建立时需执行的 SQL命令文件的名字。
LOG_ARCHIVE_DEST—— 归档日志文件的目标(存放地址)。
LOG_ARCHIVE_FORMAT—— 归档日志文件的缺省文件名格式。
UESR_DUMP_DEST—— 用户跟踪文件存放的位置。
BACKGROUND_DUMP_DEST—— 后台进程跟踪文件应写的目标文件。
其他参数可以根据需要对相关值进行调整来改善数据库的性能。
ORACLE逻辑存储结构
ORACLE的存储体系
数据库块
范围
数据库段
表空间
数据库
数据库对象:表、视图、索引、簇聚
数据文件
ORACLE 数据库
USERS表空间
TABLESPACES
DB FILE2
DB FILE1
视图
VIEWS

TABLES
Others…索引
INDEXES

SEGMENTS

EXTENTS

BLOCKS
物理结构逻辑结构数据库表空间范围段自由 已用数据 索引 聚簇回滚 临时 缓冲操作系统文件块
A B
表示 A组成 B
表空间 (tablespace),
是一个数据结构,将数据库划分为一些较小的逻辑空间区,
每个表空间包含多个操作系统文件。每个数据库对象(如段、表、索引、视图、聚集等)只能包含在一个表空间中。
在 DBA_TABLESPACES可查看表空间的信息。
常见表空间,SYSTEM系统表空间(必要),TEMP(临时表空间)等。
除了系统表空间外,其他表空间都可以被删除。 当表空间被删除时,ORACLE只删除了控制文件中指向该表空间内的数据文件指针,并没有删除构成该表空间的数据文件。 DBA可以用操作系统命令删除相应的数据文件,以释放磁盘空间。
SQLDBA>CREATE TABLESPACE 表空间名
2>DATAFILE ‘数据文件 ‘ SIZE 文件大小
3>DEFAULT STORAGE (存储参数)
4>ONLINE | OFFLINE;
SQLDBA>ALTER TABLESPACE 表空间名
2>DEFAULT STORAGE (
3>INITIAL …… NEXT …… MINEXTENTS ……
4>MAXEXTENTS …… PCTINCREASE …… );
SQLDBA>DROP TABLESPACE 表空间名
2>INCLUDE CONTENTS
段( SEGMENTS):
段是一个或多个分区的集合,包含着表空间中一个特定类型逻辑存储结构的所有数据。
段类型分为:
数据段索引段临时段回滚段启动段数据段:
表( table)是存储数据的数据库段。包括表、表簇( CLUSTER)。
表结构:
ROW HEADER:用来描述行和行中列的信息、行的链接信息以及族关键子信息。包括,ROW OVERHEAD,NUMBER OF COLUMNS,CLUSTER
KEY ID,ROWID OF CHAINED ROW PIECES;
COLUMN DATA,COLUMN LENGTH,COLUMN VALUE。
簇:
存储在一起的一组表,因为这些表有公共的列并且经常一起使用。
一个或多个表的行存储在一起。
如果基于哈西组织,又称 HASH CLUSTER。
能减少存储空间,提高读取效率。
索引段:
存储索引的段,索引段在物理上与表和蔟的数据段是分开的 。
DBA_INDEXES和 DBA_IND_COLUMNS含有关于数据库中全部索引的信息。
在 Oracle中有几种可用的索引类型。
最常用的是 B-树索引;
簇索引是在簇中被表共享的列的索引;
位映射( bitmap)索引,在基数较低(不同值数量较小)的列中,位映射索引可以比传统的 B-树索引更小,
更有效。
回滚段:
用于记录被事务修改前的数据 。它们用于提供数据的已经改变但尚未提交的读一致性视图。
一个回滚段可以用来支持多个事务。
当一个事务开始时,用户会话在一个可用回滚段中得到一个可用区间的专用锁,如果事务填满了第一个区间,它会被分配另一个区间。如果另一个区间不可用,回滚段会自动地给自己分配其他的区间,叫回滚段扩展 (rollback segment
extension)。
如果回滚段不能分配其他的区间(因为已经达到回滚段最大区间数,或者在回滚段表空间上没有更多的自由区间),那么就会出现错误,而且事务将被回滚。
DBA_ROLLBACK_SEGS视图中含有关于回滚段的信息。
SYSTEM回滚段是属于 SYSTEM表空间的,在数据库创建时自动建立。如果使用了多个表空间,则至少还需要一个回滚段。
回滚段的类型,PRIVATE,PUBLIC,DEFERRED
私用回滚段只用于特定实例。
公用回滚段可用于所有实例,它们形成一个回滚段池。
延迟回滚段在 SYSTEM表空间中。当表空间离线从而事务不能直接回滚而建立。
公用回滚段和延迟回滚段由 DBA建立。私用回滚段由具有 CREATE ROLLBACK SEGMENT系统特权的用户建立。
SQLDBA>CREATE ROLLBACE SEGMENT 滚回段名
2>TABLESPACE 表空间名
3>STORAGE ( INITIAL,NEXT,MINEXTENTS、
MAXEXTENTS,OPTIMAL)
SQLDBA>ALTER ROLLBACE SEGMENT 滚回段名
ONLINE/OFFLINE
SQLDBA>DROP ROLLBACE SEGMENT 滚回段名在建立和调整滚回段时,要考虑到事务的活动程度和事务的数目,由此确定合适的存储参数和最优大小参数。
为了提高系统性能和便于管理,在使用回滚段应考虑如下问题:使用回滚段的事务数目;事务的类型:更新操作类型的事务比查询操作类型的事务需要更多的回滚段。
临时段:
临时段提供表的排序、整理和连接等操作的临时工作空间。 JOIN,GROUP BY,ORDER BY,CREATE
INDEX等。临时段的创建基于事务。 DBA可为每个用户定义使用哪个表空间创建临时段。
区 /域 /范围( Extents):
分区是段内物理地址连续的数据块的集合。每个数据库段都是由一个或多个区间组成,在一个数据库段中的每个区间的大小可以相同或不同。
一个段至少包括一个分区,回滚段至少需要两个分区。
分区是 ORACLE数据库最小的分配单位。分区没有固定大小。
当数据库对象创建或生长时,数据库以分区为单位为其分配空间。当段创建时,分配初始分区;当段生长时,分配后续分区;当段被删除或截断时,会释放分区;另外,对回滚段
,如果段大大超出了优化数( OPTIMAL),又包括自由分区时,也会释放分区。只有当段的当前分区都用完后,才分配新的分区。分区经常的分配又释放会造成物理数据文件的碎片。
区间信息贮存在 DBA_EXTENTS视图中。
块( BLOCKS):
块是 ORACLE数据库的最小存取( I/O)单位,对应于磁盘的一个或多个物理块,即一般为 OS物理块的倍数。
块大小由数据库创建时指定的参数文件中的初始化参数
DB_BLOCK_SIZE决定。所规定的块大小适用于所有的数据文件,它同时决定了 SGA区中数据库缓冲区块的大小(另一参数为 DB_BUFFERS)。
数据块一旦创建后,就不能再改变块的大小,除非我们重新生成数据库。块大小一般为 2K或 4K。
块的结构及组成部分:块头、数据存储区、空闲空间。
标题( COMMON AND VARIBALE HEADER):包括总的块信息
,如块地址、段类型。
表目录( TABLE DIRECTORY):包含存储在该块中有行的表的信息;
行目录( ROW DIRECTORY):包含存储在块中的记录行的行信息,每行占 2字节;
空闲空间( FREE SPACE):块中可用于插入或更新操作的字节组成的空间;
行数据( ROW DATA):存储的表或索引等的数据。
块空间使用参数:
PCTFREE:设置保留的空闲空间的数据库的最小百分比
,使块中有一定百分比空间作为保留空间,用于块中行的更新(插入最多到 1- PCTFREE %);
PCTUSED:设置在新行增加到块前可以用于行数据加开销的块最小百分比,用于确定块是否可用于行插入的临界值,若低于 PCTUSED%则允许一个块重新放回自由链表;
PCTFREE与 PCTUSED的和不超过 100。
INITRNS和 MXTRANS:用来控制一个块上活动的事务个数;
数据库设计和规划
ORACLE表空间分为两大类:系统表空间和非系统表空间。
系统表空间是建库时自动创建的主要用于存储数据字典、
系统回滚段;非系统表空间是由用户创建的表空间,主要用于分离段,方便用户的数据管理。
ORACLE推荐一种最佳灵活结构 OFA(Optimal Flexible
Architecture)可以用于表空间的设计。 OFA是 ORACLE软件安装和数据文件的推荐目录结构 。 OFA只是一组建议,
并不是绝对原则。下面介绍基本 OFA和扩展 OFA。
– 基本 OFA
1)系统表空间( SYSTEM):系统表空间不具有重建性,只用于存放数据字典,其他内容如数据段信息等都应从系统表空间中移出。
– 基本 OFA
2)分离应用程序数据段( DATA):应用程序数据段应是一个独立的表空间,即数据表空间。建立单独数据表空间的理由是:应用程序与数据文件分离有利于减少资源争用,简化文件管理;另外,当数据段产生碎片时利于管理。
3)分离应用程序索引段( INDEX):索引段不应与相关的数据段存储在一个表空间,以免产生资源争用。由于表增长和不正确的尺寸设置可能产生索引段的碎片,分离应用程序索引段,可以减少整理数据表或索引碎片所需的管理代价。从数据表分离相应的索引也可以通过 ALTER INDEX命令来实现。
4)分离工具段( TOOLS):许多第三方工具会将数据存储在系统表空间中,为了避免这种情况,可将它们的对象移出系统表空间。
– 基本 OFA
5)分离回滚段( RBS):回滚段会针对巨型事务动态扩展尺寸,也会动态收缩到指定的优化尺寸。回滚段的 I/O通常与数据和索引表空间的 I/O同步。将回滚段分离出来是出于减少 I/O冲突的考虑。
6)分离临时段( TEMP):临时段是数据库中动态生成的对象,用来存储巨型排序操作(如 SELECT DISTINCT,
UNION,CREATE INDEX等)的数据。由于动态特性,临时段不应与其他类型段一起存储。通常,在建立用户时,将这些用户使用的临时数据段设置到临时表空间。
7)分离用户( USER):为用户帐号建立一个 USER表空间,在建立用户时将用户的操作数据放在用户表空间。
以上 7个表空间是最基本的表空间,也是传统 OFA的基本组成部分。随着应用的深入,又有扩展的 OFA。
– 扩展的 OFA
1)分离低使用数据段( DATA_2):在基表中,有一些是动态数据,一些是静态数据,而动态数据和静态数据常常被并发操作。静态数据在实际使用时只是被提取信息,可以把这些静态数据表设置到一个专用表空间( DATA_2),从而避免并发操作冲突。
2)分离低使用索引段( INDEX_2):数据表分为静态表和动态表,则索引亦如此。对于静态表的索引表应建立静态索引表空间( INDEX_2)。如果索引已经生成,可以使用 ALTER INDEX语句来移动这些索引到一个新的表空间中。
3)分离工具索引( TOOLS_1):如果数据库对 TOOLS
表空间有较多的操作,则这些工具表索引可以移到另一个表空间( TOOLS_1),这样 TOOLS表空间就可看成工具数据表空间。
– 扩展的 OFA
4)分离特殊回滚段( RBS_2),RBS表空间的回滚段必须有适当的大小和数量,以适应应用的使用。但大型事务可能超过回滚段的配置。为了避免这种情况,可以设置一个特殊回滚段,使大型事务只使用特殊回滚段。建立一个特殊表空间来容纳这个特殊回滚段。
5)分离特殊用户临时段( TEMP_USER):和特殊回滚段一样,一些特殊用户在做特殊操作时,可以设置一个特殊用户临时表空间,这样便于系统管理。
– 附加的特殊应用 OFA扩展
1) SNAPS:用于快照 (Snapshots)。快照表是分布式数据库处理的一种特殊表,为此类表建立相应的表空间。
2) PARTITIONS:用于分区 (Partition)。分区是为了分配 I/O并且简化巨型表的管理。
3) TEMP_WORK:用于大型数据装载。
根据 ORACLE数据库结构特点,每个表空间至少要有一个数据文件,因此,应用系统的每个表空间均具有各自的数据文件。
对于一个不太大的数据库,可以将数据库软件和数据文件都放置在一个磁盘上,将它们设计成不同的子文件即可。对于大型数据库,需要指定哪些文件放置在哪个磁盘上。
文件设置
– 表空间的磁盘分配,
一般情况下,90%以上的 I/O操作集中在系统表空间、
数据表空间、回滚表空间、索引表空间这 4个表空间上,所以 这 4个表空间应单独存储在不同的磁盘上 。
– 系统文件的规划,
ORACLE有联机日志文件、归档日志文件、控制文件和系统软件文件等,如何放置这些系统文件也是一件重要的任务。
1)联机日志文件:每个数据库至少要有两个联机日志文件,由于联机日志文件中保留了数据库的当前事务,所以它无法从备份中恢复,他们是 ORACLE无法用备份工具恢复的唯一文件类型。这类文件应单独存储。
– 系统文件的规划,
2)控制文件:前面章节已经说明了控制文件的重要性,每个数据库应当至少有 3个控制文件的拷贝,
它们被分布在 3个驱动器中。
3)归档日志文件:如果归档日志文件和联机日志文件放在同一个磁盘上,当 LGWR在读盘时,ARCH也在读同一磁盘,势必造成 I/O冲突,所以归档日志文件和联机日志文件应分盘存储。
4) ORACLE软件,Oracle软件是系统运行的核心,
这些软件应放在独立的磁盘上。
– 磁盘规划设计,
磁盘规划设计可以依据下列准则:数据库必须可恢复;必须对联机日志文件进行镜像;必须最小化 DBWR、
LGWR,ARCH之间的冲突;必须最小化 DBWR磁盘间的冲突;估计数据库文件的 I/O量 。
– 磁盘规划设计,
在磁盘规划设计过程中需要做一些数据库测量,以估计其 I/O量,以下给出一参照的 7磁盘设计方案:
磁盘 存放内容
1 Oracle软件
2 SYSTEM表空间,控制文件 1
3 RBS,TEMP,TOOLS表空间,控制文件 2
4 DATA表空间,控制文件 3
5 INDEX表空间
6 联机日志文件 1,2,3,转储文件
7 应用软件,归档日志文件思考题:
1 说明 Oracle的组成、进程结构和文件结构。
2 说明 Oracle的存储结构。