oracle基础体系

一、 Oracle数据库服务器

数据库在各个行业都会有使用到;其实,我们平时无论是在与客户沟通或者交流中,所说的Oracle数据库是指Oracle数据库服务器(Oracle
Server),它由Oracle实例(Oracle Instance)和Oracle数据库(Oracle Database)组成。
Oracle实例:就是用于与数据库进行交互的一片内存区域和后台进程的集合;实例启动时,系统首先在服务器内存中分配系统全局区(System
Global
Area),构成Oracle内存结构,然后启动必须的常驻内存的操作系统进程,组成Oracle的进程结构,内存结构和进程结构即构成Oracle实例。
Oracle数据库:物理文件的集合,包括数据文件、重做日志文件、控制文件、参数文件、密码文件、归档日志文件、备份文件、告警日志文件、跟踪文件等等;其中数据文件、控制文件、重做日志文件和参数文件是必须的,其他文件可选。
一个实例只能对应/操作一个数据库,一个数据库可以由一个或多个实例操作(比如RAC)。

二、 Oracle实例

Oracle实例就是用于与数据库进行交互的一片内存区域和后台进程的集合,一个单独的数据库可以被多个实例访问,Oracle早期的并行服务器OPS演变到现在普遍使用RAC集群架构。
实例启动时,系统首先在服务器内存中分配系统全局区(System Global
Area),构成Oracle内存结构,然后启动必须的常驻内存的操作系统进程,组成Oracle的进程结构,内存结构和进程结构即构成Oracle实例。实例在操作系统中用ORACLE_SID来标识,在Oracle中用参数实例名(Instance
Name)来标识, 它们两个的值是相同的。下面介绍实例的组成和作用:

1、系统全局区(System Global Area)

系统全局区System Global Area(SGA)是系统分配的共享的内存结构,
当数据库实例启动时,SGA的内存被自动分配;当数据库实例关闭时,SGA内存被回收;SGA可以包含一个数据库实例的数据或控制信息。当多个用户连接到同一个数据库实例时,在实例的SGA中,数据可以被多个用户共享;SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。SGA主要包括:

1)、共享缓冲区(Shared Pool)

共享池(Shared Pool)就是我们常说的SQL共享池,它还包括库缓冲区(Library Cache)和数据字典缓冲区(Data
Dictionary Cache);共享缓冲区大小由参数SHARED_POOL_SIZE设定。
a)、库缓冲区:存储对数据库进行操作的语句信息,包括执行计划及运行数据库的SQL语句的语法分析树,所有用户在第二次运行相同的SQL语句时,可以利用SQL共享池中可用的语法分析信息来加快执行速度;库缓冲区通过最近最少使用(LRU,LeastRecentlyUsed)算法来管理可用空间,当SQL共享池填满时,将从库缓存区中删掉最近最少使用的执行路径和语法分析树,以便为新的条目腾出空间;如果SQL共享池太小,语句将被连续不断地再装入到库缓存区,从而影响操作性能。
b)、数据字典缓冲区(Database Buffer
Cache):数据库对象的信息存储在数据字典表中,这些信息包括用户帐号数据、权限、数据文件名、段名、表结构及表说明等,当数据库需要这些信息(如用户对表是否有读写权限)时,将读取数据字典表且将返回的数据存储在字典缓存区中。数据字典缓冲区使用最近最少使用(LRU,LeastRecentlyUsed)算法来管理,数据字典缓存区的大小由数据库内部管理,如果字典缓存区太小,数据库需要反复查询数据字典表以获取访问数据库所需的信息,这些查询由循环调用(recuesivecall)事件完成。

2)、数据库缓冲区(Database Buffer Cache)

数据库缓冲区由DB_CACHE_SIZE参数设定,Oracle使用最近最少使用(LRU,LeastRecentlyUsed)算法来管理数据库缓冲区可用空间;当存储区需要空闲空间时,最近最少使用块将被移出,新数据块将在存储区代替它的位置,通过这种方法,将最频繁使用的数据保存在存储区中;如果SGA的大小不足以容纳所有最常使用的数据,那么,不同的对象将争用数据库缓存区中的空间;当多个应用程序共享同一个SGA时,很有可能发生这种情况。此时,每个应用的最近使用段都将与其他应用的最近使用段争夺SGA中的空间,这样,数据库缓冲区的数据请求将出现较低的命中率,导致系统性能下降。

3)、重做日志缓冲区(Redo Log Buffer Cache)

