Oracle数据库存储结构--物理存储结构

数据库存储结构:分为物理存储结构和逻辑存储结构。

物理存储结构:操作系统层面如何组织和管理数据

逻辑存储结构:Oracle数据库内部数据组织和管理数据,数据库管理系统层面如何组织和管理数据


存储结构

在Oracle数据库的存储结构包括物理存储结构和逻辑存储结构。

物理存储结构:主要用于描述Oracle数据库外部数据的存储,即在操作系统中如何组织和管理数据,与具体的操作系统有关;

逻辑存储结构:主要描述Oracle数据库内部数据的组织和管理方式,与操作系统没有关系。 物理存储结构是逻辑存储结构在物理上的、可见的、可操作的、具体的体现形式。

Oracle的物理存储结构      

物理存储结构是指从物理角度分析数据库的构成,即Oracle数据库创建后所使用的操作系统文件。

Oracle逻辑存储结构    

数据库的逻辑结构是从逻辑的角度分析数据库的构成,即创建数据库后形成的逻辑概念之间的关系。

Oracle数据库物理存储结构          

Oracle 数据库是一个相关操作系统文件的集合,Oracle 用它们来存储相关的信息。物理存储结构是指从物理角度分析Oracle数据库创建后所使用的一系列操作系统文件。

物理存储结构


各种文件的功能:

数据文件:用于存储数据库中的所有数据;

控制文件:用于记录和描述数据库的物理存储结构信息;

重做日志文件:用于记录外部程序(用户)对数据库的改变操作;

归档文件:用于保存已经写满的重做日志文件;

初始化参数文件:用于设置数据库启动时的参数初始值;

跟踪文件:用于记录用户进程、数据库后台进程等的运行情况;

口令文件:用于保存具有SYSDBA,SYSOPER权限的用户名和SYS用户口令;

警告文件:用于记录数据库的重要活动以及发生的错误;

备份文件:用于存放数据库备份所产生的文件。


Oracle物理结构主要包括以下三种文件类型:

数据文件 数据文件的扩展名为.DBF

控制文件 控制文件的扩展名为.CTL

重做日志文件 日志文件的扩展名为.LOG

数据文件

数据文件的内容

用于保存数据库中所有数据的文件,扩展名为DBF。

Oracle数据库中的每个数据文件都具有两个文件号,用于唯一地确定一个数据文件。

绝对文件号:用于在整个数据库范围内唯一标识一个数据文件;

相对文件号:用于在表空间范围内唯一标识一个数据文件。

数据文件与表空间的关系为(n:1)

数据文件的查看    

要了解oracle数据库数据文件的信息,可以通过以下三种方式查询。

操作系统路径中

数据字典表   dba_data_files V$datafile

通过OEM查看

dba_data_files视图字段说明

重做日志文件

重做日志文件的概念

在Oracle中,日志文件也叫做重做日志文件或重演日志文件(Redo Log Files)。

重做日志文件,保存了用户对数据库所作的更新操作(DDL、DML),包含的主要信息是记录事务的开始和结束、事务中每项操作的对象和类型、更新操作前后的数据值等。

如果系统出现的故障,并且修改的数据没有保存到数据文件中,那么就可以利用日志文件找到数据的修改,避免因为故障而丢失数据。

重做日志文件是由重做记录构成的,每个重做记录由一组修改相量组成。

修改向量记录了对数据库中某个数据块所做的修改。

用户对数据库所做的修改记录过程

1. 先记录到重做日志缓冲区 当用户进程发起数据修改请求(如插入、更新、删除操作),服务器进程首先会把该操作的详细信息(像修改的表名、行标识、旧值和新值等)记录到重做日志缓冲区。这么做是为了确保在任何情况下(包括系统故障),对数据库的修改操作都有迹可循,以保证数据的可恢复性和一致性。

2. 并行处理写入日志文件与修改数据高速缓冲区 写入重做日志文件:日志写入进程(LGWR)会将重做日志缓冲区中的内容及时写入重做日志文件。特别是在事务提交时,LGWR 会确保所有与该事务相关的重做日志记录都被写入磁盘上的重做日志文件,这是事务提交的一个关键步骤,因为只有当日志记录安全存储在磁盘上,事务才算真正提交。 修改数据高速缓冲区:在将操作信息记录到重做日志缓冲区后,服务器进程会同时处理数据高速缓冲区。如果相关的数据块已经在数据高速缓冲区中,服务器进程会直接在内存里对这些数据块进行修改;若数据块不在缓冲区,服务器进程会从数据文件中读取相应的数据块到缓冲区,然后进行修改。数据高速缓冲区的作用是减少磁盘 I/O 操作,提高数据访问效率。

3. 日志先行原则(Write - Ahead Logging,WAL) 这里要强调的是日志先行原则,即事务提交前,必须保证重做日志记录已写入重做日志文件,但这并不意味着要等日志写入文件后才开始修改数据高速缓冲区。日志先行主要是为了保证在数据库出现故障时(如实例崩溃),可以依据重做日志文件中的记录将未完成的事务重新执行,确保已提交事务的数据不会丢失。

所以,数据修改时,是先记录到重做日志缓冲区,之后写入重做日志文件和修改数据高速缓冲区的操作是并行进行的。

利用重做日志文件恢复数据库是通过事务的重做(REDO)或回退(UNDO)实现的。

重做:指由于某些原因导致事务对数据库的修改在写入数据文件之前丢失了,此时就可以利用重做日志文件重做该事务对数据库的修改操作。

回退:指如果用户在事务提交之前要撤销事务,Oracle将通过重做记录中的回退信息撤销事务对数据库所做的修改。

为了保证LGWR进程的正常进行,通常采用重做日志文件组(GROUP),每个组中包含若干完全相同的重做日志文件成员(MEMBER),这些成员文件相互镜像。 同时向当前文件组中每个成员文件写信息。

重做日志文件的工作过程

每个数据库至少需要两个重做日志文件组,采用循环写的方式进行工作。当一个重做日志文件组写满后,进程LGWR就会移到下一个日志文件组,称为日志切换,同时信息会写到控制文件中。

重做日志文件组工作流程

日志文件的查看

我们可以通过以下方式查看重做日志文件。

操作系统路径中

数据字典表: V$logfile

通过OEM查看 是否归档模式使用: v$database

 重做日志文件组的状态

CURRENT:当前Oracle数据库正在使用的联机重做日志文件组。

ACTIVE:如果处于这一状态,表示虽然当前并未使用,不过该文件中内容尚未归档,或者文件中的数据没有全部写入数据文件,一旦需要实例恢复,必须借助该文件中保存的内容。 INACTIVE:表示对应的联机重做日志文件中的内容已被妥善处理,该组联机重做日志当前处于空闲状态。

控制文件

控制文件的性质:

控制文件描述了整个数据库的物理结构

控制文件是一个很小的二进制文件

数据控制文件一般在安装Oracle系统时自动创建,并且其存放路径由服务器参数文件SPFILEsid.ora的CONTROL_FILES参数值来确定。

在加载数据库时,实例必须首先通过初始化参数文件找到数据库的控制文件

在数据库运行期间,控制文件始终在不断更新,以便记录数据文件和重做日志文件的变化

每个数据库至少拥有一个控制文件,一个数据库也可以同时拥有多个控制文件

分配在不同的物理硬盘中,以免数据库或硬盘损坏时,能够利用备份的控制文件启动数据库实例,可以提高数据库的可靠性 

控制文件的内容:

数据库名称和标识;

数据库创建的时间;

表空间名称;

数据文件和重做日志文件的名称和位置;

当前重做日志文件序列号;

数据库检查点的信息;

回退段的开始和结束;

重做日志的归档信息;

备份信息;

数据库恢复所需要的同步信息。 

控制文件管理策略

Oracle建议最少有两个控制文件,通过多路镜像技术,将多个控制文件分散到不同的磁盘中。

在数据库运行过程中,始终读取CONTROL_FILES参数指定的第一个控制文件,并同时写CONTROL_FILES参数指定的所有控制文件。如果其中一个控制文件不可用,则必须关闭数据库并进行恢复。

每次对数据库结构进行修改后(添加、修改、删除数据文件、重做日志文件),应该及时备份控制文件。 

控制文件的查看

操作系统路径中

数据字典表:   V$controlfile

通过OEM查看 

 控制文件中的最大化参数包括:

MAXLOGFILES:最大重做日志文件组数量;

