ORACLE体系结构及DBA管理.docx
《ORACLE体系结构及DBA管理.docx》由会员分享,可在线阅读,更多相关《ORACLE体系结构及DBA管理.docx(30页珍藏版)》请在冰点文库上搜索。
ORACLE体系结构及DBA管理
ORACLE体系结构及DBA管理
培训资料
第一章.概要3
第二章.ORACLE实例3
2.1ORACLESERVER3
2.2ORACLE内存结构(Memorystructure)4
2.2.1内存结构的组成4
2.2.2全局共享区SystemGlobalArea(SGA)4
2.2.3程序共享区ProgramGlobalArea(PGA)6
2.3后台进程(Backgroundprocess)6
2.3.1数据写进程DBWR8
2.3.2日志写进程LGWR8
2.3.3系统监控SMON9
2.3.4进程监控PMON9
2.3.5检查点进程CKPT9
2.3.6归档进程ARCH9
2.3.7分布式恢复RECO9
2.3.8服务进程ServerProcess10
2.3.9用户进程UserProcess10
2.4一个贯穿数据库全局的概念----系统改变号SCN(SystemChangeNumber)10
第三章.ORACLE数据库(Database)11
3.1物理结构——物理操作系统文件的集合.11
3.1.1控制文件(Controlfiles)11
3.1.2数据文件(Datafiles)11
3.1.3重做日志文件(Redofiles)12
3.1.4归档日志文件(Archivedfiles)12
3.1.5初始化参数文件(Parameterfile)13
3.1.6其他文件13
第四章.ORACLE逻辑结构13
4.1表空间(tablespace)14
4.2段(Segment)14
4.3区间(Extent)15
4.4Oracle数据块(Block)15
4.5基本表空间介绍15
4.5.1系统表空间(System)15
4.5.2临时表空间(Temporary)15
4.5.3回滚段表空间(Rollback)16
4.5.4用户表空间(User)16
第五章.ORACLE常用工具16
5.1关于DBAStudio16
5.2使用PL/SQLDeveloper18
5.2.2.1登录18
5.2.2.2PL/SQLDeveloper的使用18
第六章.DBA知识19
6.1一些重要的参数文件19
6.2数据库的启动和关闭20
6.3配置服务和监听20
6.4配置和检测DBLINK21
6.5常用的DBA脚本21
第七章.常见问题22
参考文献:
22
第一章.概要
在本章里你可以了解以下内容
1、ORACLE实例——包括内存结构与后台进程
2、ORACLE数据库——物理操作系统文件的集合
3、了解内存结构的组成
4、了解后台进程的作用
5、了解数据库的物理文件
6、解释各种逻辑结构
第二章.ORACLE实例
2.1ORACLESERVER
ORACLESERVER由实例(Instance)和数据库(Database)组成:
ORACLE内存结构和后台进程被成为数据库的实例。
一系列物理文件的集合(数据文件,控制文件,联机日志等)或一系列逻辑结构组成的集合被称为数据库,数据库对应的有物理结构与逻辑结构。
实例与数据库的关系如下图所示:
ORACLESERVER
2.2ORACLE内存结构(Memorystructure)
2.2.1内存结构的组成
Oracle内存结构主要可以分为SGA(SystemGlobalArea)与PGA(ProgramGlobalArea),可以用如下图形表示。
ORACLEMEMOERYSTRUCTRUE
2.2.2全局共享区SystemGlobalArea(SGA)
SystemGlobalArea是一块巨大的共享内存区域,他被看做是Oracle数据库的一个大缓冲池,这里的数据可以被ORACLE的各个进程共用。
其大小可以通过如下语句查看:
SQL>select*fromv$sga;
NAMEVALUE
------------------------------
FixedSize73888
VariableSize234000384
DatabaseBuffers16777216
RedoBuffers172032
SGA主要包括以下几个部分:
2.2.2.1共享池(Sharedpool)
共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。
一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。
不正确的使用共享池只会带来灾难。
共享池主要又可以分为以下两个部分:
·SQL语句缓冲(LibraryCache)
清空Share_pool所使用的语句
SQL>altersystemflushSHARED_POOL;
Systemaltered.
·数据字典缓冲区(DataDictionaryCache)
数据字典缓冲区是ORACLE特地为数据字典准备的一块缓冲池,供ORACLE内部使用,没有什么可以说的。
2.2.2.2块缓冲区高速缓存(DatabaseBufferCache)
这些缓冲是对应所有数据文件中的一些被使用到的数据块。
让他们能够在内存中进行操作。
任何文件的数据块都有可能被缓冲。
数据库的任何修改都在该缓冲里完成,并由DBWR进程将修改后的数据写入磁盘。
这个缓冲区的块基本上在两个不同的列表中管理。
一个是块的“脏”表(DirtyList),需要用数据库块的书写器(DBWR)来写入,另外一个是不脏的块的列表(FreeList),一般的情况下,是使用最近最少使用(LeastRecentlyUsed,LRU)算法来管理。
块缓冲区高速缓存又可以细分为以下三个部分(Defaultpool,Keeppool,Recyclepool)。
如果不是人为设置初始化参数(Init.ora),ORACLE将默认为Defaultpool。
注意:
由于操作系统寻址能力的限制,不通过特殊设置,在32位的系统上,块缓冲区高速缓存最大可以达到1.7G,在64位系统上,块缓冲区高速缓存最大可以达到10G。
2.2.2.3重做日志缓冲区(Redologbuffer)
重做日志文件的缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入磁盘。
这些修改信息可能是DML语句,如(Insert,Update,Delete),或DDL语句,如(Create,Alter,Drop等)。
为什么需要有重做日志缓冲区的存在?
因为内存到内存的操作比较内存到硬盘的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度,但是考虑的数据库的一致性与可恢复性,数据在重做日志缓冲区中的滞留时间不会很长。
注意:
重作日志缓冲区一般都很小,大于3M之后的重作日志缓冲区已经没有太大的实际意义。
2.2.2.4Java程序缓冲区(JavaPool)
Java的程序区,Oracle8i以后,Oracle在内核中加入了对Java的支持。
该程序缓冲区就是为Java程序保留的。
如果不用Java程序没有必要改变该缓冲区的默认大小。
2.2.2.5大对象池(LargePool)
大对象池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,在8.0开始引入。
下面对象使用大对象池:
1、MTS——在SGA的LargePool中分配UGA
2、语句的并行查询(ParallelExecuteionofStatements)——允许进程间消息缓冲区的分配,用来协调并行查询服务器
3、备份(Backup)——用于RMAN磁盘I/O缓存
2.2.3程序共享区ProgramGlobalArea(PGA)
ProgramGlobalArea(PGA)是用来保存与用户进程相关的内存段,PGA总是由进程或线程在本地分配,其它进程与线程无法访问。
UserGlobalArea(UGA)实际上是会话的状态,它是会话必须始终能够得到的内存。
对于专用服务器进程,UGA在PGA中分配。
对于多线程进程,UGA在Largepool中分配。
PGA/UGA一般保存了用户的变量、权限、堆栈、排序(Sort)空间等信息。
影响PGA/UGA最大的也就是Sort信息,由初始化参数sort_area_size决定,由于Sort信息分配在UGA中,所以在共享服务器中能更好的利用内存。
2.3后台进程(Backgroundprocess)
后台进程是Oracle的程序,用来管理数据库的读写,恢复和监视等工作。
一个Oracle后台进程将启动一个操作系统进程;在Windows机器上,Oracle后台进程相对于操作系统线程,打开任务管理器,我们只能看到一个ORACLE.EXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的线程。
后台进程与其它结构的关系如图所示:
ORACLEBACKGROUPPROCESS
在Unix上可以通过如下方法查看后台进程:
ps–ef|grepora_
#ps-ef|grepora_|grepXCLUAT
oracle240210Jul1000:
00:
00ora_pmon_orcl
oracle240410Jul1000:
01:
08ora_dbw0_orcl
oracle240610Jul1000:
01:
13ora_lgwr_orcl
oracle240810Jul1000:
02:
47ora_ckpt_orcl
oracle241010Jul1000:
03:
09ora_smon_orcl
oracle241210Jul1000:
00:
00ora_reco_orcl
Oracle系统有5个基本进程他们是
DBWR(数据文件写入进程)
LGWR(日志文件写入进程)
SMON(系统监护进程)
PMON(用户进程监护进程)
CKPT(检查点进程,同步数据文件,日志文件,控制文件)
在windows2K下,可以通过第三方工具查看,例如qslice或者tlist
2.3.1数据写进程DBWR
将修改过的数据缓冲区的数据写入对应数据文件
维护系统内的空缓冲区
这里指出几个容易错误的概念:
·当一个更新提交后,DBWR把数据写到磁盘并返回给用户提交完成.
·DBWR会触发CKPT后台进程
·DBWR不会触发LGWR进程
上面的概念都是错误的.
DBWR是一个很底层的工作进程,他批量的把缓冲区的数据写入磁盘。
不受前台进程的控制。
至于DBWR会不会触发LGWR和CKPT进程,我们将在下面几节里讨论。
以下条件会触发DBWR工作:
·系统中没有多的空缓冲区用来存放数据
·CKPT进程触发DBWR等
2.3.2日志写进程LGWR
将重做日志缓冲区的数据写入重做日志文件,LGWR是一个必须和前台用户进程通信的进程。
当数据被修改的时候,系统会产生一个重做日志并记录在重做日志缓冲区内。
这个重做日志可以类似的认为是以下的一个结构:
SCN
数据块ID
对象ID
修改后的数据
提交的时候,LGWR必须将被修改的数据的重做日志缓冲区内数据写入日志数据文件,然后再通知前台进程提交成功,并由前台进程通知用户。
LGWR承担了维护系统数据完整性的任务。
触发LGWR工作的主要条件:
·用户提交
·有1/3重做日志缓冲区未被写入磁盘
·有大于1M重做日志缓冲区未被写入磁盘
·DBWR需要写入的数据的SCN号大于LGWR记录的SCN号,DBWR触发LGWR写入
2.3.3系统监控SMON
工作主要包含
·清除临时空间
·在系统启动时,完成系统实例恢复
·聚结空闲空间
·从不可用的文件中恢复事务的活动
·OPS中失败节点的实例恢复
·清除OBJ$表
·缩减回滚段
·使回滚段脱机
2.3.4进程监控PMON
主要用于清除失效的用户进程,释放用户进程所用的资源。
如PMON将回滚未提交的工作,释放锁,释放分配给失败进程的SGA资源。
2.3.5检查点进程CKPT
同步数据文件,日志文件和控制文件,由于DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一至,这就需要CKPT进程来同步。
CKPT会更新数据文件/控制文件的头信息。
CKPT工作的主要条件如下
·在日志切换的时候
·数据库用immediate,transaction,normal选项shutdown数据库的时候
·根据init.ora文件中LOG_CHECKPOINT_INTERVAL、
LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET设置的参数值来确定
·用户触发altersystemcheckpoint;
以下进程启动需要手工配置
2.3.6归档进程ARCH
当数据库以归档方式运行的时候,Oracle会启动ARCH进程,当重做日志文件被写满时,日志文件进行切换,旧的重做日志文件就被ARCH进程复制到一个/多个特定的目录/远程机器。
这些被复制的重做日志文件被叫做归档日志文件。
2.3.7分布式恢复RECO
负责解决分布事物中的故障。
Oracle可以连接远程的多个数据库,当由于网络问题,有些事物处于悬而未决的状态。
RECO进程试图建立与远程服务器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。
2.3.8服务进程ServerProcess
服务进程的分类
·专用服务进程(DedicatedServerProcess)
一个服务进程对应一个用户进程
·共享服务进程(MultiTreadedServerProcess)
一个服务进程对应多个用户进程,轮流为用户进程服务。
2.3.9用户进程UserProcess
在客户端,将用户的SQL语句传递给服务进程
2.4一个贯穿数据库全局的概念----系统改变号SCN(SystemChangeNumber)
系统改变号,一个由系统内部维护的序列号。
当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。
a.查询语句不会使SCN增加,就算是同时发生的更新,数据库内部对应的SCN也是不同的。
这样一来就保证了数据恢复时候的顺序。
b.维持数据的一致性,当一个查询执行的时候,他会先从系统中得到一个当前的SCN号,在他查找数据的同时,他会检查每个数据行和他对应的SCN号,只有那些不比他的SCN号大的行才能从对应用户数据文件的缓冲区内取出,而那些大于他SCN号的行,就应该从回滚段数据文件的缓冲中取出。
举一个实例来分析:
一个查询返回以下5行
IDName
-------------------------------------
1ShangHai
2Beijing
3Gugangzhou
4ShenZhen
5HangZhou
用户A从12:
00开始运行,到12:
05结束在12:
01用户B执行了一条Update语句,更新了ID是2的那条记录把Beijing该成了Tianjing.并提交,这时候用户A的那个查询是不会出现Tianjing的记录。
12:
00查询时候的SCN是N然后用户B的更新使得系统的SCN变成N+1当用户A查询到ID=2的记录的时候发现他的SCN已经大于查询开始时候的SCN,他就会在回滚段数据缓冲中找到SCN=N的那条记录,并把它返回。
在9i中可以使用
SQL>selectdbms_flashback.get_system_change_numberfromdual;
但Oracle并不支持在8i中得到SCN的方法,但我们可以采用以下方法:
createglobaltemporarytablet(xnumber);
createorreplacefunctionget_scnreturnnumber
as
pragmaautonomous_transaction;
l_scnnumber;
begin
insertintotvalues(userenv('commitscn'))returningxintol_scn;
commit;
returnl_scn;
end;
/
selectget_scnfromdual;
第三章.ORACLE数据库(Database)
3.1物理结构——物理操作系统文件的集合.
3.1.1控制文件(Controlfiles)
参数文件init.ora记录了控制文件的位置
控制文件包括如下主要信息
·数据库的名字,检查点信息,数据库创建的时间戳
·所有的数据文件,联机日志文件,归档日志文件信息
·备份信息等
有了这些信息,Oracle就知道那些文件是数据文件,现在的重做日志文件是哪些,这些都是系统启动和运行的基本条件,所以他是Oracle运行的根本。
如果没有控制文件系统是不可能启动的。
控制文件是非常重要的,一般采用多个镜相复制来保护控制文件,或采用RAID来保护控制文件。
控制文件的丢失,将使数据库的恢复变的很复杂。
控制文件信息可以从v$controlfile中查询获得
SQL>select*fromv$controlfile;
STATUSNAME
---------------------------------------------------------------------------------------
C:
\ORACLE\ORADATA\ORCL\CONTROL01.CTL
C:
\ORACLE\ORADATA\ORCL\CONTROL02.CTL
C:
\ORACLE\ORADATA\ORCL\CONTROL03.CTL
3.1.2数据文件(Datafiles)
数据文件的详细信息记载在控制文件中。
注意:
SYSTEM表空间是不允许脱机的。
在进行数据库恢复时,很多时候需要先将故障数据文件脱机。
可以通过如下方式查看数据文件:
SQL>selectname,status,enabledfromv$datafile;
NAMESTATUSENABLED
-------------------------------------------------------------------------------------------------
C:
\ORACLE\ORADATA\ORCL\SYSTEM01.DBFSYSTEMREADWRITE
C:
\ORACLE\ORADATA\ORCL\RBS01.DBFONLINEREADWRITE
C:
\ORACLE\ORADATA\ORCL\USERS01.DBFONLINEREADWRITE
C:
\ORACLE\ORADATA\ORCL\TEMP01.DBFONLINEREADWRITE
C:
\ORACLE\ORADATA\ORCL\TOOLS01.DBFONLINEREADWRITE
C:
\ORACLE\ORADATA\ORCL\INDX01.DBFONLINEREADWRITE
C:
\ORACLE\ORADATA\ORCL\HOSPITAL.ORAONLINEREADWRITE
C:
\ORACLE\ORADATA\ORCL\P1.ORAONLINEREADWRITE
C:
\ORACLE\ORADATA\ORCL\P2.ORAONLINEREADWRITE
3.1.3重做日志文件(Redofiles)
用户对数据库进行的任何操作都会记录在重做日志文件。
在了解重做日志之前必须了解重做日志的两个概念,重做日志组和重做日志组成员(Member),一个数据库中至少要有两个日志组文件,一组写完后再写另一组,即轮流写。
每个日志组中至少有一个日志成员,一个日志组中的多个日志成员是镜相关系,有利于日志文件的保护,因为日志文件的损坏,特别是当前联机日志的损坏,对数据库的影响是巨大的。
联机日志组的交换过程叫做切换,需要特别注意的是,日志切换在一个优化效果不好的数据库中会引起临时的“挂起”。
挂起大致有两种情况:
·在归档情况下,需要归档的日志来不及归档,而联机日志又需要被重新利用
·检查点事件还没有完成(日志切换引起检查点),而联机日志需要被重新利用
解决这种问题的常用手段是:
i.增加日志组
ii.增大日志文件成员大小
通过v$log可以查看日志组,v$logfile可以查看具体的成员文件。
SQL>selectgroup#,thread#,bytes,archived,statusfromv$log;
GROUP#THREAD#BYTESARCHIVEDSTATUS
----------------------------------------------------------------------------------------
111048576YESINACTIVE
211048576YESINACTIVE
311048576NOCURRENT
3.1.4归档日志文件(Archivedfiles)
Oracle可以运行在两种模式之中,归档模式和非归档模式。
如果不用归档模式,当然,你就不会有归档日志,但是,你的系统将不会是一个实用系统,Oracle不能保证数据能够被正确恢复,因为你可能会丢失数据。
但是在归档模式中,为了保存用户的所有修改,在重做日志文件切换后和被覆盖之间系统将他们另外保存成一组连续的文件系列,该文件系列就是归档日志文件。
有人或许会说,归档日志文件占领我大量的硬盘空间,其实,具体想一想,你是愿意浪费一点磁盘空间来保护你的数据,还是愿意丢失你的数据呢?
显而义见,我们需要保证我们的数据的安全性。
其实,归档并不是一直占领你的磁盘空间,你可以把她备份到磁带上,或则删除上一次完整备份前的所有日志文件。
3.1.5初始化参数文件(Parameterfile)
initSID.ora或init.ora文件,因为版本的不一样,其位置也可能会不一样。
在8i中,通常位于$ORACLE_HOME/admin//Pfile下
初始化文件记载了许多数据库的启动参数,如内存,控制文件,进程数等,在数据库启动的时候加载(Nomount时加载),初始化文件记录了很多重要参数,对数据库的性能影响很大,如果不是很了解,不要轻易乱改写,否则会引起数据库性能下降。
3.1.6其他文件
i.密码文件。
用于Oracle的具有sysdba权限用户的认证。
文件一般位于
$ORACLE_HOME/database/PWD.ora。
ii.日志文件·报警日志文件(alert.log或alrt.ora)
记录数据库启动,关闭和一些重要的出错信息。
数据库管理员应该