Redo
log包含所有的数据库变化历史,数据库的所有操作变化,均按照写入重做日志缓冲区先于数据块缓冲区、写入重做日志文件先于写入数据文件;当发生提交动作时,将重做日志缓冲区变化刷到重做日志文件。在被写入联机重做日志文件之前,事务首先被记录在称作重做日志缓冲区(Redo
Log
Buffer)的SGA中,数据库可以周期地分批向联机重做日志文件中写重做项的内容,从而优化这个操作。重做日志缓冲区的大小(以字节为单位)由LOG_BUFFER参数决定。
4)、大池(Large Pool)

大池属于一个可选内存区,如果数据库使用线程服务器选项或频繁执行备份、恢复操作,只要创建一个大池,就可以更有效地管理这些操作。大池将致力于支持大型SQL命令,利用大池,就可以防止这些大型SQL命令争用SQL共享池,从而减少再装入到库缓存区中的语句数量。大池的大小(以字节为单位)由LARGE_POOL_SIZE参数设置,可以使用LARGE_POOL_MIN_ALLOC参数设置大池的最小分配,可以使用SHARED_POOL_RESERVED_SIZE参数为SQL大型语句保留一部分SQL共享池。

5)、Java池(Java Pool)

Java池为Java命令提供语法分析,Java池的大小(以字节为单位)由JAVA_POOL_SIZE参数设置,缺省值为10MB。

6)、多缓冲池

可以在SGA中创建多个缓冲池,能够用多个缓冲池把大数据集与其他的应用程序分开,以减少数据库缓存区内相同资源争用;对于创建的每一个缓冲池,都要设定LRU锁存器的大小和数量,缓冲区的数量必须至少比LRU锁存器的数量多50倍。创建缓冲池时,需要设定保存区(KeepArea)的大小和再循环区(RecycleArea)的大小,与SQL共享池的保留区一样,保存区保持条目,而再循环区则被频繁地再循环使用。使用BUFFER_POOL_KEEP参数规定来保存区的大小。

2、后台进程(Background Process)

数据库实例由内存结构和后台进程,应用与数据库的所有操作和交互都由数据库实例中完成,SGA可以理解为交互平台,后台进程则可以理解为SGA与数据库交互的桥梁。PMON、SMON、DBWRn、LGWRn、CKPT进程为必须的后台进程,ARCHn、LCKn等为可选后台进程。

1)、PMON (Process Monitor,进程监控进程)

PMON用于在用户进程出现故障时进行恢复,清除失效的用户进程,负责清理内存区域和释放该进程所使用的资源,如果会话不正常终止时,PMON负责Rollback未提交的事务,释放资源;同时监控Oracle所有后台进程(Background
Process)。PMON有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。PMON进程要重置活动事务表的状态,释放锁,将该故障的进程的ID从活动进程表中移去。PMON还周期地检查调度进程(DISPATCHER)和服务器进程的状态,如果已死,则重新启动(不包括有意删除的进程)。

2)、SMON(System Monitor Process,系统监控进程)

SMON进程在实例启动时,如果有需要则执行实例恢复,在实例恢复过程中,如果由于文件读取错误或所需文件处于脱机状态而导致某些异常终止的事务未被恢复,SMON
将在表空间或文件恢复联机状态后再次恢复这些事务。SMON还负责清理不再使用的临时段(temporary
segment)以及为数据字典管理的表空间(dictionary managed
tablespace)合并相邻的可用数据扩展(extent)。在具有并行服务器选项的环境下(RAC),SMON对有故障CPU或实例进行实例恢复(Instance
Recovery)。SMON进程有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。

3)、DBWn (database writer,数据库写入进程)

DBWn进程是负责缓冲存储区管理的一个Oracle后台进程,通过使用最近最少使用(LRU,LeastRecentlyUsed)算法来管理,保持内存中的数据块是最近使用的,使I/O最小,将dirty
buffer写入到datafile中,维护数据缓冲区的清理,以使用户进程总能找到足够的空闲缓冲区。DBWn进程用于将数据缓冲的数据写入数据文件,是负责数据缓冲区管理的一个Background
Process,默认数量1个,最多10个,由参数为db_writer_processes设置。DBWn进程在以下情况触发:
a)、没有空闲缓冲区(no free buffers) b)、达到脏缓冲区阀值(dirty buffer threshold
reached) c)、检查点(checkpoint) d)、表空间offline(tablespace offline)
e)、超时,每次3秒(time out) f)、drop/truncate表(drop table/truncate table)

4)、LGWR(Log writer,日志写入进程)