MAXLOGMEMBERS:重做日志文件组中最大成员数量;

MAXLOGHISTORY:最大历史重做日志文件数量;

MAXDATAFILES:最大数据文件数量;

MAXINSTANCES:可同时访问的数据库最大实例个数。

初始化参数文件

创建服务器初始化参数文件

服务器初始化参数文件必须根据传统的文本初始化参数文件创建,且创建必须在实例启动之前完成。用户必须具有SYSDBA或SYSOPER权限。

步骤:

创建一个文本初始化参数文件,文件中包含所有参数设置;

连接到Oracle数据库;

利用文本初始化参数文件创建服务器端初始化参数文件。

语法:CREATE SPFILE [='path\filename'] FROM                  

PFILE='path\filename'; 

注意:执行CREATE SPFILE命令时,不需要启动数据库实例!

查看初始化参数设置

参数文件的存储

操作系统路径中Oraclehome下dbs文件夹下。

SHOW PARAMETERS命令    

在SQL*Plus中查看当前数据库实例正在使用的所有参数或某个参数的参数值。 V$PARAMETER或V$PARAMETER2    

通过这两个动态性能视图,可以查看当前数据库实例正在使用的参数的设置情况。

V$SPPARAMETER    

通过该动态性能视图,可以查看包括服务器初始化参数文件中的所有初始化参数的设置情况。 利用企业管理器,查看数据库参数设置

参数文件概述

参数文件的修改 注意:

最好不要直接更改里面的参数,需要更改使用alter system命令或OEM工具。      

例如,修改动态参数JOB_QUERY_PROCESSES,可以根据修改后立即生效、下一次启动数据库实例时生效,以及当前立即生效且下一次数据库实例启动也生效这3种情况进行SCOPE子句的设置。

SQL>ALTER SYSTEM SET JOB_QUERY_PROCESSES=50 SCOPE=MEMORY; SQL>ALTER SYSTEM SET JOB_QUERY_PROCESSES=50 SCOPE=SPFILE; SQL>ALTER SYSTEM SET JOB_QUERY_PROCESSES=50 SCOPE=BOTH; 

修改服务器参数文件中的参数

ALTER SYSTEM SET parameter_name=value

SCOPE=[SPFILE|MEMORY|BOTH]; 

SCOPE 子句

说    明

SCOPE=SPFILE

对参数的修改仅记录在服务器初始化参数文件中,对动态参数和静态参数都适用,修改后的参数在下一次数据库启动时生效

SCOPE=MEMORY

对参数的修改仅记录在内存中只适合动态参数的修改,修改后立即生效。由于修改结果并不会保存到服务器初始化参数文件中,因此下一次启动数据库实例时仍然采用修改前的参数设置

SCOPE=BOTH

对参数的修改同时保存到服务器初始化参数文件和内存中,只适合对动态参数的修改,更改后立即生效,并且下一次启动数据库实例时将使用修改后的参数设置。当执行ALTER SYSTEM语句时,如果没有指定SCOPE子句,那么Oracle默认将SCOPE设置为BOTH

 修改服务器参数文件中的参数

注意:

动态参数是指在数据库运行过程中可以进行修改并能立即生效的参数,

静态参数是指修改后只能在数据库实例下一次启动时才能生效的参数。

如果当前数据库实例使用的是服务器初始化参数文件,那么对静态参数修改时,SCOPE子句只能设置为SPFILE。

如果当前数据库实例使用的是文本初始化参数文件,那么SCOPE子句的设置只能为MEMORY。

导出服务器初始化参数文件

原因

创建服务器初始化参数文件的备份;

为了便于查找系统故障原因等,需要获取当前数据库实例所使用的所有初始化参数值;

为了修改服务器初始化参数文件中参数值,先将服务器初始化参数文件导出为文本初始化参数文件,然后对文本初始化参数文件中的参数进行修改,最后根据修改后的文本初始化参数文件创建新的服务器初始化参数文件。 

语法 CREATE PFILE[='path'] FROM SPFILE [='path']

归档日志文件 

