1-Oracle Database 11g 体系结构

一、Oracle数据库结构

    1、逻辑结构

    1.1、数据块(Orale块):操作系统的存储系统中磁盘空间的一定数目字节组成。数据块是oracle数据库最小的逻辑部件。可定义为2K、4K、8K、16K、32K或者更大,通常称为Oralce块。


    Orale块的尺寸:在初始文件init.ora中的DB_BLOCK_SIZE参数设置。是处理oracle更新、选择、和插入数据库事务的最小单位(可认为等同于sql server的页)。操作系统也有一个磁盘块的尺寸,所以理想情况下数据块的大小应该是磁盘块大小的倍数。

show parameter db_block_size;--查看块尺寸

    数据块大小选择的方案:

    (1)如果行比较小且访问很随机,选择较小的块尺寸。比如处理行小,需要大量的索引查找。

    (2)如果行比较小且访问主要是连续的(或者随机且连续),或者较大的行,选择较大的块尺寸。比如报表。

    (3)如果不能确定,Oracle建议尺寸是8K。

 

    同一数据库中可以配置多个块尺寸(需要配置SGA的缓冲区高速缓存中相应的子高速缓存),主要用于具有不同数据库块尺寸的数据库之间传送表空间。

 

    数据块内部结构(行数据部分、可用空间部分、还有其他一些小的部分:数据块所用的系统开销和首部空间)

    行数据部分包括存储在表或者索引中的数据。可用空间部分是oracle块留下的空间,为了是给将要输入的新数据或者是扩充已有行留下的空间

     

    1.2、区(extent):相邻的数据块组成一个区。创建表或者索引等数据库对象时,先分配一个初始的空间量(initial extent),并指定下一个区的空间量。在删除该对象之前,区都会一直保留他们。一旦对象从数据库中删除,区空间也会回到数据库可分配的可用空间池中。

 

    1.3、段(segment):一组区组成段。Oracle称分配给任一数据库对象所有的空间为一个段。如果一个段被填满了,Oracle根据需要分配另外的区,这些区可能是不相邻的。

 

    1.4、表空间(tablespace):包含物理数据文件的逻辑实体。System、Sysaux、撤销(undo)、临时(temporary)、默认参数,这5个是数据库必须要有的表空间。

    同一个数据库中可以有不同Oracle块尺寸的表空间,我们可以把大对象(LOB)数据放在其他表空间,并设置尺寸较大的Oracle块,以提高查询速度。

    大文件表空间只是拥有一个大数据文件的表空间。   

    小文件表空间可以包含多个数据文件。

    临时表空间只包含用户会话期间的数据,通常只想数据分类或者类似的活动。

    永久表空间除了临时表空间之外的所有表空间。

    撤销表空间包含撤销记录,oracle用来回滚或者撤销更改的数据库

    只读表空间不允许对表空间的数据文件执行写的操作。

--创建大表空间
CREATE BIGFILE TABLESPACE BigTableSpace DATAFILE '/mnt/db1/BigTableSpace01.dbf' SIZE 500M AUTOEXTEND ON;
--创建小表空间,增加数据文件(默认oracle创建的是小表空间按)
CREATE TABLESPACE TABLESPACE_NAME LOGGING DATAFILE '/mnt/db1/TABLESPACE_NAME.dbf' SIZE 2048M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED; 
ALTER TABLESPACE TABLESPACE_NAME ADD DATAFILE '/mnt/db1/TABLESPACE_NAME02.dbf' SIZE 50m AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
--创建临时表空间,修改默认临时表空间
CREATE TEMPORARY TABLESPACE TABLESPACEE_TEMP TEMPFILE '/mnt/db1/TABLESPACEE_TEMP.dbf' SIZE 50m AUTOEXTEND ON NEXT 50m MAXSIZE 20480m; 
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TABLESPACEE_TEMP;
--为用户设置默认表空间
ALTER USER USER_NAME DEFAULT TABLESPACE TABLESPACE_NAME TEMPORARY TABLESPACE TABLESPACEE_TEMP;


 

    2、物理结构

    2.1、数据文件(data file)存储表和索引的数据

    数据文件的容量和DB_BLOCK_SIZE有关,在创建数据库时可设置大小为4K、8K、16K、32K、64K,

    oracle小表空间的数据文件最大只允许4194304个块。所以该最大值为4194304*DB_BLOCK_SIZE/1024M:

    4K最大数据文件:16384M=16G

    8K最大数据文件:32768M=32G

    16K最大数据文件:65536M=64G

    32K最大数据文件:121072M=128G

    64K最大数据文件:262144M=256G

    Oracle大表空间的数据快最大有4G,所以数据文件大小8T-128T

 

    2.2、控制文件(control file)记录所有数据库结构的更改信息,包括数据文件和重做日志文件的名字和位置,当前日志序列号,备份集详细信息,以及SCN(系统更改号)。

