Oracle数据库体系结构

  • 格式:pdf
  • 大小:529.31 KB
  • 文档页数:23

Oracle数据库体系结构

⼀、oracle数据库体系结构

基本组成:Oracle server:⼀般情况下是⼀个instance和⼀个database组成

⼀般:1个instance只能对应⼀个数据库。

特殊:1个数据库可以有多个instance(RAC)

⼀台服务器上同时可装多套版本的数据库软件,每个数据库软件可建多个数据库,但是每个数据库只对应⼀个instance,也可以理解成每个数据库只有⼀个SID 。

利⽤DBCA建出的每个库都是相对独⽴的,在同⼀服务器上如果创建多库必须将环境变量的参数⽂件做区分,并且在对实例切换时需如下操作:connect ⽤户名/密码@实例的服务名

1.1 oracle服务器和实例

1.1.1实例

由内存区和后台进程组成

①内存区:数据库⾼速缓存、重做⽇志缓存、共享池、流池以及其它可选内存区(如Java池),这些池也称为数据库的内存结构

②后台进程:包括系统监控进程(SMON)、进程监控(PMON)、数据库写进程(DBWR)、⽇志写进程(LGWR)、检验点进程(CKPT)、其它进程(SMON,如归档进程、RECO进程等)

③注:要访问数据库必须先启动实例,实例启动时先分配内存区,然后再启动后台进程,后台进程执⾏库数据的输⼊、输出以及监控其它Oracle进程。在数据库启动过程中有五个进程是必须启动的,它们是系统监控进程(SMON)、进程监控(PMON)、数据库写进程(DBWR)、⽇志写进程(LGWR)、检验点进程(CKPT),否则实例⽆法创建。

1.1.2服务器

Oracle服务器由数据库实例和数据⽂件组成,也就是我们常说的数据库管理系统。数据库服务器除了维护实例和数据库⽂件之外,还在⽤户建⽴与服务器的连接时启动服务器进程并分配PGA

1.2 oracle数据库逻辑结构

表空间:据库的基本逻辑结构,是⼀系列数据⽂件的集合;

段:不同类型数据在数据库中占⽤的空间,有许多区组合⽽成;

区:由连续的块组成,⽬的是为数据⼀次性预留⼀个较⼤的空间,oracle为存储空间进⾏分配回收都是以区为单位的;

块:最⼩的存储单位,在创建数据库时指定,不能修改。⼤⼩是操作系统块得整数倍。

1.3 oracle数据库物理结构

1.3.1 数据⽂件

数据库中的实际数据

查看数据⽂件:

⾸先格式化⼀下:col file_name for a58;select file_name,tablespace_name from dba_data_files;

1.3.2 控制⽂件

维护数据库和验证数据库完整性

查看数据⽂件:

⾸先格式化⼀下:col name format a60;select name from v$controlfile;

1.3.3 重做⽇志⽂件

数据库发⽣变化的记录,⽤于数据恢复

查看数据⽂件:select member from v$logfile;

1.3.4 参数⽂件

参数⽂件定义了数据库实例的特性。在参数⽂件中包含为SGA中内存结构分配空间的参数

如分配数据库⾼速缓冲区的⼤⼩等,参数⽂件是正⽂⽂件,可以使⽤操作系统⽂本编辑器查看,如在Windows 操作系统中使⽤记事本⼯具。

查看参数⽂件:

⾸先格式化:col name for a30;col value for a30;

select name,value,ismodified from v$parameter;

1.3.5 密码⽂件

密码⽂件授予⽤户启动和关闭数据库实例,在刚安装数据库时,Oracle 的默认⽤户名和密码就存储在密码⽂件中,Oracle 可以借此判断⽤户的操作权限。

1.3.6 归档⽇志⽂件

归档⽇志⽂件是⽇志⽂件的脱机备份,在发⽣故障后进⾏数据恢复时可能使⽤该⽂件

⼆、数据连接与会话

2.1 数据库连接

⽤户进程与数据库服务器之间通信,⼀个连接可以有多个对话。三种连接:

2.1.1 基于主机的⽅式

2.1.2 基于客户机-服务器

2.1.3 客户-应⽤服务器-数据库服务器

2.2 会话

三、oracle数据库内存结构

Oracle的内存结构由两部分组成:SGA与PGA

①PGA 称为程序全局区,程序全局区不是实例的⼀部分,当服务器进程启动时,才分配PGA。②SGA 称为系统全局区,它是数据库实例的⼀部分,当数据库实例启动时,会⾸先分配系统全局区。

在系统全局区中包含:数据库⾼速缓存(Database buffer cache)、重做⽇志缓存(Redo log buffer cache)、共享池(Shared pool)、⼤池(Large pool)和Java 池(Java pool)

3.1 共享池(Shared pool)

3.1.1 共享池的作⽤

Oracle 引⼊共享池的⽬的就是共享SQL 或PL/ SQL 代码,即把解析得到的SQL 代码的结果在这⾥缓存

3.1.2 共享池组成

共享池由两部分组成,即库⾼速缓存(Libray cache)和数据字典⾼速缓存(Data dict cache),①库⾼速缓存库⾼速缓存存储了最近使⽤过的SQL 和PL/ SQL 语句。

②数据字典⾼速缓存是与数据字典相关的⼀段缓冲区。在数据字典⾼速缓冲区中存储了数据⽂件、表、索引、列、⽤户、权限信息和其它⼀些数据库对象的定义。3.1.3设置共享池的⼤⼩

SQL> alter system set shared_ pool_ size = 16M;

3.1.4查看共享池的⼤⼩