ORACLE数据库可以运行在两种模式下:   归档日志模式(ARCHIVELOG模式) 重做日志写满被覆盖前,启动归档进程(ARCH), 将写满的重做日志先进行备份,写入归档日志文件, 再对被备份的日志擦除开始写新的在线日志文件。   非归档日志模式(NOARCHIVELOG模式)  重做日志写满了的时候,以前在线重做日志从头擦除开始继续写。 Oracle默认系统设置为NOARCHIVELOG模式。 在实际的生产运行环境下,要使用ARCHIVELOG模式。 

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

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

相关文章

歌词相关实现

歌词相关 歌词数据模型&#xff1a; // Lyric.swift class Lyric: BaseModel {/// 是否是精确到字的歌词var isAccurate:Bool false/// 所有的歌词var datum:Array<LyricLine>! }// LyricLine.swift class LyricLine: BaseModel {/// 整行歌词var data:String!/// 开始…

纺织服装制造行业现状 内检实验室系统在纺织服装制造行业的应用

在纺织服装制造行业&#xff0c;内检实验室LIMS系统&#xff08;实验室信息管理系统&#xff09;已成为提升检测效率、优化质量控制和满足行业合规性要求的关键工具。随着行业竞争的加剧和消费者对产品质量要求的提高&#xff0c;纺织服装制造企业需要更加高效、准确的检测流程…

K8s 1.27.1 实战系列(十一)ConfigMap

ConfigMap 是 Kubernetes 中管理非敏感配置的核心资源,通过解耦应用与配置实现灵活性和可维护性。 一、ConfigMap 的核心功能及优势 ​1、配置解耦 将配置文件(如数据库地址、日志级别)与容器镜像分离,支持动态更新而无需重建镜像。 ​2、多形式注入 ​环境变量:将键值…

3分钟复现 Manus 超强开源项目 OpenManus

文章目录 前言什么是 OpenManus构建方式环境准备克隆代码仓库安装依赖配置 LLM API运行 OpenManus 效果演示总结个人简介 前言 近期人工智能领域迎来了一位备受瞩目的新星——Manus。Manus 能够独立执行复杂的现实任务&#xff0c;无需人工干预。由于限制原因大部分人无法体验…

从零开始学机器学习——构建一个推荐web应用

首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns 今天,我们终于将分类器这一章节学习完活了,和回归一样,最后一章节用来构建web应用程序,我们会回顾之前所学的知识点,并新增一个web应用用来让模型和用户交互。所以今天的主题是美食推荐。 美食推荐…

【最后203篇系列】014 AI机器人-1

说明 终于开张了&#xff0c;我觉得AI机器人是一件真正正确&#xff0c;具有商业价值的事。 把AI机器人当成一笔生意&#xff0c;我如何做好这笔生意&#xff1f;一端是业务价值&#xff0c;另一端是技术支撑。如何构造高质量的内容和服务&#xff0c;如何确保技术的广度和深度…

【大模型统一集成项目】如何封装多个大模型 API 调用

&#x1f31f; 在这系列文章中&#xff0c;我们将一起探索如何搭建一个支持大模型集成项目 NexLM 的开发过程&#xff0c;从 架构设计 到 代码实战&#xff0c;逐步搭建一个支持 多种大模型&#xff08;GPT-4、DeepSeek 等&#xff09; 的 一站式大模型集成与管理平台&#xff…

AI4CODE】3 Trae 锤一个贪吃蛇的小游戏

【AI4CODE】目录 【AI4CODE】1 Trae CN 锥安装配置与迁移 【AI4CODE】2 Trae 锤一个 To-Do-List 这次还是采用 HTML/CSS/JAVASCRIPT 技术栈 Trae 锤一个贪吃蛇的小游戏。 1 环境准备 创建一个 Snake 的子文件夹&#xff0c;清除以前的会话记录。 2 开始构建 2.1 输入会…

【简答题002】Java变量简答题

博主会经常补充完善这里面问题的答案。希望可以得到大家的一键三连支持&#xff0c;你的鼓励是我坚持下去的最大动力&#xff01;谢谢&#xff01; 001 什么是Java变量&#xff1f; Java变量是用来存储数据并在程序中引用的命名空间。 002 Java变量有哪些类型&#xff1f; J…

从零开发Chrome广告拦截插件:开发、打包到发布全攻略

