Oracle软件结构

2024-02-14 22:18
文章标签 oracle 软件结构

本文主要是介绍Oracle软件结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Oracle软件结构:Oracle “实例”

 在启动Oracle数据库服务器时,实际上是在服务器的内存中创建一个Oracle实例,然后由这个实例来访问和控制硬盘中的数据库文件
Oracle数据库服务器主要由两个部分组成-----数据库和实例:
 数据库:Oracle用于保存数据的一系列物理结构和逻辑结构
 实例:操作系统中的内存结构和一系列进程所组成。
 
 启动数据库时首先需要在内存中创建它的一个实例,然后由实例加载并打开数据库。当用户连接数据库时,实际上是连到实例中,然后由实例负责与数据库通信,再将处理结果返回给用户。

* 实例的组成:
 实例的内存结构:分为SGA区与PGA区两大部分
 实例的进程结构:包括服务进程与后台进程等

* SGA区的内存结构:实例的主要组成之一
 数据库缓存 数据文件中的数据块复制到缓存快中
 重做日志缓存 缓存重做记录
 共享池 缓存SQL或PL/SQL语句、数据字典
 数据字典缓存
 大型池 数据库备份或恢复操作

* PGA区:不属于实例的内存结构
PGA的内容与结构和数据库的操作模式有关。在专用服务器模式下和共享服务器模式下,PGA有着不同的结构和内存。一般情况下,PGA区都由私有SQL工作区和会话内存区组成。

游标(Cursors):命名的数据库连接资源

* 数据库后台进程:
 DBWR(数据库写进程):
 数据库写进程负责将数据库缓存中的脏缓存快成批写入到数据库文件中。
 将脏缓存快写入数据文件的情况

 LGWR(日志写进程): 一个循环结构
 LGWR进程将缓存数据写入重做日志文件情况:
  用户通过committee语句提交当前事务
  重做日志缓存被写满三分之一
  DBWR进程开始将脏缓存快写入数据文件之前


@ 数据库模式对象
 模式的概念:
 模式是一系列逻辑数据结构或对象的集合,一个模式只能够被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同。
* 表:
 数据库存储NULL值的方式与字段的位置有关。如果NULL值字段位于非NULL值字段中间,将需要使用1字节的空间来存储NULL值字段的长度;如果NULL值字段位于一条记录的末尾,将不需要任何存储空间来存储NULL值。因此,在定义表的时候,应当将可能包含NULL值的字段放在字段列表的末尾,这样可以节省存储空间。

 ROWID:Oracle中的一种数据类型,用于在Oracle内部保存表中每条记录的物理地址。在Oracle内部,是通过使用ROWID来定位所需记录的。在块中存储记录时,Oracle也会将记录的ROWID保存在记录头中。

* 视图:视图的定义语句保存在数据字典视图中
 视图是从一个或多个表或视图中提取出来的数据的一种表现方式。或者可以认为视图就是一个查询语句的结果,只不过是以类似表的形式保存在数据库中。

 视图与基础表不同,它是一个“虚”表,也就是说视图实际上并不是像表一样将其中的数据存储在数据库中,在数据库中只保存视图的定义。在查询视图时,数据库通过视图的定义从相关的基础表中获取数据并返回给用户。

* 索引:
 

关于SGA
SGA (System Global Area)是Oracle Instance的 基本组成部分,在实例启动时分配。是一组包含一个Oracle实例的数据和控制信息的共享内存结构。主要是用于存储数据库信息的内存区,该信息为数据库进程所共享(PGA不能共享的)。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。

SGA几个很重要的特性:
1、SGA的构成——数据和控制信息,我们下面会详细介绍;
2、SGA是共享的,即当有多个用户同时登录了这个实例,SGA中的信息可以被它们同时访问(当涉及到互斥的问题时,由latch和enquence控制);
3、一个SGA只服务于一个实例,也就是说,当一台机器上有多个实例运行时,每个实例都有一个自己的SGA尽管SGA来自于OS的共享内存区,但实例之间不能相互访问对方的SGA区。

它主要包括:
1.数据库高速缓存(the database buffer cache),
2.重演日志缓存(the redo log buffer)
3.共享池(the shared pool)
4.数据字典缓存(the data dictionary cache)以及其它各方面的信息。