SQL> show parameter shared_ pool_ size;

3.2 数据库⾼速缓存区(Database buffer cache)

3.2.1 概念

存储了最近从数据⽂件读⼊的数据块信息或⽤户更改后需要写回数据库的数据信息,此时这些没有提交给数据库的更改后的数据称为脏数据。

当⽤户执⾏查询语句如select* from dept 时,如果⽤户查询的数据块在数据库⾼速缓存中,Oracle 就不必从磁盘读取,⽽是直接从数据库⾼速缓存中读取

3.2.2查询数据库块的⼤⼩

SQL> show parameter db_ block_ size;

3.2.3查询数据库⾼速缓存的⼤⼩

SQL> show parameter db_ cache_ size;

因为在Oracle 11g 中,SGA 为数据库服务器⾃动管理,所以该参数值为0

3.2.4查询数据库⾼速缓存的⼤⼩

SQL> show sga;

3.2.5设置数据库⾼速缓冲区⼤⼩

SQL> alter system set db_ cache_ size = 200M;

3.2.6查看数据库⾼速缓存顾问状态

SQL> show parameter db_ cache_ advice;

3.2.7查看与设置数据库⾼速缓冲区相关的信息

SQL> col id for 99 SQL> SELECT id, name, block_ size, size_ for_ estimate, buffers_ for_ estimate 2 from v$ db_ cache_ advice;

3.3 重做⽇志⾼速缓存区(Redo Log buffer cache)

3.3.1 概念

当⽤户执⾏了如INSERT、UPDATE、DELETE、CREATE、ALTER 或DROP 操作后,数据发⽣了变化,这些变化了的数据在写⼊数据库⾼速缓存之前会先写⼊重做⽇志缓冲区,同时变化之前的数据也放⼊重做⽇志⾼速缓存,这样在数据恢复时Oracle 就知道哪些需要前滚哪些需要后滚了。

3.3.2查看重做⽇志缓存区

SQL> show parameter log_ buffer;

重做⽇志缓存区参数log_ buffer 是静态参数,不能动态修改

3.4 ⼤池

⼤池是SGA 的⼀段可选内存区,只在共享服务器环境中配置⼤池。

在共享服务器环境下,Oracle 在共享池中分配额外的空间⽤于存储⽤户进程和服务器进程之间的会话信息,但是⽤户进程区域UGA(可理解为PGA 在共享服务器中的另⼀个称呼)的⼤部分将在⼤池中分配,这样就减轻了共享池的负担

3.4.1查看⼤池⼤⼩

SQL> show parameter large_ pool_ size3.4.2 修改⼤池⼤⼩

SQL> alter system set large_ pool_ size = 48M

3.5 java池

Java 池也是可选的⼀段内存区,但是在安装完Java 或者使⽤Java 程序时则必须设置Java 池,它⽤于编译Java 语⾔编写的指令。

3.5.1查看java 池的⼤⼩

SQL> show parameter java_ pool_ size;

值为0 说明在Oracle 11g 中,Java 池⼤⼩由数据库服务器在SGA 中⾃动分配,当然⽤户也可以使⽤alter system 指令修改该参数的值

3.4.2 修改java池⼤⼩

SQL> alter system set java_ pool_ size = 48M

3.6 流池(Streaming pool)

流池也称为流内存,它是Oracle 流专⽤的内存池,流(stream)是Oracle 数据库中的⼀个数据共享,其⼤⼩可以通过参数stream_ pool_size 动态调整。

3.7 PGA和UGA

3.7.1 PGA

PGA(进程全局区)

PGA 中存储了服务器进程或单独的后台进程的数据信息和控制信息。它随着服务器进程的创建⽽被分配内存,随着进程的终⽌⽽释放内存。PGA 与SGA 不同,它不是⼀个共享区域,⽽是服务器进程专有的区域。在专有服务器(与共享服务器相对的概念)配置中包括如下的组件:排序区、会话信息、游标状态、堆栈区

3.7.2 UGA

UGA(⽤户全局区)

在共享服务器模式下有⼀个重要的概念即UGA,它是⽤户的会话状态,这部分内存会话总可以访问,UGA 存储在每个共享服务器都可以访问的SGA 中,这样任何服务器都可以使⽤⽤户会话的数据和其它信息。⽽在专有服务器模式下,⽤户会话状态不需要共享,⽤户进程与服务器进程是⼀⼀对应的关系,所以UGA 总是在PGA 中进⾏分配。

3.7.3 PGA内存管理

从Oracle 9i 开始,Oracle 提⾼了两种办法管理PGA,即⼿动PGA 管理和⾃动PGA 管理。采⽤⼿动管理时,必须告诉Oracle ⼀个特定的进程需要的排序区,允许使⽤多少内存,⽽在⾃动PGA 管理中,则要求⾼速Oracle 在系统范围内可以为PGA 中的特定功能如排序区分配多少内存。

①查询PGA 中排序区的⼤⼩

SQL> show parameter sort_ area_ size;

四、oracle进程

服务器进程和⽤户进程,是⽤户使⽤数据库连接⼯具同数据库服务器建⽴连接时,涉及的两个概念。

4.1 服务器进程

服务器进程犹如⼀个中介,完成⽤户的各种数据服务请求,⽽把数据库服务器返回的数据和结果发给⽤户端。

在专有连接中,⼀个服务器进程对应⼀个⽤户进程,⼆者是⼀⼀对应的关系。

在共享连接中,⼀个服务器进程对应⼏个⽤户进程,此时服务器进程通过OPI(Oracle Program Interface)与数据库服务器通信。

4.2 ⽤户进程