LGWR进程将日志缓冲区写入磁盘上的一个日志文件,它是负责管理日志缓冲区的一个Oracle后台进程。LGWR进程同步地写入到活动的镜象在线日志文件组。如果组中一个文件被删除或不可用,LGWR可继续地写入该组的其它文件。日志缓冲区是一个循环缓冲区,当LGWR将日志缓冲区的日志项写入日志文件后,服务器进程可将新的日志项写入到该日志缓冲区。LGWR
通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。
Oracle使用快速提交机制,当用户发出Commit语句时,一个Commit记录立即放入日志缓冲区,但相应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入数据文件。当一事务提交时,被赋给一个系统修改号(SCN),它同事务日志项一起记录在日志中。由于SCN记录在日志中,以致在并行服务器选项配置情况下,恢复操作可以同步。有时候当需要更多的日志缓冲区时,LWGR在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。LGWR进程管理日志缓冲区,将数据库的更改写入日志文件,以便维护数据的一致性,并为数据丢失后进行恢复提供依据。Oracle通过延迟写日志来优化disk
I/O读写,以下4种情况之一Oracle会触发LGWR进程写日志: a)、当用户进程提交一事务时写入一个提交记录。
b)、每三秒将日志缓冲区输出。 c)、当日志缓冲区的1/3已满时将日志缓冲区输出。
d)、当DBWR将修改缓冲区写入磁盘时则将日志缓冲区输出。

5)、CKPT (CheckPoint,检查点进程)

CKPT进程负责通知DBWRn和LGWRn将脏缓冲区写入磁盘,以及时消除因DBWRn/LGWRn延迟写所造成的数据不一致情况,确保内存中的数据块被规律地写入文件,并对数据库数据库控制文件和数据文件进行更新同步(修改文件时间头部),以记录下当前的数据库结构和状态。检查点(CheckPoint)的作用是及时保证进行延迟写,防止数据库出现不一致情况;及时同步各类数据文件,防止各类数据文件出现不一致情况。LGWR后台进程是将log
buffer中的数据写到日志文件的进程,是oracle相当重要的一个后台进程,LGWR进程触发的条件为以下4种情况之一:
a)、每3秒钟;也就是该进程最多休眠3秒钟,休眠时触发rdbms ipc message事件;
LGWR将buffer中的数据写到日志文件时,触发log file parallel write事件;
b)、在事务提交时(COMMIT),此时会触发LGWR进程写完后才返回提交成功,在等待LGWR进程写的过程中将触发log file
sync事件; c)、DBWn进程写入数据文件之前; d)、Redo log
Buffer三分之一满时,这个数字是有一个隐含参数_log_io_size控制,该值的默认值是log
buffer大小的1/3;该值的最大值为3MB,所以Redo log buffer多于1MB的变化记录时也会触发LGWR进程写;
由于Oracle中LGWR和DBWR工作的不一致,Oracle引入了检查点的概念,用于同步数据库,保证数据库的一致性。在Oracle里面,检查点分为两种:完全检查点和增量检查点。下面我们分别介绍这两种检查点的作用:
a)、完全检查点
在Oracle8i之前,数据库的发生的检查点都是完全检查点,完全检查点会将数据缓冲区里面所有的脏数据块写入相应的数据文件中,并且同步数据文件头和控制文件,保证数据库的一致。完全检查点在8i之后只有在下列两种情况下才会发生:
1)、DBA手工执行alter system checkpoint的命令;
2)、数据库正常shutdown(immediate,transcational,normal)。
由于完全检查点会将所有的脏数据库块写入,巨大的IO往往会影响到数据库的性能。因此Oracle从8i开始引入了增量检查点的概念。 b)、
增量检查点
Oracle从8i开始引入了检查点队列这么一种概念,用于记录数据库里面当前所有的脏数据块的信息,DBWR根据这个队列而将脏数据块写入到数据文件中。检查点队列按时间先后记录着数据库里面脏数据块的信息,里面的条目包含RBA(Redo
Block
Address,重做日志里面用于标识检查点期间数据块在重做日志里面第一次发生更改的编号)和数据块的数据文件号和块号。在检查点期间不论数据块更改几次,它在检查点队列里面的位置始终保持不变,检查点队列也只会记录它最早的RBA,从而保证最早更改的数据块能够尽快写入。当DBWR将检查点队列里面的脏数据块写入到数据文件后,检查点的位置也要相应地往后移,CKPT每三秒会在控制文件中记录检查点的位置,以表示Instance
Recovery时开始恢复的日志条目,这个概念称为检查点的“心跳”(heartbeat)。检查点位置发生变更后,Oracle里面通过4个参数用于控制检查点位置和最后的重做日志条目之间的距离。在这里面需要指出的是,多数人会将这4个参数看作控制增量检查点发生的时间。事实上这是错误的,这4个参数是用于控制检查点队列里面的条目数量,而不是控制检查点的发生。

6)、ARCH(archiver,归档进程)

ARCH进程用于管理归档日志文件,当数据库运行在archivelog模式下时,将循环使用的redo
log文件组在被复写覆盖前进行归档备份到其他指定存储设备,为数据丢失后进行数据恢复。当Redo
Log日志切换时触发ARCH进程进行日志归档。

7)、RECO(Recovery,恢复进程)

RECO进程是在具有分布式选项时所使用的一个进程,自动地解决在分布式事务中的故障,维持在分布式环境中的数据的一致性。主要工作,就是recover那些两阶段提交的但由于网络或其它原因造成状态为prepared
的挂起事务。一个结点RECO后台进程自动地连接到包含有悬而未决的分布式事务的其它数据库中,RECO自动地解决所有的悬而不决的事务。任何相应于已处理的悬而不决的事务的行将从每一个数据库的悬挂事务表中删去。当某些节点反馈yes给事务协调器可以提交时,但事务协调器还未正式发出可以提交的最后指示时,由于网络的原因,这些节点失去了和事务协调节点的联系,此时这些事务就成为了一个in-doubt
distributed
transaction。此时,RECO就负责定期的联系事务协调器,当联系到时,就会提交或者回滚这些事务了。RECO后台进程仅当在允许分布式事务的系统,而且DISTRIBUTED_TRANSACTIONS参数是大于0时会用到该后台进程。

8)、LCKn (lock,锁进程)

LCKn进程是在具有并行服务器选件环境下使用,用于实例间的封锁,可多至10个进程(LCK0,LCK1……,LCK9)。

9)、Dnnn (dispatcher,调度进程)

Dnnn进程允许用户进程共享有限的服务器进程(SERVER PROCESS)。没有调度进程时,每个用户进程需要一个专用服务进

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是杠杆?WeTrade众汇这样举例,大家都明白

杠杆是投资交易者一定要知道的一个金融术语。那么什么是杠杆呢?下面WeTrade众汇就用苹果进行举例,大家就都会明白,原来如此简单。 发挥我们投资者的想象,我们现在要进行一场苹果的买卖,能够赚钱的本质就是高买低卖,所…

二十篇esp3454

jfjjfj from machine import I2C,Pin from ssd1306 import SSD1306_I2C i2c I2C(sdaPin(“Y8”), sclPin(“Y6”)) oled SSD1306_I2C(128, 64, i2c, addr0x3c) oled.text(“Hello World!”, 0, 0) oled.text(“MicroPython”, 0, 20) oled.text(“By 01Studio”, 0, 50) oled…

【在巴厘岛学点印尼语】日常篇

BINTANG BIR 槟棠啤酒 今天不写代码,在巴厘岛休养,顺便聊点印尼语。 印尼语,Bahasa Indonesia,是印度尼西亚的官方语言,也即印尼化的马来语廖内方言,其变种包括 爪哇语(岛民方言) 等…

如何选择适合电商的WordPress主题模板?

选择适合电商的WordPress主题模板时,首先应考虑主题模板是否与WooCommerce兼容。WooCommerce是WordPress中一个强大的电商插件,能够帮助用户实现在线电子商务销售或产品展示。因此,选择一个与WooCommerce高度兼容的主题模板至关重要。 其次&…

5.测试教程 - 进阶篇

