`

oracle结构详解(一)

阅读更多

§1.1 Oracle 数据库结构

主要介绍Oracle 数据库结构,包括:

z Oracle 数据字典
z 表空间与数据文件
z Oracle 实例(Instance)

§1.1.1 Oracle? 数据字典

Oracle数据库的重要部分是数据字典。它存放有Oracle数据库所用的有关信息,对用户来说是
一组只读的表。数据字典内容包括:

z 数据库中所有模式对象的信息,如表、视图、簇、及索引等。
z 分配多少空间,当前使用了多少空间等。
z 列的默认值。
z 约束信息的完整性。
z Oracle用户的名字。
z 用户及角色被授予的权限。
z 用户访问或使用的审计信息。
z 其它产生的数据库信息。

数据库数据字典是一组表和视图结构。它们存放在SYSTEM表空间中。
数据库数据字典不仅是每个数据库的中心。而且对每个用户也是非常重要的信息。用户可以
用SQL语句访问数据库数据字典。

§1.1.2 表空间与数据文件

Oracle 以表空间来存储逻辑数据并 以物理数据相连。如图:

       Tablespace 1                         Tablespace 2

                                                Index1   Index2
                       Table2
       Table1

          Table3                                Index3

      Datafile1      Datafile2               Datafile3

数据库被分成一个或多个逻辑部件称作表空间。而表空间又被分成称作段 (segment)的逻辑
部件。这些段再细分就叫扩展(extents)。Oracle 一般有如下表空间:

z SYSTEM 表空间
z 用户多个表空间
z 工具表空间
z 只读表空间
z 临时表空间
z 回滚段表空间

§1.1.3 Oracle 实例(Instance)

Oracle实例是由一组后台进程和内存结构组成。每个运行的数据库系统都与实例有关。

Oracle 进程

Oracle 有两种类型的进程: 服务器进程和后台进程(server                        processes and background
processes) 。

§1.2 Oracle 文件

§1.2.1 数据文件

z Oracle 的数据文件是用来存放实际数据的物理文件;
z Oracle 数据文件必须对应于一个表空间;
z Oracle 系统安装完成并创建数据库成功后,Oracle 会自动创建几个数据库文件。它们被分
   配给 SYSTEM、USERS、TEMP 等表空间;
z 用户可以根据需要创建表空间时创建一个或多个数据文件;
z 对已经创建完成的数据文件可以用ALTER ADTABASE … AUTOEXTEND 、RESIZE 来改
   变数据文件的大小。
z 数据文件可用下面命令查到:

select tablespace_name,file_name ,bytes from dba_data_files;

§1.2.2 控制文件

z Oracle 数据库至少有一个控制文件;
z 一般数据库系统安装完成后,自动创建两个以上控制文件;
z 为了安全一般建议创建多个控制文件;
z 控制文件可用下面命令查到:

select name,value from v$parameter where name like 'control_files';

§1.2.3 重做日志文件

z 重做日志是Oracle 的日记帐,负责记录所有用户对象或系统变更的信息;
z 安装完成后有多个重做日志文件,它们是几个分为一组,组内的重做日志文件大小要一
   样;
z 为了使系统性能更好可以在创建多重做日志文件组;
z 重做日志文件可以名下面命令查到:

select * from v$logfile;

§1.2.4 其它支持文件

除了上面的三类文件外,还有:
z INITsid.ORA 参数文件;
z Sqlnet.ora 文件;
z Tnsnames.ora 文件;
z Listener.ora 文件等。

§1.3 数据块、区间和段

    Oracle 系统的数据块(block)和区间(extent)及段(segment)存在一种关系。了解它们的关
系对于管理和优化都有好处。

§1.3.1 数据块(data block)

z Oracle 的数据块也叫Oracle 块;
z Oracle 系统在创建表空间时将数据文件格式化成若干个Oracle 块;
z 每个Oracle 块是Oracle 系统处理的最小单位;
z 块的大小在安装系统时确定,可以选择“ 自定义安装”来设置大小;
z 块的大小一旦确定下来就不能改动;
z 块的大小可以从2k 至64k 不等;
z 块的大小可以用下面命令查到:

select name,value from v$parameter where name like 'db_block_size';

§1.3.2 区间(extent)

z 分配给对象(如表)的任何连续块叫区间;
z 区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区
   间(即扩展一些块);
z 区间的大小由next 决定;
z 一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象;
z 一个对象所用去多少区间可用下命令查到:

    select segment_name,tablespace_name,count(*) from dba_extents
     having count(*)>1 group by segment_name,tablespace_name;

§1.3.3 段(segment)

z 段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;
z 段可以有表段、索引段、回滚段、临时段和高速缓存段等;
z 段使用同表空间中的若干Oracle 块(可以位于不同数据文件中)。

例:
CREATE TABLE   abc ( empno number(4),ename varchar2(20),sal number(9,2))
TABLESPACE user_data storage(initial 500k next 256k pctincrease 0);

1)段被分配=初始区间=500k;
2)当开始的500k 用完后就再分配256k; 此时段=500k+256k;

3)如果所分配的区间又用完后,就再分配256k, …

                    段(segment)、区间(extent)及块的关系(seg_ext_block)

§1.4 SQL 语句处理

SQL(Structured Query Language)是结构查询语言,它用于操纵和检索Oracle 数据库的数据。
而 SQL 语句分为 DDL(Data   Define   Language)和 DML(Data   Manipulation   Language)两类。在本
教材里主要讨论 DML 语言。DML 语言包括:SELECT 、INSERT 、UPDATE 、DELETE 、
EXPLAIN 及LOCK TABLE。还要讨论COMMIT 语句。

§1.4.1 SQL 语句处理顺序

SQL 语句处理分两个或三个阶段,每个语句从用户进程传给服务器进程进行分析然后执行。
如果是 select 语句,则还需要将结果返回给用户。

1.分析(Parse)

分析是 SQL 语句处理的第一步。主要进行:
z 检查语法和根据字典来检查表名、列名。
z 确定用户执行语句的权限。
z 为语句确定最优的执行计划。
z 从 SQL 区中找出语句。

2.执行(Execute)

Oracle 执行阶段执行的是被分析过的 语句。对于 UPDATE、DELETE 语句,Oracle 先锁住有
关的行。Oracle 还要查找数据是否在数据缓冲区里。如果不在还得从数据文件中将数据读到数
据缓冲区里来。

3.检索(Fetch )

如果是 select 语句,还要进行检索操作。执行结束,将数据返回给用户。

4.Select 语句处理:

一般select 语句处理要经过下面步骤:
执行顺序是:
1)建立光标。
2 )分析语句。
3)定义输出:指定位置,类型,结果集的数据类型。
4 )绑定变量:如果查询使用变量的话,Oracle 就要知道变量的值。
5)是否能并行运行。
6)执行查询。
7)检索出数据。
8)关闭光标。

5.DML 语句处理:

一般INSERT,UPADTE,DELETE 语句处理要经过下面步骤:


                                打开光标

                   YES
                               库缓存里有本语

                               句?

                                      NO

                                  分析语句

                                   定 义

                   NO          绑定变量?

                                      YES

                                绑定

                                并行

                                 执行

                                检索

                                关闭光标

执行顺序是:
1)建立光标:Oracle 建立一个隐含的光标。
2)分析语句。
3)绑定变量:如果语句用了变量,Oracle 要知道变量的值。
4)看语句是否能以并行方式运行(如果有多个服务器时)。
5)执行语句。
6)通知用户,语句已执行完毕。

7)关闭光标。

§1.4.2 COMMIT 语句处理顺序

当事务提交时,Oracle 分配一个唯一的顺序号 SCN(System   Change   Number)给事务。数据库恢
复总是基于该 SCN 号来进行处理。SCN 号是记录在控制文件、数据文件、块头及重做日志文
件中。

1.COMMIT 处理步骤:

Oracle 在下面情况提交事务:

z 发出一个COMMIT 语句。
z 执行DDL 语句时。
z 离开Oracle 时。

Oracle 处理COMMIT 的顺序是:

1)服务器为每个COMMIT 产生一个 SCN。使改变永久化。
2 )LGWR 进程将日志缓冲区数据并带有 SCN 一起写到重做日志文件。
3)服务器释放表级和行级锁。
4 )用户被提示COMMIT 完成。
5)服务器使事务已完成。

Oracle 处理ROLLBACK 的顺序是:

当下面情况发生时执行回滚:

z 发出ROLLBACK 命令。
z 服务器进程放弃地终止。
z 会话被DBA 终止。

ROLLBACK 是对数据库的操作进行撤消,步骤有:

1)服务器进程不做任何的改变。
2)服务器释放表级和行级锁。
3) 服务器使事务已完成。
§1.5 共享池

Oracle 的系统全局区SGA 是由三个部分组成:

z 重做日志缓冲区
z 数据库缓高速冲区
z 共享 SQL 区(包括数据字典cache 和 Shared SQL Pool )

SGA 中的共享池由两个部分组成,即共享 SQL 高速缓存(即库高速缓存)和数据字典高速缓
存。共享 SQL 高速缓存用于在 SGA 中保存当前一次执行的查询的存储过程和其它 SQL 操
作。频繁使用的 SQL 语句都存放在该区内。 而数据字典高速缓存存放系统的数据字典。
共享池高速缓存的使用效率取决于命中率。命重率高表示不需要从硬盘读数据。但是这样的
情况是很不现实的。

例:查询执行次数和失效次数:

select sum(pins) pins, sum(reloads) reloads from v$librarycache;

如果 ratio = ( reloads / pins ) * 100 大于 1 或更大。就需要加大共享池的大小。

类似地,数据字典高速缓存取决于数据库访问的用户数、权限、数据表、索引等。数据库系
统会重复使用相同的数据库对象。如果程序频繁地访问硬盘,就说明数据字典高速缓存过快
失效造成。

例:查询用户可以获得gets(找到对象 )次数和getmisses(高速缓存失效)的次数:

select sum(gets) gets , sum(getmisses) getmisses
from v$rowcache;

如果 ratio = ( getmisses / gets ) * 100 大于 10%,就要考虑加大SHARED_POOL_SIZE 参数值。

§1.6 块缓存(数据高速缓冲区)

块缓存即数据高速缓冲区。它是 SGA 区的一个主要部分。用于存放从数据文件读入的数据
块。它的大小有 INITsid.ORA 文件的 DB_BLOCK_BUFFERS 参数来设置(Oracle9i 参数名称为
DB_CACHE_SIZE)。这个区内容再分为:

z Dirty Buffers 已经改变但还没有存盘的缓冲区。
z Pinned Buffers 当前正在访问的缓冲区。
z Free Buffers 当前尚未使用的缓冲区。

数据高速缓冲区也有命中率的问题。如果需要的数据能在数据高速缓冲区中找到。就叫命
中。下面语句查询命中率。

例:查询数据高速缓冲区的命中率

select name, value from v$sysstat
where name in (‘consistent gets’,’db block gets’,’physical reads’ ) ;

如果 ratio   =   1-   (   physical   reads   /   (   db   block   gets   +   consistent   gets   ) ) 低于 70% 。 则应该加大
INITsid.ORA 文件中的DB_BLOCK_BUFFERS 参数值。

§1.7 数据库写入进程

    数据库写入进程(DBWR )的任务是将修改后的数据块写回数据库文件中。在某些操作
系统中,Oracle 有两个BDWR 进程。
当用户向表中增加数据或从表中读数据,都要用到数据高速缓冲区。当对缓冲区的数据进行
过改动,就叫脏(dirty),如果多次修改(弄脏多个块)缓冲区数据,空闲的缓冲区就减少。
用户就找不到有效的缓冲区来存放查出(读出)的数据。

§1.8 日志写进程

    数据库在处理每个事务中,先将所涉及的记录记在日志缓冲区内。日志缓冲区的是按照
先进先出原则进行工作的。在 Oracle 系统中,有多个日志文件,日志进程以循环的方式将日
志缓冲区内的数据写到日志文件中。
日志写入进程的规则是:

z LGWR 在收到用户进程的提交语句时被唤醒。
z LGWR 每 3 秒被唤醒一次并写重做日志缓冲区。
z 当重做日志缓冲区使用达 1/3 时,LGWR 写重做日志缓冲区。
z 当 DBWR 将数据缓冲区的数据写到数据文件时,LGWR 确保相应的重做日志缓冲区也写
   入到日志文件中。

§1.9 数据库检查点

    当把 SGA 高速缓冲区的数据写回数据文件时就发生了检查点。检查点事件将定期发生以
保证数据库和控制文件同步。然而,由于硬盘的 I/O 速度比内存的处理速度慢,所以数据库系
统一方面要保持内存数据文件的同步,又要保证这种同步不能过频繁。这样就要在
INITsid.ORA 文 件 中 设 置 两 个 参 数 : LOG_CHECKPOINT_INTERVAL          和
LOG_CHECKPOINT_TIMEOUT。
LOG_CHECKPOINT_INTERVAL 设置块的数量间隔。
LOG_CHECKPOINT_TIMEOUT 设置时间间隔。
如果DBA 增大重做日志文件,则重做日志交换的频率降低。
如果要强制产生检查点,就要用下面命令来完成:

ALTER system switch logfile;

当 DBA 执行重做日志的管理时,如将日志文件从一个硬盘移到另一个硬盘时,就需要强制检
查点发生。

§1.10 归档处理

    当数据库环境设置成归档模式时,归档进程(ARCH )就被启动。LGWR                           以循环的方式
对日志文件进行写。当 LGWR 进程写满一个日志文件并要覆盖写另外的日志文件时,LGWR
通知 ARCH 进程把想将将被覆盖的日志文件拷贝到一个归档日志中。ARCH 就负责将在线的
日志文件的副本写到指定的磁带或硬盘上。
要设置数据库为归档方式,可以有两种方法:

ALTER SYSTEM ARCHIVE LOG START;

在INITsid.ORA 文件中设置 LOG_ARCHIVE_START=true 并重启动数据库实例。

分享到:
评论

相关推荐

    Oracle体系结构详解

    ### Oracle体系结构详解 Oracle体系结构是理解Oracle数据库工作原理的关键。本文将深入解析Oracle的基本组成、实例(Instance)结构以及内存结构等核心概念。 #### 一、Oracle基本组成 Oracle的基本组成部分包括...

    oracle 体系结构详解

    在Oracle体系结构中,SGA区是实例的一个关键内存结构,其中包括数据库缓冲区、共享池、重做日志缓冲区等重要组成部分。数据库缓冲区用于暂存从数据文件中读取的数据块,以减少对磁盘的I/O操作,提高数据库访问效率。...

    Oracle 12c数据库体系结构图文详解手册

    Oracle 12c数据库体系结构图文详解手册是 Oracle 12c数据库管理系统的核心组件之一,该手册详细介绍了 Oracle 12c数据库的体系结构、实例、数据库、内存结构、后台进程、控制文件、重做日志文件、数据文件等概念。...

    Oracle数据块结构分析说明BLOCK结构详解

    Oracle是业界广泛使用的大型关系型数据库管理系统,其核心组成部分之一就是数据块结构(Block)。数据块是Oracle数据库中最小的存储单位,是操作系统中读写数据的基本单位,也是数据库实例中逻辑上存储数据的基本...

    Oracle体系结构详解.pdf

    Oracle 体系结构详解 Oracle 体系结构是围绕 Oracle Server 架构展开的, Oracle Server 由 Instance 和 Database 组成。一个 Instance 只能对应一个 Database,特殊情况下一个 Database 可以有多个 Instance(RAC...

    Oracle 笔记 详解 资料 用例

    这份"Oracle笔记详解资料用例"涵盖了Oracle数据库的核心概念、安装配置、SQL语言、表和索引、存储结构、备份恢复、性能优化等多个方面,是学习和掌握Oracle数据库的宝贵资源。 首先,Oracle数据库的基础部分包括...

    Oracle审计功能详解

    "Oracle审计功能详解" Oracle审计功能是指Oracle数据库中的一种安全机制,用于记录和跟踪用户对数据库的访问和操作行为。这种机制可以帮助DBA和安全管理员发现和防止不正当的访问和操作。 一、审计分类 Oracle...

    ORACLE 体系结构详解

    Oracle数据库是世界上最广泛使用的数据库管理系统之一,其复杂而强大的体系结构使其能够处理各种规模的企业级数据。本文将深入解析Oracle 8i及后续版本的体系结构,帮助初学者理解其核心组件。 首先,Oracle实例是...

    oracle实战详解

    ### Oracle实战详解 #### Oracle数据库系统概述 Oracle数据库系统是由美国Oracle公司提供的,以其核心的分布式数据库技术闻名,是市场上非常流行的客户/服务器(CLIENT/SERVER)架构或B/S架构的数据库之一。Oracle...

    Oracle PLSQL详解 宝典

    《Oracle PLSQL详解 宝典》是一本专为IT专业人士准备的深度学习Oracle数据库中的PL/SQL编程语言的指南。本书旨在帮助读者深入理解PL/SQL的各个方面,从而能够熟练地利用这一强大的工具来解决实际工作中遇到的问题。...

    ORACLE索引详解及SQL优化

    总的来说,Oracle索引详解及SQL优化是一个深度广度兼具的主题,需要结合实际数据库结构和业务需求,灵活应用各种索引类型和优化策略,以实现数据库性能的最大化。通过深入学习和实践,你可以更好地驾驭Oracle数据库...

    oracle实战详解-任亮.docx

    实例由后台进程和内存结构组成,一个数据库可以有多个实例。用户是在特定实例下创建的,不同实例可以有同名用户。表空间是逻辑上的数据文件集合,数据库被逻辑地划分为一个或多个表空间,每个表空间包含一组相关的...

    oracle 启动过程详解

    Oracle 启动过程详解 Oracle 启动过程是 Oracle 数据库的核心组件之一,对于初识 Oracle 的人来说,了解 Oracle 启动过程非常重要。本文将详细解释 Oracle 启动过程的三个步骤:启动数据库到 Nomount 状态、启动...

    oracle数据库详解PPT

    Oracle基本体系结构.ppt oracle命令使用大全.doc oracle数据库安装.ppt oracle数据库创建.ppt oracle数据库对象.ppt oracle异常及触发器.ppt plsql过程及函数.ppt PLSQL介绍.ppt PLSQL控制结构.ppt PLSQL...

    Oracle 体系结构和后台进程详解

    Oracle 体系结构和后台进程详解 ,来自官方的文档,很好

    ORACLE-TNS协议分析详解.doc

    ### ORACLE-TNS协议分析详解 #### 一、TNS介绍 TNS(Transparent Network Substrate)协议是Oracle数据库系统中用于实现客户端与服务端之间通信的重要协议之一。该协议支持多种传输方式,包括TCP/IP协议、SSL加密...

    Oracle中的分析函数详解

    Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据主导地位。其中,Oracle的分析函数是其强大的特性之一,它允许用户在单个SQL查询中执行复杂的分析操作,而无需使用子查询或者自...

    Oracle 体系结构 说明

    【Oracle 体系结构详解】 Oracle数据库的体系结构是其高效管理和优化数据操作的关键。这个复杂的架构设计主要目的是为了有效地管理数据库系统中的稀缺资源,特别是内存,以提高性能并确保数据的完整性和可用性。 1...

Global site tag (gtag.js) - Google Analytics