1.数据高速缓冲区(Data Buffer Cache)

在数据高速缓冲区中存放着Oracle系统最近使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用访问的数据。如果用户要查的数据不在数据高速缓冲区时,Oracle自动从磁盘中去读取。数据高速缓冲区包括三个类型的区:1) 脏的区(Dirty Buffers):包含有已经改变过并需要写回数据文件的数据块。
2) 自由区(Free Buffers):没有包含任何数据并可以再写入的区,Oracle可以从数据文件读数据块该区。
3) 保留区(Pinned Buffers):此区包含有正在处理的或者明确保留用作将来用的区。

2.Redo Log Buffer Cache缓存对于数据块的所有修改。
主要用于恢复其中的每一项修改记录都被称为redo 条目。利用Redo条目的信息可以重做修改。

3. Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义。
它主要由两个内存结构构成:Library cache和Data dictionary cache
修改共享池的大小:ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;

Libray Cache缓存最近被执行的SQL和PL/SQL的相关信息。实现常用语句的共享,使用LRU算法进行管理,由以下两个结构构成:Shared SQL area、Shared PL/SQL area、Data Dictionary Cache、Data dictionary cache缓存最近被使用的数据库定义。它包括关于数据库文件、表、索引、列、用户、权限以及其它数据库对象的信息。在语法分析阶段,Server Process访问数据字典中的信息以解析对象名和对存取操作进行验证。数据字典信息缓存在内存中有助于缩短响应时间。

4.数据字典缓存(the data dictionary cache)
它包括的信息有:数据库文件,表,索引,列,用户,权限和其他数据对象,在解析间段,服务器进程查看数据字典来决定对象名称和有效的访问的信息,缓存数据字典信息来提高请求反应时间,大小是由共享池的大小来决定的。
 

文章分类:数据库 
概述:PGA区是用户进程连接到数据库并创建对应的会话时,由oracle为服务器进程分配的专用于当前用户会话的内存

         区。这个区时非共享的,不可写的,只有服务器进程本身才能访问。当会话终止时,oracle会自动释放PGA区所

         占的内存。

PGA区可以分为如下几个部分

1.排序区

   1)用于存放排序操作所存放的临时数据,它是影响PGA大小的主要因素。大小由sort_area_size指定。

        sort_area_retained_size的值决定了排序操作结束后排序区保留的大小。

   2)排序过程:假如要排序的数据在排序区中放不下,Oracle就将数据分割成较小的块放到排序去中,然后对

        每一小块进行排序。排序过程中产生的临时数据将先放到临时表空间的临时段中。当每个小块都排序玩之后,

        再将这些排完序的小块合并在一起,产生最终的结果。

2.会话区

   存储会话所具有的权限,角色,性能统计信息。

3.游标状态区

        使用到游标时,oracle会在共享池中为语句分配上下文区,游标实际上是指向该上下文区的指针。通过设置

   open_cursors,可以限制用户能够同时打开的游标数目。

        游标状态区存储了会话中当前使用的各个游标所处的状态。

4.堆栈区

   存储会话区中的绑定变量,会话变量,及sql语句运行时的内存结构等信息。

 

   对专用服务器模式来说,“排序区”和“私有SQL区”在PGA中,对共享服务器模式来说,在SGA区。

这篇关于Oracle软件结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/709710

相关文章

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Oracle登录时忘记用户名或密码该如何解决

《Oracle登录时忘记用户名或密码该如何解决》:本文主要介绍如何在Oracle12c中忘记用户名和密码时找回或重置用户账户信息,文中通过代码介绍的非常详细,对同样遇到这个问题的同学具有一定的参... 目录一、忘记账户:二、忘记密码:三、详细情况情况 1:1.1. 登录到数据库1.2. 查看当前用户信息1.

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

oracle如何连接登陆SYS账号

《oracle如何连接登陆SYS账号》在Navicat12中连接Oracle11g的SYS用户时,如果设置了新密码但连接失败,可能是因为需要以SYSDBA或SYSOPER角色连接,解决方法是确保在连接... 目录oracle连接登陆NmOtMSYS账号工具问题解决SYS用户总结oracle连接登陆SYS账号

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI