Oracle 体系结构.docx

上传人:b****6 文档编号:6686246 上传时间:2023-01-09 格式:DOCX 页数:14 大小:61.72KB
下载 相关 举报
Oracle 体系结构.docx_第1页
第1页 / 共14页
Oracle 体系结构.docx_第2页
第2页 / 共14页
Oracle 体系结构.docx_第3页
第3页 / 共14页
Oracle 体系结构.docx_第4页
第4页 / 共14页
Oracle 体系结构.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Oracle 体系结构.docx

《Oracle 体系结构.docx》由会员分享,可在线阅读,更多相关《Oracle 体系结构.docx(14页珍藏版)》请在冰豆网上搜索。

Oracle 体系结构.docx

Oracle体系结构

Oracle体系结构

前面介绍了能使user与DB交互的各种方法。

使用这些方法需要一个user帐号通过network与DB保持连接。

user还需要足够的储存空间,以确保他们能够进行INSERT或者是从硬件失败中恢复事务。

作为DBA,你必须应付这些事,还有以下一些情况也需要你来应对:

●选择服务器的硬件

●创建DB

●创建和管理存有Data的table和其它对象

●创建和管理user帐户

●建立可靠的备份和恢复

●监督和调优DB性能

本书的剩下部分将全力帮助你理解如何做好这些管理工作。

但是,要想做一个成功的OracleDBA,你需要完全理解Oracle的体系结构和运行机制;理解Oracle内存组织和后台进程(BGP)之间的关系;理解I/O行为,这些对于管理DB是至关重要的。

.

Oracle体系结构可以从以下3个方面描述:

●与用户相关的进程

●称为DB实例的整个内存逻辑结构

●称为DB的整个物理逻辑结构

图1.11描述了DB和Instance结构:

此图初看起来很复杂,我们将在下面为你介绍各个组成部分,先从userprocess开始。

OracleDB和Instance一起被称为Oracleserver。

UserProcess

在用户层有UserProcess和ServerProcess两个进程保证User能够与Instance交互,并最终与DB交互。

只要user运行应用程序,Oracle就开始一个UserProcess使得user可以连接到Instance。

根据OracleServer的构成的不同,UserProcess可以在User自己的PC上,或是在中间层的Server上。

UserProcess建立与instance的连接。

Oracle调用保持UserProcess和instance连接的进程。

连接建立后,user在Oracle的Instance中就有一个会话(session)。

session建立后,user就在host上建立了ServerProcess。

就是这个ServerProcess真正负责User和DB交互。

交互包括:

发送SQL到DB,从物理文件中检索需要的数据,为User返回数据等。

一般来讲,一个ServerProcess为一个UserProcess服务,但是在某种配置下,一个ServerProcess也可为多个UserProcess服务,可以参考第5章

除了User和Serverprocesse外,Oracle为每个User建立了一个内存结构,称为ProgramGlobalArea(PGA)。

PGA存储了User的session的细节信息,绑定变量、Session变量等。

每个ServerProcess都有PGA。

图1.12说明了UserProcess,ServerProcesses,PGA,session之间的关系:

ServerProcess响应User的请求与Oracleinstance进行通讯。

下面介绍Instance。

Oracle实例

Oracleinstance由Oracle称为SystemGlobalArea(SGA)内存结构,Oracle后台进程组成。

当user访问database中的Data时,ServerProcess与SGA进行通讯。

SystemGlobalArea

SGA由3个必须的组成部分和3个可选的组成部分构成。

SGAComponent

说明

SharedPool

缓存最近用户提交的SQL

DBBufferCache

缓存最近用户访问的数据

RedoLogBuffer

保存事务信息

JavaPool

如果Oracle的JVM在使用,缓存最近使用的Java对象和应用代码

LargePool

为大的操作缓存数据,比如恢复管理器,备份和恢复,共享Server组件

StreamsPool

当使用Oracle的高级队列选项时,缓存请求消息队列访问的数据

Oracle采用leastrecentlyused(LRU)算法管理SharedPool和DatabaseBufferCache的内容。

当user的ServerProcess要把一条SQL放入SharedPool或者把DB里的一个数据块复制到BufferCache时,Oracle把最近没有用过的SQL或Data,替换出内存。

通过这种技术,Oracle使得最常用的SQL和Data保存在内存中,减少对硬盘的访问,提高总体性能。

SGA大小可以手工设定也可以自动设定。