--查看控制文件状态,路径以及名称,是否放在闪回恢复区
SELECT status, NAME, is_recovery_dest_file FROM v$controlfile;

    oracle建议多路复用控制文件。

--查看控制文件信息
SHOW PARAMETER CONTROL_FILES
SELECT * FROM V$CONTROLFILE;
--调整多路复用基于spfile启动的
alter  system set control_files=
'/mnt/db1/controlo1.ctl','/mnt/db2/controlo2.ctl','/mnt/db3/controlo3.ctl'  scope=spfile;
--关闭数据库
shutdown immediate
--复制物理控制文件到新的目录
--启动数据库

 

    2.3、重做日志文件(redo log file)对表数据所做的更改信息。当前的日志文件被称为联机重做日志,已区别旧的被保存的归档日志。

    重做日志由重做记录组成,是更改的矢量组,每个记录都指向数据块的一个特定更改。

    开始日志的内容保留在重做日志缓冲区(内存区域)中,之后转移到磁盘上,如果数据库突然停机了,重做日志将帮助确定崩溃前的事务是否提交。

    开启归档日志模式

shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
archive log list;

    oracle建议多路复用重做日志文件。

--查看日志文件信息
select * from v$log;
select * from v$logfile;
--添加组
alter database add logfile group 5 ('/mnt/db1/oradata/redo05.log') size 50m;
--添加组成员
alter database add logfile member '/mnt/db1/oradata/redo01B.log' to group 1,
'/mnt/db2/oradata/redo02B.log' to group 2,
'/mnt/db2/oradata/redo03B.log' to group 3,
'/mnt/db2/oradata/redo04B.log' to group 4,
'/mnt/db2/oradata/redo05B.log' to group 5;
--切换5次logfile,使5组所有的日志都生效,至此,数据库重做日志的多路复用就完成了。
alter system switch logfile;
--删除日志组成员
--如果改组只有一个成员是不能删除的,
--当前使用的日志组成员不能删除,先删除其他然后切换日志组,再删除
alter database drop logfile member '/mnt/db1/oradata/redo01B.log',
'/mnt/db2/oradata/redo02B.log',
'/mnt/db2/oradata/redo03B.log',
'/mnt/db2/oradata/redo04B.log';
--删除日志组,日志组的状态必须是INACTIVE,物理文件要手动删除
alter database drop logfile group 5;

 

    2.4、其他文件

    2.4.1、服务器参数文件(SPFILE),可说明实例的内存限制值,控制文件的位置,归档日志是否保存以及位置,以及其他一些服务器设置。该文件是二进制文件,可转换成pfile进行编辑

--创建SPFILE
create pfile='/home/oracle/pfile.ora' from spfile;
--修改pfile的值,并还原
create spfile from pfile='/home/oracle/pfile.ora';

    2.4.2、密码文件,是一个可选文件,指定授予SYSDBA、SYSOPER管理权限的数据库用户的名字,使用这些用户可执行的操作。

 

    2.4.3、预警日志文件,alterDB_NAME.log,捕捉实例运行期间主要的更改和事件,包括日志切换,错误,警告以及其他消息。通过以下命令查看所有的错误信息。

grep ORA- alterDB_NAME.log

    2.4.4、跟踪文件,所有的诊断文件都存储在DIAGNOSTIC_DEST初始化参数指定的目录下。

    2.4.5、备份文件,在介质故障或者用户错误之后,还原数据文件。

 