文章目录 1.按测试对像划分1.1**界面测试**1.2**可靠性测试**1.3**容错性测试**1.4**文档测试**1.5**兼容性测试**1.6**易用性测试**1.7**安装卸载测试**1.8**安全测试**1.9**性能测试**1.10**内存泄漏测试** 2.按是否查看代码划分2.1黑盒测试(Black-box Testing)2.2白盒测试(W…

部署kubernetes-dashboard改成http免密登录

原始链接地址 https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 修改Service端口 增加80端口,改成http访问 修改前: spec:ports:- port: 443targetPort: 8443selector:k8s-app: kubernetes-dashboard修改后&#xff…

snakemake: 基本语法知识点

Snakemake 使用一种基于 Python 的语法来定义工作流,允许用户编写规则(rules)来指定数据分析流程中的各个步骤。以下是一些基础语法知识点,帮助你理解和使用 Snakemake。 1. 规则(Rules) 规则是 Snakemak…

【ROS源码阅读】

项目需要研读ROS源码,这其中碰到的一些问题记录一下: 源码编译过程 (1) 在ubuntu 18.04 上安装ROS melodic的版本。 (2) 下载源码, ROS源码链接: https://github.com/ros/ros_comm/tree/melodic-devel/ros_comm(3) 编译 例如想…

图像增强预处理对于深度学习训练的提高有帮助吗?

答案:图像增强预处理对于深度学习训练非常有帮助,它可以显著提高模型的性能和泛化能力。 图像增强包括许多技术,可以通过各种方法改进图像数据,使其更适合训练深度学习模型。 可以增加数据集的多样性,减少模型对特定图…

书生浦语全链路开源体系

推荐阅读论文 A Survey Of Large Language Models 书生浦语开源的模型 从模型到应用 书生浦语开源体系 书生万卷开源数据集 除此之外还有OpenDataLab国内数据集下载网站。 预训练框架InterLM-Train 微调框架XTuner 评测工具体系 国内外常见的大语言模型评测基准&#xff1a…

【JS 算法题: 将 json 转换为字符串】

题目简介 其实就是手撕 JSON.stringfy()。 算法实现 输入 原则上来说,输入的是一个 json 对象。但需要考虑到异常情况,即输入了其它类型的数据,比如:12, true, ‘abc’, [‘red’, ‘green’], null, undefined 等。 输出 …

【比较mybatis、lazy、sqltoy、mybatis-flex、easy-query操作数据】操作批量新增、分页查询(三)

orm框架使用性能比较 比较mybatis、lazy、sqltoy、mybatis-flex、easy-query操作数据 环境: idea jdk17 spring boot 3.0.7 mysql 8.0测试条件常规对象 orm 框架是否支持xml是否支持 Lambda对比版本mybatis☑️☑️3.5.4sqltoy☑️☑️5.2.98lazy✖️☑️1.2.4…

鸿蒙实战项目开发:【短信服务】

概述 本示例展示了电话服务中发送短信的功能。 样例展示 涉及OpenHarmony技术特性 网络通信 难度级别 中级 基础信息 使用ohos.telephony.sms接口展示了电话服务中发送短信的功能。 效果预览 新建联系人首页短信页 使用说明: 首页点击创建联系人&am…

每日一练:LeeCode-203. 移除链表元素 【链表+虚拟头结点】

每日一练:LeeCode-203. 移除链表元素 【链表虚拟头结点】 思路设置虚拟头结点 本文是力扣 每日一练:LeeCode-203. 移除链表元素 【链表虚拟头结点】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode-20…

自然语言处理(NLP)中NER如何从JSON数据中提取实体词的有效信息

专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9 Python 专栏:http://t.csdnimg.cn/hMwPR Redis 专栏:http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏:http://t.csdni…

Nginx 和Tomcat比较

Nginx和Tomcat是两种不同的技术,它们在应用场景、性能、动态处理能力等方面有所区别: 应用场景 Nginx通常用作静态内容服务器或代理服务器,可以将外部请求转发给其他应用服务器,如Tomcat、Django等。而Tomcat则主要用作应用服…

机器学习-面经(part3)

5. 正则化 5.0 手推L1,L2 5.1 什么是正则化,如何理解 定义: 在损失函数后加上一个正则化项(惩罚项),其实就是常说的结构风险最小化策略,即损失函数 加上正则化。一般模型越复杂,正则化值越大。 正则化项是用来对模型中某些参数进行约束,正则化的一般形式如下: 第一项是…

固件和内核驱动

驱动折腾小记 很多人更新了内核,但是自己的外设依然没有驱动,是因为仅仅更新内核是不够的,还需要更新固件。 什么是固件? 在许多设备能够与操作系统通信之前,它们必须首先使用设备制造商提供的“固件”进行初始化。…

实施工程师常遇技术问题

文章目录 一、对与一个项目,你认为项目的里程碑有哪几个?二、Tomcat服务器与Resin服务器的区别2.1、开发商和许可证:2.2、部署和配置:2.3、功能和扩展性:2.4、社区和生态系统: 三、版本控制工具SVN与Git的区…

升级openssl

openssl版本一键升级(需要修改tar包名称和路径) --- - name: Install OpenSSLhosts: openssltasks:- name: Copy OpenSSL tar.gz to /tmpcopy:src: /root/shl/soft/openssl-1.1.1v.tar.gzdest: /tmp # remote_src: yes # 如果源文件在控制主机上…