从零开发Chrome广告拦截插件&#xff1a;开发、打包到发布全攻略 想打造一个属于自己的Chrome插件&#xff0c;既能拦截烦人的广告&#xff0c;又能优雅地发布到Chrome Web Store&#xff1f;别担心&#xff0c;这篇教程将带你从零开始&#xff0c;动手开发一个功能强大且美观…

基于腾讯云高性能HAI-CPU的跨境电商客服助手全链路解析

跨境电商的背景以及痛点 根据Statista数据&#xff0c;2025年全球跨境电商市场规模预计达6.57万亿美元&#xff0c;年增长率保持在12.5% 。随着平台规则趋严&#xff08;如亚马逊封店潮&#xff09;&#xff0c;更多卖家选择自建独立站&#xff0c;2024年独立站占比已达35%。A…

maven的项目构建

常用构建命令 命令说明mvn clean清理编译结果&#xff08;删掉target目录&#xff09;mvn compile编译核心代码&#xff0c;生成target目录mvn test-compile编译测试代码&#xff0c;生成target目录mvn test执行测试方法mvn package打包&#xff0c;生成jar或war文件mvn insta…

定时任务和分布式任务框架

文章目录 一 Spring Task1.@Scheduled注解介绍2 基本用法(1)使用@EnableScheduling修饰启动类(2)创建定时任务的类(3)fixedDelay(4)fixedRate(5)cron3 执行多个任务4 设置异步执行5 @Async使用自定义线程池6 缺点二 xxl-job介绍架构图与其他任务调度平台的比较运行调…

git安装,配置SSH公钥(查看版本、安装路径,更新版本)git常用指令

目录 一、git下载安装 1、下载git 2、安装Git‌&#xff1a; 二、配置SSH公钥 三、查看安装路径、查看版本、更新版本 四、git常用指令 1、仓库初始化与管理 2、配置 3、工作区与暂存区管理 4、提交 5、分支管理 6、远程仓库管理 7、版本控制 8、其他高级操作 一…

[Web]ServletContext域(Application)

简介 Web应用的Application域的实现是通过ServletContext对象实现的。整个Web应用程序的所有资源共享这个域。生命周期与Web应用程序相同&#xff0c;即当前Web应用程序启动时&#xff08;以服务器视角而非访客视角&#xff09;出生&#xff0c;Web应用服务程序关闭时停止。 通…

qt c++ 进程和线程

在Qt C开发中&#xff0c;进程&#xff08;Process&#xff09;和线程&#xff08;Thread&#xff09;是两种不同的并发模型&#xff0c;各有适用场景和实现方式。以下是详细对比和实际开发中的用法总结&#xff1a; 一、进程&#xff08;Process&#xff09; 进程是操作系统资…

【鸿蒙开发】OpenHarmony调测工具hdc使用教程(设备开发者)

00. 目录 文章目录 00. 目录01. OpenHarmony概述02. hdc简介03. hdc获取04. option相关的命令05. 查询设备列表的命令06. 服务进程相关命令07. 网络相关的命令08. 文件相关的命令09. 应用相关的命令10. 调试相关的命令11. 常见问题12. 附录 01. OpenHarmony概述 OpenHarmony是…

手写简易Tomcat核心实现:深入理解Servlet容器原理

目录 一、Tomcat概况 1. tomcat全局图 2.项目结构概览 二、实现步骤详解 2.1 基础工具包&#xff08;com.qcby.util&#xff09; 2.1.1 ResponseUtil&#xff1a;HTTP响应生成工具 2.1.2 SearchClassUtil&#xff1a;类扫描工具 2.1.3 WebServlet&#xff1a;自定义注解…

【Java开发指南 | 第三十四篇】IDEA没有Java Enterprise——解决方法

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 1、新建Java项目2、单击项目名&#xff0c;并连续按两次shift键3、在搜索栏搜索"添加框架支持"4、勾选Web应用程序5、最终界面6、添加Tomcat 1、新建Java项目 2、单击项目名&#xff0c;并连续按两次…

在MATLAB中实现PID控制仿真

在MATLAB中实现PID控制仿真可以通过代码编程或Simulink图形化建模两种方式完成。以下是两种方法的详细操作步骤和示例&#xff1a; 方法1&#xff1a;使用MATLAB脚本编程&#xff08;基于控制系统工具箱&#xff09; 步骤1&#xff1a;定义被控对象的数学模型 假设被控对象是…