百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

【赵强老师】Oracle数据库的存储结构

mhr18 2024-09-15 21:54 21 浏览 0 评论

Oracle的存储结构分为:物理存储结构和逻辑存储结构。


一、物理存储结构:指硬盘上存在的文件

  • 数据文件(data file)

一个数据库可以由多个数据文件组成的,数据文件是真正存放数据库数据的。一个数据文件就是一个操作系统文件。数据库的对象(表和索引)物理上是被存放在数据文件中的。当我们要查询一个表的数据的时候,如果该表的数据没有在内存中,那么oracle就要读取该表所在的数据文件,然后把数据存放到内存中。通过下面的语句可以查看当前存在的数据文件和对应的表空间:

select file_name,tablespace_name from dba_data_files;

  • 联机日志文件(online redo log file)

一个数据库可以有多个联机日志文件,联机日志文件包含了重做记录(undo records).联机日志文件记录了数据库的改变,例如当一次意外导致对数据的改变没有及时的写到数据文件中,那么oracle就会根据联机日志文件中 的信息获得这些改变,然后把这些改变写到数据文件中.这也是联机日志文件存在的意义.联机日志文件中重做记录的唯一功能就是用来做实例的恢复.比如,一次系统的意外掉电,导致内存中的数据没有被写到数据文件中.那么oralce就会根据联机日志文件中的重做记录功能包数据库恢复到失败前的状态。可以通过下面的语句查看当前存在的日志文件和对应的日志组信息:

select member,group# from v$logfile;

注意:Oracle使用日志组来管理日志文件。默认有三个日志组,每组中至少两个成员。如上图所示。

另外,我们已经知道了什么是数据文件和联机日志文件,通过下面的图解来说明他们之间的关系。

  • 控制文件(control file)

一个数据库至少要有一个控制文件,控制文件中存放的数据库的"物理结构信息",正是因为他存放的是数据库的物理结构信息,所以他就显得尤其的重要.这些物理结构信息就包括:

  1. 数据库的名字。
  2. 数据文件和联机日志文件的名字及位置。
  3. 创建数据库时的时间戳。
  4. RMAN备份的元信息

为了更好的保护数据库,我们可以镜像控制文件.每个控制文件中的内容就是相同的.镜像了控制文件,即使其中的一个控制文件出现了问题,也不会影响到数据库的损坏,数据的丢失. 在启动数据库的时候,oracle就会根据控制文件中的数据文件和联机日志文件的信息来打开数据库.

可以通过下面的语句查看当前存在的控制文件。

select name from v$controlfile;

注意:这里默认有两个控制文件,这种方式叫做“多路复用”。

  • 归档日志文件

是联机日志文件的副本,他记录了对数据库改变的历史。注意:Oracle默认是非归档模式,可以通过下面的语句查看

archive log list;

通过下面的语句,将数据库切换到归档模式。

shutdown immediate
startup mount
alter database archivelog;
alter database open;
  • 参数文件

通常情况下指的就是初始化参数文件(initialization parameter file).参数文件包括了初始化参数文件和服务器端参数文件(server parameter file).在数据库启动的时候就会读取参数文件,然后根据参数文件中的参数来分配SGA并启动一系列的后台进程.参数文件中存放的是数据库和实例的参数.

Oracle的参数文件有两种类型:

  1. Spfile:二进制形式,9i之后
  2. Pfile:文本形式,9i之前

可以通过下面的语句查看当前的参数文件信息:

show parameter spfile

可以使用下面的方式将spfile转换为pfile:

create pfile='/home/oracle/pfile.ora' from spfile;

查看pfile中的参数值:

可以通过下面的语句修改参数的值。

alter system set open_cursors=400 scope=both;
注意:scope的取值有三个:memory、spfile、both
  • 告警日志文件

记录了数据库的重大活动和所发生的错误.警报文件按照时间的先后来记录所发生的重大活动和错误.警报文件的名字的格式是 alert_SID.log。警报文件的位置可以通过查询v$diag_info得到,如下:

select * from v$diag_info;

注意:在12c以前的版本,告警日志的位置可以通过查询参数background_dump_dest得到。

告警日志文件中记录的信息,包括:

  1. 数据库启动和停止的信息
  2. 数据库的结构变化
  3. 强制审计的信息
  4. 死锁的信息
  • 跟踪文件

就是跟踪日志文件,每个服务器进程和后台进程都写跟踪文件.例如当后台进程发生了错误的时候,oracle就会把错误的信息写到跟踪文件中.DBA就可以根据跟踪文件的信息来查看进程中所发生的错误。

跟踪文件的位置跟告警日志文件,在同一个目录下:

select * from v$diag_info;

  • 备份文件

就是在数据库发生介质损坏的时候用来还原(restore)数据库的,恢复(recover)数据的。

二、逻辑存储结构

从逻辑上来看,

  1. 数据库是由一个或者多个表空间等组成。
  2. 一个表空间(tablespace)由一组段组成
  3. 一个段(segment)由一组区组成
  4. 一个区(extent)由一批数据库块组成
  5. 一个数据库块(block)对应一个或多个物理块
  • Database(数据库)

数据库是按照数据结构来组织、存储和管理数据的仓库。

  • Tablespaces(表空间)