手工设定必须指明SGA中每个部分的大小,然后根据应用的需要调整之。

自动设定Oracle指定每个部分的大小,并且监视他们的使用情况,自动调整之,当然这种调整不能超过给定的SGA的最大值。

无论是手动或自动设置,Oracle在运行时把SGAbydividingthe分成小块,叫做granules。

这些granules在SGA的各个部分之间动态的回收和再分配,以满足应用的需要。

根据OS和SGA大小的不同,granules可以是4M,8M,16M,不等。

手动或自动设置取决于参数文件的设置。

有以下两种参数文件:

ParameterFiles(PFILES),和ServerParameterFiles(SPFILES)。

你能用这两种中的任何一个配置instance和database,包括SGA的大小:

如果是手动模式的话,还可以配置SGA个部分的大小;自动模式设置SGA的总量。

这两种参数文件的区别如下:

PFILE

SPFILE

可用文本编辑器编辑的文本文件

不能直接编辑的二进制文件

改变PFILE的参数后,必须重起Instance才可生效

SPFILE的大部分改变是动态的,不需要重起

名字是Instance的名字+.ora

名字是Spfile+Instance的名字+.ora

可以用命令行:

createpfilefromspfile来创建

可以用命令行:

createspfilefrompfile来创建

如果是自动的SGA管理,需要用SPFILE来进行优化。

关于SPFILE和PFILE的默认位置,将在本章后面的“OFADirectoryPaths”中详细阐述。

你可以在PFILE或SPFILE里详细配置超过250个参数。

Oracle10g把这些参数分成两类:

基本参数和高级参数。

Oracle建议你手工设置大约30基本初始参数。

Oracle还建议你不要修改剩余的220参数,除非是Oracle支持人员来改,或是你为了满足应用的特殊需要。

下表中列出了基本参数:

参数名

说明

CLUSTER_DATABASE

告诉Instance这是否是一个CLUSTER环境

COMPATIBLE

你想要使用的Instance的版本

CONTROL_FILE

DB控制文件的物理地址

DB_BLOCK_SIZE

DB的Block的默认大小

DB_CREATE_FILE_DEST

DB的数据文件的目录

DB_CREATE_ONLINE_LOG_DEST_n

DB的第n个Log文件的位置

DB_DOMAIN

DB在网上的逻辑地址

DB_NAME

要在其上启动实例的DB名称

DB_RECOVER_FILE_DEST

使用闪回特性,明确DB的恢复数据的存放地址

DB_RECOVER_FILE_DEST_SIZE

如果使用闪回特性,DB的恢复数据的大小

DB_UNIQUE_NAME

DB的唯一名字

INSTANCE_NUMBER

在RealApplicationClusters(RAC)环境中标明Instance

JOB_QUEUE_PROCESSES

后台进程的个数,这些进程负责处理EM和DBMS_JOBS下达的指令

LOG_ARCHIVE_DEST_n

最多9个的脱机日志的位置

LOG_ARCHIVE_DEST_STATE_n

第n个脱机日志的位置在生成日志时的状态。

NLS_LANGUAGE

DB的默认语言

NLS_TERRITORY

DB的默认地域

OPEN_CURSORS

明确DB的Block的每个session可以打开游标的最大值

PGA_AGGREGATE_TARGET

PGA消化内存的最大允许值

PROCESSES

连接到Instance的系统进程的个数的最大值

REMOTE_LISTENER

有远程OracleNetListener的Network名称

REMOTE_LOGIN_PASSWORDFILE

决定Instance是否使用PasswordFile,以及它的类型

ROLLBACK_SEGMENTS

当自动恢复管理没有设定时使用

SESSIONS

连接到DB的session个数的最大值

SGA_TARGET

SGA的最大值

SHARED_SERVERS

共享ServerProcess的数量,详见第5章

STAR_TRANSFORMATION_ENABLED

执行查询时是否优化查询,详见第9章

UNDO_MANAGEMENT

自动或手动Undo管理,详见第8章

UNDO_TABLESPACE

如果使用自动undo管理,undosegment的表空间,详见第8章

如上表所示,许多初始参数都是用来配置SGA的大小和其各个部分的。

在PFILE或SPFILE没有设置的参数,取他们的默认值。

下面的例子是一个典型的UnixOracle10g的PFILE中的基本和高级参数:

db_block_size=8192

db_file_multiblock_read_count=16

open_cursors=300

db_name=PROD

background_dump_dest=/u01/app/oracle/admin/PROD/bdump

