oracle9i数据库基础培训郑国斌.docx
- 文档编号:9447747
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:100
- 大小:2.57MB
oracle9i数据库基础培训郑国斌.docx
《oracle9i数据库基础培训郑国斌.docx》由会员分享,可在线阅读,更多相关《oracle9i数据库基础培训郑国斌.docx(100页珍藏版)》请在冰豆网上搜索。
oracle9i数据库基础培训郑国斌
ORACLE9i数据库基础培训
1Oracle9i数据库体系结构
谈及Oracle数据库结构时,我们应该从两个角度来探讨:
分别是数据库的“逻辑层面”与“物理层面”。
简单的说,“逻辑层面”是由”数据库内部”观看其组成要素,包括:
表空间(tablespaces)、段(segments)、区块(extents)、数据块(datablock)、以及数据库对象(Schemaobjects)。
而“物理层面”则是从”操作系统”角度来看数据库的实体构成项目,包括:
数据文件(Datafiles)、重做日志文件(redologfiles)、控制文件(controlfiles)、口令文件(password)、初始化参数文件(initializationparameterfiles)等。
1.1逻辑结构
●数据块(datablock)
许多初次接触数据库的读者最好奇的一点是:
“数据究竟是如何存放在数据库呢?
”。
其实,Oracle9i数据库有几种数据储存体,其中最小的储存单元就称为“数据块”(datablock)。
数据块大小是由初始化参数文件的DB_BLOCK_SIZE参数所决定,且在新建Oracle9i数据库之前就必须明确地定义。
实际上,数据块大小与”操作系统的磁盘读写块”(O.S.blocks)也有关系,所以必须将DB_BLOCK_SIZE设定为O.S.blocks的整数倍。
附带一提:
Oracle9i在存取数据时是以datablock为最小读取单位,而不是以OSblock为单位。
从Oracle9i开始,数据库内可以设定多种数据块大小。
换句话说,Oracle9i数据库内分为“标准数据块”与“非标准数据块”;预设情况下SYSTEM资料表空间就是以“标准数据块”建立而成。
●区(extents)
除了数据块之外,Oracle9i数据库还有所谓的“区”(extents)。
虽然数据块是Oracle9i最小的资料读写单位,但值得注意的是:
Oracle9i在分配储存空间时,并不是以数据块为单位,而是改采“区”的方式来分配空间。
那么,使用“区”究竟有何好处呢?
当执行DDL指令建立数据库对象时(例如CREATETABLE指令),Oracle9i会先分配出一连串的数据块;直到这些数据块全部存满数据后,下次再分配一连串的数据块。
这些连续的数据块就统称为“区”。
举例来说,假定您准备在Oracle9i数据库内存放80KB的资料,Oracle9i可以先分配一个“区”,其大小可为数据块(8KB)的5倍;然后视实际需要再配置第二个“区”(大小还是40KB)。
如此一来,只要两次的空间配置动作就可以存放80KB的资料了!
试想,如果Oracle9i每次只配置8KB的“数据块”让存放资料,总共需要10次空间配置动作才能放满80KB的资料,比较没有效率。
由此可见,“区”的确有其存在的必要性。
●段(segments)
依照不同的数据处理性质,可能需要在表空间内划分出不同区域,以存放不同的数据;我们将这些区域称之为“段”(segment)。
例如,存放数据的称为“数据段”、存放数据的称为“索引段”。
而“段”其实就是由许多“区块”(extents)组合而成。
除了上述两种“段”以外,Oracle9i数据库内还有另外两种段结构,分别是:
“临时段”(temporarysegment)与“回退段”(rollbacksegment)。
●表空间(tablespaces)
表空间是数据库中最大的逻辑单位。
数据库可以划分为一个或多个逻辑单位,该逻辑单位称为表空间。
下图说明了Oracle9i数据库内各逻辑组成之间的关系:
1.2物理结构
●数据文件
每个Oracle9i数据库都包含为数不等的“数据文件”。
数据库内所有逻辑数据库对象都是存放在数据文件内,如:
数据表、索引….等。
一但数据文件被建立后,系统就会在磁盘上分配出适当空间给数据文件;但尚未存放任何用户数据。
等到未来使用者将数据存入数据库时,Oracle9i才会在数据文件内分配出“段”,以存放数据。
而这些动作都是由Oracle9i自动完成的。
当然了,如果数据文件剩余空间不足,您就必须调整数据文件大小;或增加新的数据文件。
所以在Oracle9i数据库内,一个数据库对象有可能横跨多个数据文件。
如前所述,Oracle9i数据库内可规划一个以上的“数据表空间”。
但如果由操作系统角度来看,“数据表空间”其实是由一个或数个“数据文件”所组成。
换句话说,数据库的所有数据就是位于操作系统的各“数据文件”内。
所以:
Ø一个“数据文件”只能对应的一个“数据表空间”。
Ø一个“数据表空间”可包含多个“数据文件”。
●重置日志文件
除了“数据文件”外,最重要的Oracle9i数据库实体文件就是“重做日志文件”(redologfiles)。
虽然它与“数据文件”不同,但是彼此间却有密不可分的关系!
简单的说,Oracle9i重日志文件会负责纪录数据库内除查询以外的任何数据增、删、修改情况。
当数据被改变时,有改动纪录会先保留在内存的重做记录缓冲区(redobuffer),并在适当时机由LGWR后台处理程序负责写入至硬盘上重做日志文件。
如此一来,所有数据改动情况都会完整地保留下来。
万一您的Oracle9i数据库不小心当机或是遭遇毁损,Oracle9i将凭借重做日志文件内相关纪录将数据复原至最完整的状态。
●控制文件
每个Oracle9i数据库至少会有一个“控制文件”,用以纪录与描述数据库的实体结构。
“控制文件”内记录以下重要信息:
数据库名称与建立时间。
数据文件与重做日志文件的名称及其所在位置。
交易纪录序列码(logsequencenumber)。
每当打开数据库时,Oracle9i会在数据库mount前读取控制文件内容,待所有数据库实体组成文件的信息都收集完毕,数据库才会被mount和open。
为了避免控制文件毁损导致数据库系统启动不了,建议至少配置两个控制文件,并存放在不同实体硬盘。
●初始化参数文件
在启动数据库,Oracle必须依照特定参数设定值来分配内存空间,并激活相关后台处理程序。
可以事先规划这些参数,并存放在操作系统内的某个文件。
往后将利用这个文件来启动数据库。
这个文件就是所谓的“初始化参数文件”。
该文件可以设置数据库的近250个系统参数,包括内存中SGA大小、数据库大量的默认值、数据库的限制、定义数据库的各种物理属性、指定数据库控制文件名称及路径等。
参数文件是一个文本文件,允许重新编辑修改。
1.3实例的进程结构
1.3.1总体结构
Oracle服务器是一种对象关系数据库管理系统(ORDBMS),它为信息管理提供开放、综合、集成的方法。
Oracle服务器由一个Oracle例程(Instance)和一个Oracle数据库组成。
Oracle例程(Instance)是后台进程和内存结构的组合。
必须启动例程才能访问数据库中的数据。
每次启动例程都会分配系统全局区(SGA)并启动Oracle.后台进程。
✓SGA是用于存储数据库信息的内存区,该信息为数据库进程所共享。
✓后台进程代表调用进程执行功能。
它们把为每个用户运行的多个Oracle程序所处理的功能统一起来。
后台进程执行I/O并监控其它Oracle进程以增加并行性,从而使性能和可靠性更加优越。
✓用户进程是产生SQL语句的应用程序
✓服务器进程执行用户进程发送的SQL语句
1.3.2ORACLE数据库文件
Oracle数据库由三种文件类型组成
✓数据文件:
包含数据库中的实际数据
✓重做日志:
包含对数据库所做的更改记录这样万一出现故障可以启用数据恢复一个数据库至少需要两个重做日志文件
✓控制文件:
包含维护和验证数据库完整性的必要信息例如控制文件用于识别数据文件和重做日志文件。
一个数据库至少需要一个控制文件。
其它关键文件
✓参数文件:
定义Oracle例程的特性,例如它包含调整SGA中一些内存结大小的参数。
✓口令文件:
认证哪些用户有权限启动和关闭Oracle例程。
✓归档的重做日志文件:
是重做日志文件的脱机副本这些副本可能对于从介质失败中进行恢复很必要。
1.3.3系统全局区(SystemGlobalArea)
SGA是用于存储数据库信息的内存区。
它包含Oracle服务器的数据和控制信息。
SGA由几种内存结构组成:
✓共享池(SharedPool):
用于存储最近执行的SQL语句和最近使用的数据字典数据(procedure).
✓数据库缓冲区高速缓存(Databasebuffer):
用于存储最近使用的数据.
✓重做日志缓冲区(Redologbuffer):
用于跟踪服务器和后台进程对数据库所做的更改.
在SGA中还有两种可选的内存结构
✓Java池(Javapool):
用于存储Java代码.
✓大型共享池(Largepool):
用于存储并不与SQL语句处理直接相关的大型内存结构例如在备份和复原操作过程中复制的数据块.
1.3.4共享池组件
在分析阶段,服务器进程使用SGA中称作共享池的区域来编译SQL语句.共享池有两个基本组件
✓库高速缓存(LibraryCache)
✓数据字典高速缓存(DictionaryCache)
库高速缓存在称为共享SQL区域(SharedSQLArea)的内存结构中存储最近使用的SQL语句信息.共享SQL区域包含:
✓SQL语句文本
✓分析树:
语句的已编译版本
✓执行计划:
执行语句时要采取的步骤
如果重新执行SQL语句而且共享SQL区域已经包含语句的执行计划,那么服务器进程就不需要分析语句.库高速缓存通过减少分析时间和内存要求来改善重新使用SQL语句的应用程序的性能.如果SQL语句没有重新使用,那么它最终会从库高速缓存中超龄(老化)释放.
数据字典高速缓存是数据库中最近使用的定义的集合,它包括有关数据库文件、表、索引、列、用户、权限以及其它数据库对象的信息。
在分析阶段,服务器进程在字典高速缓存中查找信息,以解析SQL语句中指定的对象名并验证访问权限。
1.3.5数据库缓冲区高速缓存
数据库缓冲区高速缓存的功能
处理查询时,服务器进程在数据库缓冲区高速缓存中查找任何所需的块。
如果未在数据库缓冲区高速缓存中找到这个块,服务器进程就从数据文件读取这个块,并且在缓冲区高速缓存中放置一个副本。
由于对同一个块的后续请求可以在内存中找到这个块,因此这些请求可能不需要物理读取。
Oracle服务器使用最近最少使用算法来释放近期未被访问的缓冲区,以便在缓冲区高速缓存中为新块腾出空间。
1.3.6程序全局区
程序全局区或进程全局区(PGA)是一个内存区域,它包含单个服务器进程或单个后台进程的数据和控制信息。
与几个进程共享的SGA正相反,PGA是只被一个进程使用的区域。
在专用服务器配置中,服务器的PGA包括下面的组件:
✓排序区:
用于处理SQL语句时可能需要的任何排序
✓会话信息:
包括用于会话的用户权限和性能统计
✓游标状态:
标明处理会话当前使用的SQL语句中的阶段
✓堆栈空间:
包含其它会话变量
1.3.7重做日志缓冲区
服务器进程在重做日志缓冲区中记录对数据文件的大部分更改,这个缓冲区是SGA的一部分。
重做日志缓冲区有下面的特点:
✓它记录被更改的块、更改位置、以及重做条目中的新值。
重做条目不区分被更改块的类型;它只记录块中哪些字节发生了更改。
✓重做日志缓冲区连续使用,而且一个事务处理所做的更改可能会与其它事务处理的更改交叉存取。
✓它是在已满后可以重新使用的循环缓冲区,但是只有在所有旧的重做条目都记录在重做日志文件之后才能使用。
1.3.8回滚段
进行更改之前,前服务器进程将旧的数据值保存到回退段中。
这些旧的图像数据用于
•回退事务时撤销更改
•通过确保其它事务处理不会看到DML语句所做的未提交更改,来提供读一致性
•在数据库恢复过程中,可以使用它将数据库恢复到一致状态。
当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中,ORACLE将在下次打开数据库时利用回滚段来恢复未提交的数据。
回退段就象表和索引那样存在于数据文件之中,而回退块将根据需要被放入数据库缓冲区高速缓存中。
1.3.9后台进程
执行用于处理并行用户请求所需的通用功能,每个例程都包括下面五个必需的后台进程:
✓数据库写入程序(DBW0)负责将更改的数据从数据库缓冲区高速缓存写入数据文件.
✓日志写入程序(LGWR)将重做日志缓冲区中注册的更改写入重做日志文件.
✓系统监控程序(SMON)检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复.
✓过程监视器(PMON)负责在一个Oracle进程失败时清理资源.
✓检查点进程(CKPT)负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时更新控制文件和数据文件中的数据库状态信息.
1.3.10日志写入程序
日志写入程序
LGWR在下列情况下执行从重做日志缓冲区到重做日志文件的连续写入:
•当提交事务处理时
•当重做日志缓冲区的三分之一已满时
•当重做日志缓冲区中记录了超过1MB的更改时
•在DBW0将数据库缓冲区高速缓存中修改的块写入数据文件以前
1.3.11数据库写入程序
数据库写入程序
服务器进程在缓冲区高速缓存中记录回退和数据块的更改。
数据库写入程序(DBW0)将灰数据缓冲区从数据库缓冲区高速缓存写入数据文件。
它确保有足够数量的空闲缓冲区(即当服务器进程需要读取数据文件中的块时可以覆盖的缓冲区)在数据库缓冲区高速缓存中可用。
由于服务器进程只在缓冲区高速缓存中进行更改,因此数据库性能得到改善,而且DBW0延迟写入数据文件直到发生下列事件之一:
•灰数据缓冲区的数量达到阈值
•当进行扫描而无法找到任何空闲缓冲区时进程扫描了指定数量的块
•出现超时(每三秒)
•出现检查点
1.3.12SMON系统监控程序
如果Oracle例程失败,那么SGA中尚未写入磁盘的所有信息都会丢失。
例如,操作系统的失败导致例程失败,例程丢失后,后台进程SMON在数据库重新打开时自动执行例程恢复。
恢复例程需要进行以下步骤:
1.前滚以恢复尚未记入数据文件但已经记入联机重做日志中的数据。
由于例程失败过程中SGA的丢失,这些数据尚未写入磁盘。
在这个进程中,SMON读取重做日志文件并将重做日志中记录的更改应用到数据块中,由于所有提交的事务处理都已被写入重做日志,因此该进程完全恢复这些事务处理。
2.打开数据库以允许用户登录。
未被未恢复事务处理锁定的任何数据都立即可用。
3.回退未提交的事务处理。
它们由SMON回退,或在访问锁定的数据时由单个服务器进程回退。
SMON也执行一些空间维护功能:
•它联合或合并数据文件中空闲空间的邻近区域。
•它回收临时段。
将它们作为数据文件中的空闲空间返回。
临时段用于在SQL语句处理过程中存储数据
1.3.13PMON进程监视器
PMON功能
进程失败后后台进程PMON通过下面的方法进行清理
•回退用户的当前事务处理
•释放当前保留的所有表锁或行锁
•释放用户当前保留的其它资源
1.3.14处理查询
查询处理步骤
查询不同于其它类型的SQL语句,因为如果查询成功,它们会返回作为结果的数据。
查询可以返回一行或者上千行,而其它语句只是返回成功或失败。
查询的处理有三个主要阶段:
1分析
2执行
3提取
a)分析SQL语句
在分析阶段,SQL语句从用户进程传递到服务器进程,并且SQL语句的分析说明被载入共享的SQL区。
在分析过程中,服务器进程:
•在共享池中搜索SQL语句的现有副本
•通过检查语法验证SQL语句
•执行数据字典查找来验证表和列的定义
•获取对象的分析锁以便在语句的分析过程中对象的定义不会改变
•检查用户访问引用方案对象的权限
•确定语句的最佳执行计划
•将语句和执行计划载入共享的SQL区
b)执行SELECT语句
此时,Oracle服务器已经具有了所有必要的信息和资源,因此该语句得以执行,到了SELECT语句这一步,服务器进程准备要检索数据了。
c)提取查询行
在提取阶段对行进行选择和排序(如果有必要的话)。
并且由服务器返回给用户,可能需要一个或多个提取将查询结果传送给用户。
1.3.15处理DML语句
DML处理步骤
数据操纵语言(DML)语句只需要两个处理阶段:
•分析阶段与处理查询时所用的分析阶段相同
•执行阶段需要额外的处理来更改数据
DML执行阶段
执行DML语句:
1如果缓冲区高速缓存中尚不存在数据和回退块,那么服务器进程就会从数据文件中将它们读入缓冲区高速缓存。
2服务器进程在将要修改的行上放置锁。
3在重做日志缓冲区中,服务器进程记录将要对回退和数据进行的更改
–回退块更改记录数据修改以前的值。
回退块用于存储成图象前的数据,以便必要的情况下DML语句能够回退。
–数据块更改记录数据的新值。
4服务器进程将成图象前的数据记录到回退块中,并且更新数据块。
这两种更改都是在数据库缓冲区高速缓存中进行的。
DELETE或INSERT命令的处理使用类似的步骤。
DELETE命令的成图象前数据包含已删除的行中的列值,而INSERT命令的成图象前数据中包含行的位置信息。
1.3.16提交处理
快速提交
Oracle服务器使用快速提交机制来保证提交的更改能够在例程失败的情况下得以恢复。
系统更改号
每当事务处理提交时,Oracle服务器就把一个提交系统更改号(SCN)分配给该事务处理。
SCN是简单递增的,而且在数据库中是唯一的。
Oracle服务器使用它作为内部时间戳以使数据同步,并且在从数据文件检索数据时提供读一致性。
使用SCN使Oracle服务器能够执行一致性检查,而不用依赖操作系统的日期和时间。
处理提交的步骤
发出COMMIT命令时,执行下面的步骤:
1服务器进程随同SCN一起在重做日志缓冲区中放置一个提交记录
2LGWR向重做日志文件中连续写入直到提交记录含提交记录的所有重做日志缓冲区条目。
这之后,Oracle服务器就能够保证即使存在例程失败也不会丢失更改。
3通知用户COMMIT命令已完成。
4服务器进程记录信息以指出事务处理已完成并且可以释放资源锁。
注:
将脏数据缓冲区刷新到数据文件由DBW0独立执行,在提交之前或之后进行都可以。
快速提交的优势
快速提交机制将更改写入重做日志缓冲区而不是写入数据文件,这样确保数据得以恢复。
它有如下优势:
•连续写入日志文件比写入数据文件的各个块更快。
•只将记录更改必须的最少信息写入日志文件,然而写入数据文件却需要写入整个数据块,
•如果多个事务处理同时请求提交,那么例程将重做日志记录合成为单个写入。
•除非重做日志缓冲区特别满,否则每个事务处理只需要一个同步写入,如果发生合成。
那么每个事务处理的同步写入可能不到一个。
•因为提交之前可能会刷新重做日志缓冲区,所以事务处理的大小并不影响实际的提交操作所需的时间量。
注:
回退事务处理并不会触发LGWR写入磁盘。
从数据库失败恢复时,Oracle服务器总是回退未提交的更改。
如果回退之后出现失败,在回退之前未将条目记录到磁盘上,那么缺乏提交记录就足以确保将事务处理所做的更改回退。
2安装Oracle9iforunix软件
各种版本UNIX的ORACLE安装大同小异,下面以AIX5.1为例介绍一下ORACLE的安装。
2.1软件的获取
可以到OracleTechnologyNetwork(OTN)网站注册成为OTN会员,然后就可以下载任何Oracle最新的技术文件、软件以及安装文档。
但是要注意的是所有下载的软件其授权方式为“程序开发者授权”(DeveloperLicense),虽然具备完整版的功能,但是只能运用于开发测试或是进行评估,不能进行商业用途!
OTN网址为:
2.2安装Oracle9i Release 2的系统需求
硬件要求:
安装oracle软件的磁盘至少需要4G的空闲空间,最好在10G以上。
注:
Oracle9i安装程序OracleUniversalInstaller在执行安装动作时会使用/tmp作为文件暂存目录。
如果/tmp目录的剩余空间不足,建议设定TMP或是TMPDIR等环境变量,指向具有足够空间的目录即可。
但是该目录必须开放可写入权限。
2.3安装Oracle9i Release 2的前置工作
2.3.1配置UNIX核心参数
在大部分UNIX操作系统(如HP-UX)上安装ORACLE都需要对操作系统进行适当的配置。
安装ORACLE前需要配置的主要操作系统核心参数如下:
SHMMAX:
一个共享内存段的最大字节数,是一个上界最大值。
SHMMIN:
一个共享内存段的最小字节数。
SHMMNI:
一个共享内存段的最大数目。
SHMSEG:
一个进程能连接的共享内存段的最大数目。
SEMMNS:
系统信号量的最大值。
SEMMNI:
系统信号的最大设置数。
SEMMSL:
一个信号组中最大的信号数。
AIX不需要对系统核心参数进行配置,但象HP-UX、Solaris、Linux等都需要配置。
具体配置步骤请参考相关文档,如ZXWNHLR的AIX+ORACLE9.2安装的文档.
本文档仅供培训使用,以下关于oracle的安装说明以测试验证过的安装文档为主。
2.3.2Oracle权限组和用户建立
●打开一个Terminal窗口;
●在#提示符下打smitty命令;
●第一屏可选栏目中,选择Security&Users;
●第二屏可选栏目中,选择Groups;
●第三屏可选栏目中,选择AddaGroup;
●第四屏中,填入:
GroupNAME:
dba
GroupID:
123
其它默认
●确认以上输入后回车;
●command显示为ok时退回到上述第二屏,选择Users;
●接下来选择AddaUser;
●填入:
UserNAME:
oracle
UserID:
223(双机两机相同)
PrimaryGROUP:
dba
HOMEdirectory:
/oracle
SoftFILEsize:
-1(表示无限制)
其它默认
●确认以上输入后回车;
●command显示为ok时退回到#提示符下;
●执行chownoracle:
dba/oracle命令;
2.3.3编辑profile文件
编辑profile文件定义ORACLE数据库与操作系统结合的环境变量参数,通过这些参数可以在操作系统中对ORACLE进行相应的设置。
操作如下:
●在Terminal中进行如下操作:
#su-oracle
$cd/oracle
$vi.profile
●进入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle9i 数据库 基础 培训 郑国斌