二、Oracle进程结构

    1、用户进程

    连接用户用户与数据库实例的应用:SQL*PLUS、SQL Developer等等。

 

    2、Oracle进程

    2.1、服务器进程

    为单独的用户进程服务的进程。

 

    2.2、后台进程

    数据库写入器(DBWn):ORACLE所有的数据修改都是在内存中进行的,而后,DBWn负责将数据库缓冲区里的脏数据即更改过的数据写入到磁盘中。使用最近最少使用算法执行进程,触发条件(1)发布检查点(2)找不到可重用的缓冲区(3)每隔3秒立刻执行该进程。最多有20个写入进程(DBW0-DBW9,DBWa-DBWj),可通过DB_WRITER_PROCESSES指定,不指定则根据CPU和处理器分配个数。

 

    日志写入器(LGWR):重做日志缓冲区的内容传送到磁盘上,更改数据的时候,oracle会把提交未提交的更改写入重做日志缓冲区,然后日志写入器把这些更改从重做日志缓冲区写入磁盘重做日志文件中。触发条件(1)每隔3秒(2)重做日志缓冲区被填充三分之一(3)数据写入磁盘前(3)事务提交


    检查点(CKPT):负责通知数据库写入器进程把内存缓冲区的脏数据写入磁盘。之后检查点进程还更新数据文件头和控制文件。步骤(1)日志写入器(2)检查点记录写到重做日志文件(3)数据库缓冲区高速缓存的内容写到磁盘(4)检查点更新数据文件的头以及控制文件。

ALTER SYSTEM CHECKPOINT;--强制执行检查点

    进程监控器(PMON):用户进程失败后,PMONC立刻将其清除,释放死进程占用的资源。重启失败的服务器进程和调度程序进程,长期处于不活动状态,定期启动查看是否需要执行。

    系统监控器(SMON):实例的系统监控任务,需要时启动。(1)崩溃实例重启后检查数据库是否一致(2)本地管理表空间,SMON合并可用区,将磁盘较大的相邻的可用区域分配给数据库对象(3)清除不必要的临时段。需要时启动。

    归档器(ARCn):数据库运行在归档模式下,每个被填满的日志文件保存存档在一个特定的地方。最多30个归档器进程(ARC0-ARCn),初始化参数LOG_ARCHIVE_MAX_PROCESSES参数决定Oracle初始启动多少个归档器进程(不需要提前设置)。这是一个动态参数,可在数据库运行中更改:

ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=10;

    与ASM有关的进程:使用ASM时候必须创建一个ASM实例(重新平衡(RBAL)、ASM重新平衡(ARBn)、ASM后台) 

    可管理监控器(MMON):收集集中统计数据,如AWR快照信息,还将在数据库各种尺寸违反阙值发出警告。

    可管理监控器灯(MMNL):将ASH数据刷新到磁盘,其他可管理任务,捕捉会话历史数据以及计算数据库度量标准。

    内存管理器(MMAN):调整内存部件的大小

    作业队列调整进程(CJQO):安排并运行用户作业,CJQO动态产生作业队列的从属进程(J000到J999)。

    恢复器(RECO):用来调整分布式数据库和其他特殊进程。

    闪回数据归档器(FBDA):负责把更改写到表(闪回数据归档到历史表而启用的表)中。

    结果集高速缓存后台(RCBG):负责管理结果集高速缓存。

 

 

三、Oracle内存结构

两种内存结构,一种为共享的,SGA(系统全局区)是所有服务器进程(包括后台进程)可共享的内存部分。另一种称为PGA(程序全局区或者进程私有内存)是进程专有的内存部分。

在大型的OLTP数据库中,SGA是比PGA更大和更重要的内存区域。在数据仓库中,PGA可能更重要,因为它影响排序大量的数据和散列类似的分析计算效率。

Oracle支持把内存从一个可动态定义内存大小的内存部件分配给另一个内存部件,DBA可根据需要分配内存,但是管理内存的最好办法是自动内存管理技术。

 

1、SGA 

它的目的是提高查询性能,允许大量的并发数据库活动。在数据库启动实例的时候,Oracle按需分配内存,直到达到MEMORY_TARGET初始化参数的大小。

1.1、    数据库缓冲区高速缓存

保存服务器进程从磁盘数据文件读取的数据块,同时,用户修改数据也在内存缓冲区里进行,因此也包含了更改过的快。

当一个用户进程请求数据时,(1)首先检查该数据是否包含在缓冲区高速缓存中,(2)若存在,服务器进程将从SGA中直接读取该数据并发送给用户。(3)若没有,服务器进程从磁盘文件中读取相应的数据,并缓存在数据库缓冲区高速缓存中。(4)此时,如果没有足够的缓存空间,请求数据库写入器(DBWn),最近最少使用原则(LRU)维护缓存空间。