core_dump_dest=/u01/app/oracle/admin/PROD/cdump

user_dump_dest=/u01/app/oracle/admin/PROD/udump

control_files=(/u02/oradata/PROD/control01.ctl,

/u03/oradata/PROD/control02.ctl,

/u05/oradata/PROD/control03.ctl)

db_recovery_file_dest=/u01/app/oracle/flash_recovery_area/

db_recovery_file_dest_size=2147483648

job_queue_processes=10

compatible=10.1.0.2.0

sga_target=500M

max_sga_size=800M

processes=250

remote_login_passwordfile=EXCLUSIVE

pga_aggregate_target=25165824

sort_area_size=65536

undo_management=AUTO

undo_tablespace=UNDOTBS1

在这个PFILE例子中,SGA中各部分的大小没有分别指定,而是由Oracle10g自动分配的,你仅仅设置了—SGA_TARGET—SGA总的容量。

当instance启动时,Oracle自动分配了SGA各个部分的大小,并且在DB允许过程中动态地重新分配以达到最佳性能。

除了参考PFILE/SPFILE,你可以使用V$SGA和V$SGA_

DYNAMIC_COMPONENTS这两个dynamicperformanceview显示SGA和其各个部分的大小:

SQL>select*

2fromV$SGA;

NAMEVALUE

------------------------------

FixedSize787988

VariableSize145750508

DatabaseBuffers25165824

RedoBuffers262144

结果显示SGA为171,966,464bytes。

它是由SharedPool,LargePool,

JavaPool组成的VariableSize(145,750,508bytes),DatabaseBufferCache(25,165,824bytes),RedoLogBuffer(262,144bytes),和存储Instance后台进程的其它信息FixedSize(787,988bytes)组成。

V$SGA_DYNAMIC_COMPONENTSview显示了更多SGA的细节,如下所示:

SQL>selectcomponent,current_size

2fromv$sga_dynamic_components;

COMPONENTCURRENT_SIZE

----------------------------------------------------

sharedpool83886080

largepool8388608

javapool50331648

streamspool0

DEFAULTbuffercache25165824

KEEPbuffercache0

RECYCLEbuffercache0

DEFAULT2Kbuffercache0

DEFAULT4Kbuffercache0

DEFAULT8Kbuffercache0

DEFAULT16Kbuffercache0

DEFAULT32Kbuffercache0

OSMBufferCache0

13rowsselected.

结果一目了然。

当然,你还可以使用EM来浏览SGA的情况。

Oracle后台进程

Oracle有很多backgroundprocesses.每一个完成他们对instance的特定工作。

Oracle有5个必须的backgroundprocesses,还有一些可选的。

可选进程取决于DB中Oracle的特性。

下面分别是必须的和可选的进程列表:

SGA必须的5个进程

PocessName

OSProcess

说明

SystemMonitor

SMON

从Instance崩溃后恢复Instance,重组DB中的freespace,管理用于排序的空间

ProcessMonitor

PMON

清除user失败的连接

DBwriter

DBWn

将SGA的DBbuffercache中的脏数据写入硬盘

LogWriter

LGWR

把SGA中的RedoLogBUffer的事务恢复信息写入联机日志

CheckPoint

CKPT

CheckPoint事件发生后,把内存的data信息全部更新到DB

SGA可选的进程

PocessName

OSProcess

说明

Archiver

ARCn

把LGWR写入联机日志的事务恢复信息,拷贝到第二个地点

Recover

RECO

把分布式数据库中的失败的事务信息恢复

JobQueueMonitor

CJQn

使用Orcal作业计划特性时,为Job对列进程分配作业

JobQueue

Jnnn

使用Orcal作业计划特性时,执行计划好的DB作业

QueueMonitor

QMNn

当使用Oracle高级对列特性时,监视消息对列的消息

ParallelQuerySlave

Qnnn

当使用Oracle并行查询特性时,实现查询的一部分

Dispatcher

Dnnn

当使用共享ServerProcess特性时,把user的DB访问请求加入共享ServerProcess服务等待对列

SharedServer

Snnn

当使用共享ServerProcess特性时,被几个user共享的ServerProcess

MemoryManager

MMAN

当SGA自动分配时,管理SGA的各个组成的大小

MemoryMonitor

MMON

GathersandanalyzesstatisticsusedbytheAutomaticWorkloadRepositoryfeature.SeeChapter9formoreinformationonusingthisfeature.

MemoryMonitorLight

