1、单实例体系结构
Oracle服务器是连接到数据库的实例。
实例包括共享内存块以及一组后台进程。
数据库是磁盘上的一组文件。
用户会话是连接到服务器进程的用户进程。
SGA内存由所有后台和前台进程共享。
2、实例内存结构
实例共享内存是系统全局区(SGA)。
会话的专用区域是程序全局区(PGA)。
SGA由一组子结构组成,其中一些是必须的(数据库缓冲区缓存、日志缓冲区和共享池),而另一些是可选的(大池、JAVA池和流池)。
可以动态重调SGA结构的大小,也可以对其进行自动化管理,但日志缓冲区除外。
日志缓冲区的大小固定不变,在启动实例时被设置为固定值。无法对其进行自动管理。
数据库缓冲区缓存、共享池、大池、Java池、流池的大小可以动态调整,而且可以自动管理。
3、实例进程结构
当用户连接时,将根据需要启动会话服务器进程。
后台进程在启动实例时启动,在关闭实例前一直存在。
服务器进程从数据库读取,后台进程对数据库执行写操作。
某些后台进程始终存在(特别是SMON,PMON,DBWn,LGWR,CKPT和MMON),而其他进程则根据启用的选项运行。
SMON-System Monitor 系统监视器。
PMON-Process Monitor 进程监视器,用户会话是连接到服务器进程的用户进程。
如果会话终止,PMON后台进程将回滚活动事务。
DBWn-Database Write 数据库写入器。
究竟需要多少个数据库写入器?默认数量就很合适。添加多了数据库写入器,性能可能会有所提升,但通常需要先考虑调整内存。一般来说,在优化磁盘I/O之前都要问问自己:为什么需要磁盘I/O呢?
DBWR会在哪些情况下执行写操作?在没有任何可用缓冲区、脏缓冲区过多、遇到3秒超时或遇到检查点。
在提交事务时,DBWn有何举动?它什么都不做。
LGWR-Log Writer 日志写入器。
LGWR会在哪些情况下将日志缓冲区转储到磁盘?会话发出COMMIT时、缓冲区的占有率达到1/3时、DBWn正好执行写入前。
CKPT-Checkpoint Process 检查点进程。
何时出现完全检查点?只会应请求这么做,或在有序关闭数据库时出现。
MMON-Manageablility Monitor 可管理性监视器
默认方式下,MMON每小时收集一次快照并启动ADDM.
MMAN-Memory Manager 内存管理器
ARCn-归档日志进程
LGWR对联机日志文件中执行写操作,ARCn读取联机日志文件,其他任何进程根本不接触此类文件。
4、数据库存储结构
数据库中有三类必需的文件:控制文件、联机重做日志文件和数据文件。
控制文件存储完整信息以及指向数据库其余部分的指针。
联机重做日志存储应用于数据库的最新变更向量。
就每个数据库而言,要保证其正常运行,至少必须有两个联机重做日志文件组;要保证安全,每组至少要有两个成员。
数据文件存储数据。
外部文件包括:参数文件、口令文件、归档重做日志以及日志和跟踪文件。
表空间将逻辑数据存储(段)从物理数据存储(数据文件)中抽象出来。
表空间可由多个数据文件组成。
一个段包含多个区间,一个区间包含多个Oracle块,一个Oracle块包含多个操作系统块。
一个段可以包含位于多个数据文件的区间。
服务器进程对数据文件执行读操作,而DBWn对数据文件执行写操作。
在Oracle 10g及更新版本中,必须在创建数据库时创建SYSAUX表空间。如果未予指定,将创建默认的SYSAUX表空间。
哪个视图将显示数据库中所有的表?是DBA_TABLE,不是ALL_TABLE。
练习
--1、作为用户SYSTEM连接到数据库。 --2、确定实施是否是RAC数据库的一部分 select parallel from v$instance; --如果是单实例数据库,返回NO。 --3、确定数据库是否通过备用数据库的保护来防止数据丢失 select protection_level from v$database; --未保护返回UNPROTECTED --4、确定是否在数据库中配置了流 select * from dba_streams_administrator; --未配置流,不返回任何行 --5、显示可以动态设置大小的SGA组件的当前、最大、最小的容量 select component,current_size,min_size,max_size from v$sga_dynamic_components; --6、确定已为程序全局区分配了多少内存 select name,value,unit from v$pgastat where name in ('maximum PGA allocated','total PGA allocated'); --7、确定哪些进程在运行,以及每个进程的数量有多少? select program from v$session order by program; select program from v$process order by program; --8、确定表所在的表空间、区间大小、区间所在的文件编号、区间所在位置的文件块 select tablespace_name, extent_id, bytes, file_id, block_id from dba_extents where owner = 'QY' and segment_name = 'YW_SW_GRJFJL'; --9、根据文件编号却数据文件 select name from v$datafile where file# = 239; --10、计算区间所在文件中的位置 select blocksize * block_id from dba_tables where tablespace_name = 'TS_JFJL_2012';