这是我一位朋友最近研究oracle的心得,我把它偷了出来,和大家共同分享
Oracle 9i DBA 认证教程学习笔记
第一章 Oracle 数据库体系结构基础
1、Oracle 数据库系统:为具有管理Oracle数据库功能的计算机系统。
2、系统全局区(System Global Area):在数据库服务器上启动一数据库时的一块共享内存区(简称SGA)。它被看作是Oracle数据库的一个大缓冲池,这里的数据可以被Oracle的各个进程共用。
3、实例(Instance):SGA和Oracle进程的结合称为一个Oracle实例。一个Oracle实例(Instance)只能与一个运行的Oracle数据库相联系。
1.1 Oracle存储器结构
Oracle使用共享内存区和后台进程来管理其内存和文件结构。
1.1.1 系统全局区(SGA)
一、系统全局区的大小可以通过如下语句查询:
SQL> SELECT * FROM V$SGA;
NAME VALUE
-------------------- ----------
Fixed Size 453492
Variable Size 109051904
Database Buffers 25165824
Redo Buffers 667648
更详细的信息可以参考V$SGASTAT、V$BUFFER_POOL
二、系统全局区主要包括以下几部分:
1、数据块缓存区
内存中用来存储频繁访问的数据的区域。数据库的任何修改都在该缓冲里完成,并由DBWR进程将修改后的数据写入磁盘。数据块缓存区的大小由数据库服务器init.ora文件中的DB_BLOCK_BUFFERS参数决定(用数据块的个数表示)。通常,数据块缓存区只是数据库大小的1%-2%,Oracle使用最近最少使用(LRU,Least Recently Used)算法来管理可用空间。块缓冲区高速缓存又可以细分为以下三个部分(Default pool、Keep pool、Recycle pool)。如果不是人为设置初始化参数(init.ora),ORACLE将默认为Default pool。
由于操作系统寻址能力的限制,不通过特殊设置,在32位的系统上,块缓冲区高速缓存最大可以达到1.7G,在64位系统上,块缓冲区高速缓存最大可以达到10G。
2、数据字典缓存区
数据库表和视图的集合,包含关于数据库、数据库结构、权限和用户的元数据。字典缓存区的大小由数据库内部管理。字典缓存区是SQL共享池的一部分,共享池的大小由数据库文件init.ora中的SHARED_POOL_SIZE参数来设置。
3、重做日志缓冲区
重做日志文件的缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入磁盘。这些修改信息可能是DML语句,如(Insert,Update,Delete),或DDL语句,如(Create,Alter,Drop等)。重做日志缓冲区的大小(以字节为单位)由init.ora文件中的LOG_BUFFER参数决定。
重做日志缓冲区的存在是因为内存到内存的操作比较内存到硬盘的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度,但是考虑的数据库的一致性与可恢复性,数据在重做日志缓冲区中的滞留时间不会很长。所以重作日志缓冲区一般都很小,大于3M之后的重作日志缓冲区已经没有太大的实际意义。
4、SQL共享池
共享SQL区保留了数据库用户执行的SQL语句的解释版本和这些语句的执行计划。目的是那些语句被再次使用时提高进程的速度。如果SQL共享池太小,语句将被连续不断地再装入到库缓存区,从而影响操纵性能。SQL共享池的大小由init.ora文件的参数SHARED_POOL_SIZE决定。共享池有可分为以下两部分:
1、SQL语句缓冲(Library Cache):主要对SQL语句的解析(Parse)产生执行计划。
2、数据字典缓冲区(Data Dictionary Cache)
5、大池
大池是SGA中的可选内存区,对于诸如Oracle备份和恢复等大型命令的SQL语句,利用大池就可以防止这些SQL大型命令把条目重写入SQL共享池中,从而减少再装入到库缓存区中的语句数量,防止与其它应用程序对库缓存去的争用。大池没有LRU清单。Oracle9i已不用这个参数。作为LargePool的一种选择的方案,可以用init.ora文件的SHARED_POOL_RESERVED_SIZE参数为SQL大型语句保留一部分SQL共享池。
6、Java池
为Java命令提供语法分析。Java池的大小通过init.ora文件的JAVA_POOL_SIZE参数设置,默认为10M。
7、多缓冲池
可以在SGA中创建多个缓冲池,能够用多个缓冲池把大数据集与其它的应用程序分开,以减少它们争夺数据块缓存区内相同资源的可能性。创建缓冲池时,需要规定保存区(keeparea)的大小和再循环区(recyclearea)的大小。可以通过BUFFER_POOL_KEEP参数来规定保存区的大小。保存和再循环缓冲池的容量减少了数据块缓冲区的可用空间(通过DB_BLOCK_BUFFERS参数设置)。
1.1.2 程序全局区(PGA)
是内存中的一个区域,该区保存一个进程的数据和进程信息,该区域不是共享的。SORT_AREA_SIZE(排序区的最大尺寸)和SORT_AREA_RETAINED_SIZE(排序操作完成之后排序区被减少后的尺寸)参数对于PGA的大小由重要影响。
在大型企业环境管理中管理SORT_AREA_SIZE可能具有挑战性。原则是使性能最佳而尽量少用系统资源。Oracle9i提供自动方法管理PGA内存。两个用于自动管理PGA内存的主要初始化参数是PGA_AGGREGATE_TARGET(指定可由所有服务器进程使用的内存总量)和WORKAREA_SIZE_POLICY(值是MANUAL或AUTO)。
1.2后台进程
后台进程是维护数据库的物理结构和存储结构之间的关系。可以设置init.ora文件的BACKGROUND_DUMP_DEST参数来规定后台进程跟踪文件的位置。在排除数据故障时,跟踪文件显得非常重要,主要纪录数据库的警告日志。
这里给出每一个进程功能的简介:
1、数据库书写器进程Database Writer(DBWR)
负责将修改过的数据块写回到数据库文件。多个DBWR进程有助于在进行大的操作期间减少DBWR中的冲突,DBWR进程的数量由数据库的init.ora文件中的DB_WRITER_PROCESSES参数决定。
2、日志书写器进程Log Writer(LGWR)
负责将联机redo日志缓冲区的内容分批写到联机redo日志文件。重做日志缓冲区条目总是包含着数据库的最新状态,这是因为DBWR进程可以一直等待到把数据块缓冲区中的修改数据块写入到数据文件中。对于Oracle9i,可以创建多个LGWR/IO从进程以改善向联机重做日志文件写入性能,其个数由数据库的init.ora文件的LGWR_IO_SLAVES参数决定。
3、归档进程Archive(ARCH)
负责把写满的redo文件复制到归档日志目标中。Oracle最多允许有10个归档进程。LOG_ARCHIVE_MAX_PROCESSES参数用来设置允许的最大数。
4、检查点进程Checkpoint(CKPT)
用来减少执行实例恢复所需的时间。可以用数据库实例的init.ora文件中LOG_CHECKPIOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的参数来设置一个频繁出现的检查点。
5、系统监视器进程System Monitor(SMON)
执行崩溃恢复、清除临时段和组合自由空间。
6、进程监视器Process Monitor(PMON)
负责清除失败用户的进程,释放用户当时正在使用的资源。当进程失败时,PMON执行以下操作:
1.释放任何进程包括的锁;
2.回滚那些已经启动但未提交的事务;
3.从活动进程的列表中删除进程ID。
7、恢复进程Recover(RECO)
用于解决分布式数据库中的故障问题。只有在平台支持Distributed Option(分布式选项)且init.ora文件中的DISTRIBUTED_TRANSACTIONS参数大于零时才创建这个进程。
8、作业队列进程Snapshot(SNP0)
Oracle的快照刷新及内容及内部作业对列调度依赖于他们执行的作业队列进程。为一实例所创建的SNP进程个数由数据库的init.ora文件中的JOB_QUEUE_PROCESSES参数决定,最多为36个。
9、作业监视器进程Queue Monitor(QMNO)
和Oracle的优先队列选项一起使用。最多可以有10个队列监视器进程,并且它们使用AQ_TM_PROCESSED初始化参数配置。
1.3 Oracle物理存储结构
数据库相关的文件有:重做日志文件、控制文件、跟踪文件及警告日志。
1.3.1数据字典的内容及用法
数据字典是DBA在执行Create Database命令之后应建立的第二组数据库对象。使用Oracle数据字典,可以对数据库中的每个对象以某种方式进行跟踪。Oracle通常利用catalog.sql和catproc.sql脚本建立数据字典,而不需要DBA干预。如果手工建立数据库,则要确保在建立数据库不久后就运行这些脚本。
1、 构造数据字典视图
catalog.sql是用来建立组成数据字典的各个对象。Catporc.sql为PL/SQL建立过程选项和实用程序。必须以sys as sysdba用户才能运行这些脚本。
2、 主要的数据字典
Oracle数据字典主要由两部分组成—基表和用户可访问的视图。
3、 识别数据字典视图的范围
i. USER:允许你看到你所拥有的相关数据库对象。
ii. ALL:允许你看到你可以访问的相关数据库对象。
iii. DBA:允许你看到整个数据库中所有的相关对象。
4、 动态性能视图
V$DATABASE 存放数据库的常规信息
V$SYSSTAT 存放数据库性能的大部分信息
V$SESSION 存放用户会话信息
V$LOG、V$LOGFILE 存放联机重做日志信息
V$DATAFILE 存放数据文件信息
V$CONTROLFILE 存放数据库控制文件信息
1.3.2控制文件
控制文件是数据库启动可操作成功必需的一种二进制文件,它通常记录数据库的所有物理组件,如数据文件的位置、重做日志、数据库名等数据库信息。通过CONTORL_FILES参数设置控制文件名。通过V$CONTROLFILE、V$CONTROLFILE_RECORD_SECTION视图得到控制文件的各部分信息。
1.3.3数据文件
表空间是数据库的逻辑划分,每个数据库至少有一个表空间(称作SYSTEM表空间)。每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件只能属于一个表空间,而一个表空间可以跨越多个数据文件。数据库文件列表可以查询V$DATAFILE和DBA_DATA_FILE的视图。
1.3.4日志文件
日志文件有时也叫做redo日志文件,是任何数据库的重要组成部分。它们的存在确保在系统崩溃、驱动错误或任何其它意外情况中断了正常操作的事件发生时数据库能够恢复。有两种redo日志文件:联机redo日志文件和归档redo日志文件。数据库先写日志,然后提交数据。可以通过V$LOGFILE视图查看日志文件信息。通过ARCHIVE LOG LIST命令查看归档日志文件信息。
待续...