MMNL

GathersandanalyzesstatisticsusedbytheAutomaticWorkloadRepositoryfeature.SeeChapter9formoreinformationonusingthisfeature.

RecoveryWriter

RVWR

当使用闪回特性时,把恢复信息写入硬盘

ChangeTrackingWriter

CTWR

KeepstrackofwhichdatabaseblockshavechangedwhenOracle’sincrementalRecoveryManagerfeatureisused.SeeChapters10and11fordetailsonusingRecoveryManagertoperformbackups.

在Unix上,你可以用系统命令ps查看后台进程:

$ps-ef|grepPROD

oracle39691010:

02?

00:

00:

05ora_pmon_PROD

oracle39711010:

02?

00:

00:

00ora_mman_PROD

oracle39731010:

02?

00:

00:

07ora_dbw0_PROD

oracle39751010:

02?

00:

00:

07ora_lgwr_PROD

oracle39771010:

02?

00:

00:

10ora_ckpt_PROD

oracle39791010:

02?

00:

00:

20ora_smon_PROD

oracle39811010:

02?

00:

00:

00ora_reco_PROD

oracle39831010:

02?

00:

00:

09ora_cjq0_PROD

oracle39851010:

02?

00:

00:

00ora_d000_PROD

oracle39871010:

02?

00:

00:

00ora_s000_PROD

oracle40521010:

02?

00:

00:

00ora_qmnc_PROD

oracle40541010:

02?

00:

00:

29ora_mmon_PROD

oracle40571010:

02?

00:

00:

08ora_mmnl_PROD

oracle40591010:

02?

00:

01:

04ora_j000_PROD

oracle275441020:

29?

00:

00:

00ora_q000_PROD

说明此Unix上oracleinstance运行的有15个后台进程。

user的process不是Instance的一部分。

在Windows中,有一个名为OracleServiceInstanceName的进程,要使Instance启动,此进程必须启动。

OracleDB

instance是内存中的临时结构,而Oracledatabase是由主机硬盘上的一系列物理文件组成。

这些文件包括控制文件(controlfiles),数据文件(datafiles),和日志文件(redologs)。

此外,还有与DB有关的但是不属于DB一部分的passwordfile、前面介绍过的PFILE、SPFILE、所有脱机的日志。

下表总结了所有这些文件在DB体系中的作用:

第2章中将详细介绍如何创建和管理这些文件。

OraclePhysicalFiles

文件类型

文件包含的信息

Control

其它文件的位置,DB的name,DBBlock的大小,DB字符集,恢复信息。

这是打开DB必须的文件

Datafile

所有的应用data和内部metadata

Redolog

DB上所有的更改记录,用于恢复

Parameter(PFILE,SPFILE)

SGA、可选的Oracle选项和后台进程的配置参数

Archivedlog

联机日志的备份,用于恢复

Password

可选文件,用于存储SYSDBA和SYSOPER的user的name,详见第6章

OracleNet

配置DBlistener和客户端连接的入口,详见第4章

下面分别介绍DB的三个组成文件:

controlfiles,datafiles,redolog。

ControlFiles

ControlFiles对DB来说是至关重要的,因为它包含了其它文件都没有的关于DB的重要信息,这些重要信息包括:

●DB的名称

●DataFiles和RedoLog的名称、存放地点、大小

●从硬盘失败或用户错误中恢复DB的信息

当创建DB时,controlfiles也随之创建,位置由ParameterFile的control_files参数决定。

由于ControlFiles丢失会对DB的恢复带来困难,多数的DB把controlFiles复制几份放入不同的地点。

Oracle使用CKPT进程自动更新这些文件,使所有的controlFiles备份同步。

你可以用dynamicperformanceviewV$CONTROLFILE显示所有controlfiles的存放地址。

V$CONTROLFILE在Unix下的使用如下:

SQL>selectnamefromv$controlfile;

NAME

------------------------------------

/u02/oradata/PROD/control01.ctl

/u03/oradata/PROD/control02.ctl

/u05/oradata/PROD/control03.ctl

这个查询显示了有3个controlFiles分别存在3个不同的地点。

当然,你也可以用EM来查看ControlFiles的存放情况。

ControlFiles往往是DB中最小的文件,通常在1M到5M之间。

但是,当使用RecoveryManager时,它也可以根据PFILE/

SPFILE设置的CONTROLFILE_RECORD_KEEP_TIME参数,变得比较大。

controlfil

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1