表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。表空间(tablespace)是最大的逻辑单位,对应一个或多个数据文件,通常由相关的段组成。表空间的大小是它所对应的数据文件大小的总和。所有的数据库对象都存放在指定的表空间中。但主要存放的对象是表, 所以称作表空间。

必须存在的表空间

  • system
  • sysaux
  • temp
  • undo

可选的表空间:一般指用户创建的用户表空间,比如:users

可以通过下面的语句查看当前数据库的表空间信息:

select tablespace_name from dba_tablespaces;

  • Segments (段)

一个段是分配给一个逻辑结构(一个表、一个索引或其他对象)的一组区,是数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。

  • extents (区)

是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成。第一个段是由一个或多个盘区组成。当一段中间所有空间已完全使用,oracle为该段分配一个新的范围。

  • Data Block (数据块)

是oralce 管理数据文件中存储空间的单位,为数据库使用的I/O的最小单位,最小的逻辑部件,其大小可不同于操作系统的标准I/O块大小。数据块的大小由DB_BLOCK_SIZE参数确定。块尺寸是处理Oracle更新、选择、或者插入数据事务的最小单位。当用户从表中选择数据时,选择操作从数据库文件中以块为单位读取或者提取数据。例如Oracle块的大小为8kb,即使只想检索4kb的字符的名字,也必须读取含有这4个字符的整个8kb的块。

通过下面的语句查看当前数据块设置的大小:

show parameter db_block_size

相关推荐

一文读懂Prometheus架构监控(prometheus监控哪些指标)

介绍Prometheus是一个系统监控和警报工具包。它是用Go编写的,由Soundcloud构建,并于2016年作为继Kubernetes之后的第二个托管项目加入云原生计算基金会(C...

Spring Boot 3.x 新特性详解:从基础到高级实战

1.SpringBoot3.x简介与核心特性1.1SpringBoot3.x新特性概览SpringBoot3.x是建立在SpringFramework6.0基础上的重大版...

「技术分享」猪八戒基于Quartz分布式调度平台实践

点击原文:【技术分享】猪八戒基于Quartz分布式调度平台实践点击关注“八戒技术团队”,阅读更多技术干货1.背景介绍1.1业务场景调度任务是我们日常开发中非常经典的一个场景,我们时常会需要用到一些不...

14. 常用框架与工具(使用的框架)

本章深入解析Go生态中的核心开发框架与工具链,结合性能调优与工程化实践,提供高效开发方案。14.1Web框架(Gin,Echo)14.1.1Gin高性能实践//中间件链优化router:=...

SpringBoot整合MyBatis-Plus:从入门到精通

一、MyBatis-Plus基础介绍1.1MyBatis-Plus核心概念MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提...

Seata源码—5.全局事务的创建与返回处理

大纲1.Seata开启分布式事务的流程总结2.Seata生成全局事务ID的雪花算法源码3.生成xid以及对全局事务会话进行持久化的源码4.全局事务会话数据持久化的实现源码5.SeataServer创...

Java开发200+个学习知识路线-史上最全(框架篇)

1.Spring框架深入SpringIOC容器:BeanFactory与ApplicationContextBean生命周期:实例化、属性填充、初始化、销毁依赖注入方式:构造器注入、Setter注...

OpenResty 入门指南:从基础到动态路由实战

一、引言1.1OpenResty简介OpenResty是一款基于Nginx的高性能Web平台,通过集成Lua脚本和丰富的模块,将Nginx从静态反向代理转变为可动态编程的应用平台...

你还在为 Spring Boot3 分布式锁实现发愁?一文教你轻松搞定!

作为互联网大厂后端开发人员,在项目开发过程中,你有没有遇到过这样的问题:多个服务实例同时访问共享资源,导致数据不一致、业务逻辑混乱?没错,这就是分布式环境下常见的并发问题,而分布式锁就是解决这类问题的...

近2万字详解JAVA NIO2文件操作,过瘾

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。从classpath中读取过文件的人,都知道需要写一些读取流的方法,很是繁琐。最近使用IDEA在打出.这个符号的时候,一行代...

学习MVC之租房网站(十二)-缓存和静态页面

在上一篇<学习MVC之租房网站(十一)-定时任务和云存储>学习了Quartz的使用、发邮件,并将通过UEditor上传的图片保存到云存储。在项目的最后,再学习优化网站性能的一些技术:缓存和...

Linux系统下运行c++程序(linux怎么运行c++文件)

引言为什么要在Linux下写程序?需要更多关于Linux下c++开发的资料请后台私信【架构】获取分享资料包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdf...

2022正确的java学习顺序(文末送java福利)

对于刚学习java的人来说,可能最大的问题是不知道学习方向,每天学了什么第二天就忘了,而课堂的讲解也是很片面的。今天我结合我的学习路线为大家讲解下最基础的学习路线,真心希望能帮到迷茫的小伙伴。(有很多...

一个 3 年 Java 程序员 5 家大厂的面试总结(已拿Offer)

前言15年毕业到现在也近三年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中...最终有幸去了网易。但是要...

多商户商城系统开发全流程解析(多商户商城源码免费下载)

在数字化商业浪潮中,多商户商城系统成为众多企业拓展电商业务的关键选择。这类系统允许众多商家在同一平台销售商品,不仅丰富了商品种类,还为消费者带来更多样的购物体验。不过,开发一个多商户商城系统是个复杂的...

取消回复欢迎 发表评论: