§2.7 Oracle内存结构

前面提到过Oracle的数据库实例是一组后台进程和内存结构组成。而内存结构是包括:

系统全局区(System Global Area)

程序全局区(Program Global Area)

§2.7.1 系统全局区

Oracle 系统用于存放系统信息的一块存储区域,用户进程和Oracle后台进程都可以使用SGA。在SGA中含有许多组件(不同的部分)。

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

在数据高速缓冲区中存放着Oracle系统最近使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用访问的数据。如果用户要查的数据不在数据高速缓冲区时,Oracle自动从磁盘中去读取。数据高速缓冲区包括三个类型的区:

1) 脏的区(Dirty Buffers):包含有已经改变过并需要写回数据文件的数据块。

2) 自由区(Free Buffers):没有包含任何数据并可以再写入的区,Oracle可以从数据文件读数据块该区。

3) 保留区(Pinned Buffers):此区包含有正在处理的或者明确保留用作将来用的区。

Oracle8i以后将缓冲池分为三个区(使用多个缓冲池特性时):

1) KEEP 缓冲池(KEEP buffer pool):在内存中保留数据块,它们不会被从内存中挤掉;

2) RECYCLE缓冲池从不需要的内存将数据移掉;

3) DEFAULT缓冲池包含有被分配的块。

重做日志缓冲区(Rado Log Buffer)

任何事务(Transaction)在记录到重做日志(恢复工作需要使用联机重做日志)之前都必须首先放到重做日志缓冲区(Redo Log Buffer)中。然后由日志写入进程(LGWR)定期将此缓冲区的内容写入重做日志中。

共享池(Shared Pool)

共享池是SGA保留的区,用于存储如SQL、PL/SQL存储过程及包、数据字典、锁、字符集信息、安全属性等。共享池包含有:

1) 库高速缓存(Library Cache);

2) 字典高速缓冲区(Dictionary Cache )。

库高速缓存(Library Cache)

该区包含有:

1) 共享SQL区(Shared Pool Area);

2) 私有SQL区(Private SQL Area);

3) PL/SQL存储过程及包(PL/SQL Procedure and Package);

4) 控制结构(Control Structure)。

也就是说该区存放有经过语法分析并且正确的SQL语句,并随时都准备被执行。

字典高速缓冲区(Data Dictionary Cache)

用于存放Oracle系统管理自身需要的所有信息,这些信息是登录到Oracle的用户名,这些用户有那些数据库对象以及这些数据库对象的位置等。

SVRMGR> Show SGA

Total System Global Area 35544188 bytes

Fixed Size 22208 bytes

Variable Size 3376332 bytes

Database Buffer 122880 bytes

Redo Buffer 32768 bytes

后四项相加等于前一项。

也可以使用 select * from v$SGA; 查询当前实例的SGA。

大的池(Large Pool)

在SGA中大池是可选的缓冲区。它可以根据需要有管理权进行配置。它可以提供一个大的区以供象数据库的备份与恢复等操作。

2)程序全局区(PGA)

PGA是Oracle使用的内存区域,该区同一时间只能被一单个进程存放数据和控制,用于存放会话变量及内部数组等。

SGA

Oracle内存结构(SGA图)§2.7.2 程序全局区

PGA是Oracle使用的内存区域,该区同一时间只能被一单个进程存放数据和控制,用于存放会话变量及内部数组等。

§2.8 Oracle实例

一个Oracle 实例(Instance) 是由SGA,后台进程以及数据文件组成,每个数据库有自己的SGA和独立的Oracle进程集。如图所示:

Oracle 实例和后台进程(instance图)

在分布情况下,为使不同的数据库系统的名字不致混淆,Oracle使用了一个SID(System Identifer)来标识每个Oracle Server的名字,在UNIX环境中以变量Oracle_Sid来区分。

§2.9 多线程服务器 (MTS)

Oracle多线程服务器(Multithreader Server )允许对数据库进行多个连接以充分共享内存和资源,这使得可以用较少的内存来支持较多的用户。

连接到Oracle数据库的进程都需要占用一定的内存空间,这样如果有过多的进程连接到Oracle,则出现了一个性能瓶颈。

Oracle8可以允许一万个以上用户同时连接到Oracle,但并不是所有的用户都使用MTS。目前的一些4GL工具并不支持MTS,象VB,PB等不支持MTS,象VC/C++可以支持MTS。 Oracle多线程服务器有自己的连接池(即共享服务器进程)。由于用户共享开放连接,这比原来的专用方法快的多(消除瓶颈)。

多线程对于一些专用的应用系统来说是非常合适的,比如订单登记系统,顾客提交订单,录入员该订单的数据;另外的录入员在与顾客交涉,并不都在录入数据(专用服务器进程闲着)。单这些终端被迫与系统连着,占据了其他用户的资源。

多线程服务器则消除这些缺点。多线程服务器只维护一个连接池,当某个终端需和系统对话则给其分配一个连接即可。不需要则可以去掉。这样系统的资源被多个用户平摊。

改变参数文件中的相关参数来达到使系统成为多线程服务器配置(重新启动即可有效)。另外,数据库实例必须提供用户数目与所放置的一样才行。

§2.10 Oracle事务处理流程

银行取款业务处理流程:

1. 发出查询余款的SQL语句,如:

Select account_balance From banktable

Where account_number='111222333'

And account_type='SAVINGS';

SQL语句通过SGA得到服务器进程;

服务器进程检查共享池中有无该条语句,无该条语句则将放置共享池中并准备运行;

执行SQL语句,把存放有余款的数据块从数据文件中读到SGA的数据高速缓冲区;

显示结果,比如余款为$325。

2. 取款$25:SQL语句为:

Update Bank_table set account_balanct=300

Where account_number='111222333'

And account_type='SAVINGS';

客户进程通过SGA把SQL语句传给服务器进程;

服务器进程查找有无该条语句,有执行(;

分析SQL语句并存入共享池;

执行SQL语句;

要处理的数据在数据高速缓冲区吗?是转7;

从数据文件中读数据块到数据高速缓冲区;

在回滚段中记录原来的数值($325);

在重做日志中生成该事务的一个拷贝;

将数据高速缓冲区中的余额改为$300;

银行柜员机通过SGA发出工作完成信号(提交):

在重做日志中记录已完成事务;

清除回滚段中的恢复信息(Undo Information);

顾客取钱完成。§2.11 ORACLE系统的SYS和SYSTEM模式

SYS和SYSTEM 是每个ORACLE 数据库系统缺省安装的两个帐户。SYS 是所有内部数据库表、结构、过程包、等拥有者,此外它还拥有 V$ 和数据字典视图,并创建所有封装的数据库角色(DBA,CONNECT,RESOURCE)。 Sys是一个唯一能访问特定内部数据字典的用户。 System 也是在安装ORACLE 时创建的用户,用于 DBA 任务的管理。

SYS 安装后的缺省口令为 change_on_install; SYSTEM 缺省口令为 manager。 为了安全,可在安装完成后。 用 ALTER USER sys IDENTIFIED BY password; 命令修改这两个特权帐户的口令。

§2.12 ORACLE系统跟踪文件

所有ORACLE 数据库都至少有一个文件用于记录系统信息,错误及主要事件.这个文件叫做ALERTsid.log(这里的sid 为 oracle 的系统标识),存储位置由INITsid.ORA 文件的 BACKGROUND_DUMP_DEST 参数给出。

后台进程和用户进程都可以建立各自的跟踪文件,后台进程跟踪文件位置由BACKGROUND_DUMP_DEST 参数给出, 而用户跟踪文件位置由 USER_DUMP_DEST 参数给出. 如参数文件 initora8.ora 中给出:

# define directories to store trace and alert files

background_dump_dest=d:/oracle/admin/ora8/bdump

user_dump_dest=d:/oracle/admin/ora8/udump

后台跟踪文件被命名为 sidPROC.TRC

§2.13 ORACLE系统数据字典

数据字典(data dictionary)是存储在数据库中的所有对象信息的知识库,ORACLE数据库系统使用数据字典获取对象信息和安全信息,而用户和DBA用它来查阅数据库信息。数据字典保存数据对象和段的信息。如表、视图、索引、包、过程以及用户、权限、角色、审计等的信息。数据字典是只读对象,不允许任何人对其进行修改。

§2.14 其它数据对象

ORACLE 除前面给出的数据对象外,还有包括视图,序列,同义词,触发器,数据库链及程序包,过程和函数。下面是必要介绍。

§2.14.1 视图

视图是存储在数据库中的查询的SQL 语句,它主要出于两种主要原因:

安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用.

§2.14.2 序列

序列是用于产生唯一数码的数据库对象,序列创建时带有 初始值,增量值,最大值等,最大可达38 位整数。

§2.14.3 触发器

触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由个事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。

§2.14.4 同义词

同义词(synonym)是指向其它数据库表的数据库指针。同义词有两种类型:私有(private)和公共(public)。私有的同义词是在指定的模式中创建并且只创建者使用的模式访问。公共同义词是由public 指定的模式访问,所有数据库模式(用户)都可以访问它。

§2.14.5 数据库链

数据库链( database link )是与远程数据库连接的存储定义, 它们用于查询分布数据库环境的远程者。 由于存储在 DBA_DB_LINKS 数据字典中,所以可以把它们看作一种数据库对象类型。

本文转自: http://oracle.chinaitlab.com/serial/754900_6.html

Oracle的概念和术语 (二)相关推荐

  1. oracle基本概念和术语

    oracle基本概念和术语      ChinaITLab收集整理  2006-3-15  保存本文  推荐给好友  QQ上看本站  收藏本站 ---------------------------- ...

  2. Oracle的概念和术语 (一)

    racle数据库系统是一个复杂的软件系统.如果不了解其内部的结构原理及关系,就不可能设计和编写出高质量的应用软件系统,也不可能管理好一个复杂的应用系统.为了给以后章节的打好基础,本章简要给出 ORAC ...

  3. oracle 基本概念和与informix对照

    oracle 基本概念和与informix对照 一.概念 用户:informix直接使用操作系统的用户管理系统,一般使用root和informix作为超级操作员,对其他用户进行管理.oracle有自己 ...

  4. 第一课:数据结构的基本概念和术语

    数据结构   本课主题:数据结构的基本概念和术语 教学目的:了解数据结构的基本概念,理解常用术语 教学重点:基本概念:数据与数据元素 教学难点:数据元素间的四种结构关系. 授课内容: 一.数据.数据元 ...

  5. 深入解析Windows操作系统笔记——CH1概念和术语

    1.概念和工具 本章主要介绍Windows操作系统的关键概念和术语 1.概念和工具... 1 1.1操作系统版本... 1 1.2基础概念和术语... 2 1.2.1Windows API2 1.2. ...

  6. Oracle Sales Cloud 实施(二)

    Oracle Sales Cloud  实施(二) 从第一个任务列表开始: Review Company Profile(公司的主要信息) 第一个任务:Manage Enterprise HCM In ...

  7. 记录安装oracle的那些事(二)之双系统安装

    今天电脑恢复了前几天的模样,依旧是仅有的win7,胆颤心惊的依然决定用easybcd装. 首先,资源的需要: 1 两个centos的镜像.bin-dvd的,这个是全的,不用在线下载了. 2 easyB ...

  8. Oracle数据库基础入门《二》Oracle内存结构

    Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...

  9. 【数据结构】之基本概念和术语

    1.1数据结构的基本概念 1.1.1 基本概念和术语 1.数据 数据是信息的载体,是描述客观事物属性的数.字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合.数据是计算机程序加工的原料. ...

最新文章

  1. AI 中介上岗,人工智能版《安家》?
  2. 【Java基础】使用带有标签的break,跳出多层循环
  3. 程序员基本功03常见JAVA集合的实现细节
  4. android bilibili搜索框,仿bilibili搜索框效果(三句代码实现)
  5. 线程同步,线程不同步_同步多线程集成测试
  6. 三次握手 四次握手 与socket函数的关系
  7. PAT乙级 1086 就不告诉你 (附测试点1,2排查及用例)
  8. 华为路由器与CISCO路由器在配置上的差别
  9. Vue中过滤器的使用
  10. BZOJ2809:[Apio2012]dispatching——题解
  11. php之sprintf的用法,PHP之sprintf函数用法详解
  12. 开发微信小程序需要服务器吗?
  13. Android:给图片加边框
  14. mongodb类型转换
  15. VUE3 keep-alive页面切换报错:parentComponent.ctx.deactivate is not a function
  16. 基于RFM的用户画像分析
  17. delphi 龙年窗体 恭喜发财
  18. pycharm安装教程-pycharm安装详细步骤(Mac版)
  19. JQuery CDN大全
  20. 《古月ROS探索总结》学习笔记1

热门文章

  1. Vs_Code对c进行debug的时候遇到的一个问题以及解决方案
  2. 草草读罢《苏菲的世界》
  3. k8s--Volum存储方式
  4. Linux系统中-文件名中含汉字,显示乱码
  5. CNVD-2021-30167 用友NC命令执行漏洞复现
  6. 互联网女皇发布年度互联网报告:强调Google机器学习准确性
  7. 操作系统 第一章习题
  8. wordpress在线播放php插件,让WordPress视频播放插件Smartideo支持B站BV号
  9. JavaScript 之封装、继承、多态
  10. AJP:双相情感障碍高遗传风险年轻人结构连接的纵向变化