因此,数据库缓冲区高速缓存越大,所需磁盘IO操作越少,数据库性能越好。但是,简单分配一个超大的缓冲区高速缓存也会损坏性能,占用了超过需要的内存并导致服务器上的调页和交换。

除了默认的缓冲区高速缓存(DB_CACHE_SIZE),我们可以设置保持缓存区池(DB_KEEP_CACHE_SIZE),把经常使用的表分配到保持缓存区池中,防止它退出缓存。回收缓冲区池(DB_RECYCLE_CACHE_SIZE)会把使用过的数据立刻从缓存中删除,保持充足的空间。

默认缓冲区高速缓存是根据DB_CACHE_SIZE初始化参数确定的,是必须的,其他是可选的。

 

1.2、    共享池

保存可执行的PL/SQL代码和SQL语句,以及有关数据字典表的信息。

恰当的共享池空间,(1)响应时间更短,重用之前编译过的相同代码。(2)相同的资源用于更多的用户。

共享池的组成。(1)库高速缓存。SQL或者PL/SQL都需要先分析语法,然后再执行。共享池的库高速缓存存储所有编译过的SQL语句,且被所有用户共享。该过程被称为软分析。如果没有检测到已编译的代码,重新创建新的可执行代码称为硬分析。(2)数据字典高速缓存。包含对象的定义、用户名、角色、权限等类似的信息。执行一段代码,需要检查是否有相应的权限。首先会从数据字典高速缓存中查找,没有该信息则会把数据字典读取到数据字典高速缓存中。(3)结果高速缓存。存储SQL查询和PL/SQL函数的结果。

没有直接修改库告诉缓存和数据字典高速缓存,所以解决库高速缓存低命中率和数据字典缓存低命中率,只能修改共享池的大小。

 

1.3、    重做日志缓冲区

通常小于2M,当服务器进程在数据库缓冲区高速缓存中更改数据,产生重做数据,并记录到重做日志缓冲区中,日志写入器(LGWR)把重做信息从内存写入磁盘重做日志中。通过LOG_BUFFER初始化参数设置该大小,并且其大小在实例运行期间不能改变。

日志写入器在一下条件下把重做日志缓冲区内容写入磁盘(1)重做日志缓冲区填充三分之一时(2)用户提交事务(2)数据库缓冲区高速缓存可用空间减少并需要将更改过的数据写入重做日志,数据库写入器指示日志写入器把日志缓冲区的内容刷新到磁盘。

Oracle提供nologging选项可以完全绕过重做日志。

 

1.4、    Java池

JAVA池(JAVA_POOL_SIZE)是为jvm和基于java应用保留的。


1.5、    大池

大池是一个可选的内存池,仅当数据库使用并查询时才需要大池。如果使用RMAN或共享服务器配置,oracle建议配置大池。可在LARGE_POOL_SIZE参数中设置大小。

 

1.6、    流池

     ORACLE Streams可以在不同数据库之间和不同应用环境之间共享数据。是为了支持实例中streams活动而分配内存。可以通过STREAMS_POOL_SIZE初始化参数设置该部件。如果启用自动共享内存管理,该内存来自全局SGA池,调配的内存数量最多为共享池的10%。

 

 

2、PGA

Oracle在用户启动会话时为每个用户创建一个程序全局区。保存为每个单独用户创建的专用服务器进程的数据和控制信息。

PGA可以存放每个用户私有值,不与其他用户共享,此外,另一个主要用途是执行涉及排序(order by和group by)的内存密集型操作。

   

2.1、私有SQL区域

保存SQL的变量绑定信息和运行时内存结构。游标是内存中一个私有SQL区域的句柄,OPEN_CURSORS初始参数确定会话中游标的最大数目。

 

2.2、运行时区域

在会话发布select、insert或delete语句时创建。在结束后释放。

 

3、内存管理

WORKAREA_SIZE_POLICY设置为auto,启动自动化PGA内存分配,设置为manual,则必须指定所有与PGA工作区域有关的参数,同时必须设置PGA_AGGREGATE_TARGET设置一个总的PGA大小。

可以使用MEMORY_TARGET初始化参数配置自动内存管理。

Oracle自动管理一下5个SGA部件(1)数据库缓冲区高速缓存(2)共享池(3)大池(4)Java池(5)Streams池

手动管理一下部件(1)保持缓冲区高速缓存(2)回收缓冲区高速缓存(3)任何非标准快尺寸的缓冲区高速缓存(4)重做日志缓冲区。前3个部件是可选的。

 

 

   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值