oracle从入门到精通--物理存储结构

物理存储结构

逻辑存储结构是为了管理oracle数据为定义的具有逻辑层次关系的抽象概念,而物理存储结构是比较具体和直观,用来描述Oracle数据在磁盘上的物理组成情况。

大致来说,Oracle的数据在逻辑上存储在表空间中,在物理上存储在表空间包含的物理文件(即数据文件)中。

Oracle数据库的物理存储结构有多重文件组成,主要有数据文件、控制文件、重做日志文件、归档日志文件、参数文件、密码文件和警告日志文件等,如下图:

数据文件

数据文件 是用与保存用户应用程序数据和Oracle系统内部数据的文件,它们在操作洗头中就是普通的文件,Oracle咋子创建表空间时就会创建数据文件。Oracle在逻辑上由表空间组成,每个表空间可以包含一个或者多个数据文件,一个数据文件只能隶属于一个表空间。

在创建表空间时,Oracle会创建该表空间的数据文件。在表空间中创建数据对象时,用户无法指定由哪一个数据文件来存储,只能有Oracle系统负责为数据对象选择具体的数据文件,并在其中分配物理存储空间。一个数据对象的数据可以全部存储在一个数据文件中,也可以分布存储在同一个表空间的多个数据文件中。

在读取数据时,Oracle系统首先从数据文件中读取数据,并将数据存储在内存的高速数据缓存区中。如果用户要读取数据库中的某些数据,而请求的数据又不在内存的高速数据缓冲区中,则需要从相应的数据文件中读取数据并存储在缓冲区中。当修改和插入数据时,Oracle不会立即将数据写入数据文件,而是会把这些数据保存在数据缓冲区中,然后由Oracle的后台进程DBWR决定如何将其写入相应的数据文件中。这样的存储方式减少了磁盘的I/O操作,提高了系统的相应性能。

数据文件 的类型有三种,即系统数据文件(SYSTEM01.DBF和SYSAUX01.DBF)撤销数据文件(UNDOTBS01.DBF)用户数据文件(USERS01.DBF、EXAMPLE01.DBF)

(1)系统数据文件用于存储特殊的影虎数据和Oracle系统本身的数据。

  • 用户建立的表名、列名及字段类型等,这些属于用户数据类型范畴,存储在系统表空间所包含的数据文件中。
  • Oracle系统内部的数据字典、系统表中所存储的数据属于Oracle系统的内部数据,也存储在系统表空间所包含的数据文件中。
    (2)撤销数据文件 隶属于撤销表空间。如果修改Oracle数据库中的数据,那么就必须使用撤销段,撤销段用来临时存储修改前的旧数据,通常存储在一个单独的撤销表空间中,这个撤销表空间的数据文件就是撤销数据文件。
    (3)用户数据文件用于存储用户应用系统的数据,这些数据包括与应用系统有关的所有相关信息。

上述没有包含临时表空间的临时数据文件,因为临时数据文件本身特殊,在Oracle 9i以后,Oracle将临时表空间所对应的临时数据文件与一般数据文件分开了,可以在dba_temp_filesv$tempfile数据字典中查询。

控制文件

控制文件是一个二进制文件,它记录了数据库的物理结构,其中主要包括数据库名、数据文件与日志文件的名字与位置、数据库建立日期等信息。控制文件一般在安装Oracle系统时或创建数据库时自动创建,控制文件所存储的路径有服务器参数文件SPFILEORCL.ORACONTROL_FILES参数值来制定。

由于控制文件存储了数据文件、日志文件等相关信息,因此,Oracle实例在启动时必须访问控制文件。如果控制文件正常,实例才能加载并打开数据库;但如果控制文件中记录了错误的信息,或者实例无法找到一个可用的控制文件,则实例无法正常启动。

当Oracle实例在正常启动时,系统首先要访问的是初始化参数文件SPFILE;然后Oracle为系统全局区(SGA)分配内存,这时Oracle实例处于安装状态,并且控制文件处于打开状态:接下来Oracle会自动读出控制文件中的所有数据文件和日志文件的信息,并打开当前数据库中的所有数据文件和所有的日志文件以供用户访问。

每个数据库至少有一个控制文件,一个数据库可以同时有多个控制文件,但是一个控制文件只能属于一个数据库。控制文件内部除了存储数据库名及创建日期、数据文件、日志文件、等相关信息之外,在系统运行过程中,还存储了系统更改号、检查点信息及归档的当前状态等信息。,

Oracle数据库系统出于安全考虑,在安装Oracle数据库或者创建数据库时,系统会自动创建两个或者三个控制文件,每个控制文件记录相同的信息。这样可以确保在数据库运行时,如果某个控制文件损坏,则Oracle将会自动使用另一个控制文件,如果所有控制文件都损坏,则系统无法工作。

当数据库的物理组成更改时,Oracle将自动更改该数据库的控制文件;当数据库中的数据需要恢复时,Oracle也要使用控制文件。

日志文件

日志文件的主要功能是记录对数据所做的修改,对数据库所做的修改几乎都记录在日志文件中。在出现问题时,可以通过日志文件得到原始数据,从而保证不丢失已有操作成果。Oracle的日志文件包括重做日志文件(Redo Log File)归档日志文件(Archive Log File)

重做日志文件

重做日志文件用来记录数据库所有发生过的更改信息(修改、添加、删除等)以及有Oracle内部行为(创建数据库、索引等)而引起的数据库变化信息。在数据库恢复时,可以从该日志文件中读取原始记录。在数据库运行时期间,当用户执行COMMIT(事物提交)命令时,数据库首先将将每笔操作的原始记录写入日志文件中,只有在写入日志文件成功时才会把新的记录传递到应用程序,所以在日志文件上可以随时读取原始记录以恢复某些数据。

  • 对表或者整个表空间设定NOLOGGING属性,可基于表或表空间中的DML操作(如创建表、删除视图、修改索引等)不生产日志信息,从而减少日志信息。
    为了保障数据库系统的安全性,每个Oracle实例都启用一个日志线程来记录数据库的变化。日志线程由若干"日志组"构成,而每个日志组又由一个或多个日志文件构成。
    Oracle系统在运行过程中产生的日志信息,首先被临时存储在系统全局区(SGA)的重做日志缓冲区中,当发出COMMIT命令(或者日志缓冲区信息满1/3)时,日志写入(LGWR)进程将日志信息从重做日志缓冲区中读出,然后将其写入日志文件组中序列号较小的文件里,在一个日志组被写满后接着写入另一个日志组中。在LGWR进程将所有能用的日志文件都使用过一遍之后,它将再次转向第一个日志组重新覆写。

归档日志文件

在所有的日志文件都被写入一遍之后,LGWR进程将再次转向第一个日志组进行重新覆写,这样势必会导致一部分较早的日志信息被覆盖,但Oracle通过归档日志文件解决的这个问题。

Oracle数据库运行在两种模式之下,即归档模式非归档模式非归档模式 指在系统运行期间,所产生的日志信息不断地记录到日志信息组中,当所有重做日志组被写满后,又重新从第一个日志组开始覆写;归档模式 就是在各个日志文件都被写满而即将被覆盖之前,先由归档(ARCH)进程将即将被覆盖的日志文件中的日志信息读出,然后将其写入归档日志文件中,而这个过程又被成为归档操作。

在归档操作进行过程中,LGWR进程需要等待ARCH进程结束才能开始覆写日志文件,这样就延迟了系统的相应时间,而且归档日志文件本身就会占用大量的磁盘空间,这些都会影响系统的整体性能。所以在默认情况下,Oracle系统不采用归档模式运行。

服务器参数文件(SPFILE)

服务器参数文件 ,即SPFILE ,是二进制文件,用来记录Oracle数据库的基本参数信息(如数据库名、控制文件所在路径、日志缓冲大小等)。在数据实例启动前,Oracle系统首先会读取SPFILE中设置的这些参数,并根据这些初始化参数来配置和启动实例。SPFILE在安装Oracle数据库系统时由系统自动创建,文件的名称为SPFILEsid.ora,其中sid就是所创建的数据库实例名。

SPFILE中的参数有Oracle系统自动维护,如果要修改某些参数,尽量不要直接对SPFILE文件进行修改,最好是通过Oracle企业管理器或者alter system命令进行修改。

查看服务器参数

可以通过以下两种方式查看数据库的服务器参数:

(1)可以通过查询视图v$parameter确定参数的默认值是否被修改过,以及是否可以用alter system和alter session命令来修改。

(2)可以使用SQL*Plus的show parameter命令显示服务器的参数。

在oracle中直接运行命令show parameter

修改服务器参数

修改数据库的服务器参数,主要通过OEM或ALTER SYSTEM命令来实现。

(1)通过OEM修改。首先需要使用system用户登录OEM;然后选择"服务器"页面中的"初始化参数"项,在该页面的"值"列中就可以修改参数值,最后保存它。

(2)使用ALTER SYSTEM命令修改服务器参数。

密码文件、警告文件和追踪文件

Oracle系统运行时,除了必要的数据文件、控制文件、日志文件及服务器参数文件外,还需要一些辅助文件,如密码文件、警告文件和追踪文件:

密码文件

密码文件是Oracle系统用于验证sysdba权限的二进制文件,当远程用户以sysdba或sysoper连接到数据库时,一般要用密码文件验证。

Oracle密码文件的默认存储位置在%dbhome_1%\database目录下,命名格式为PWD<sid>,其中sid表示数据库实例名,密码文件既可以在创建数据库实例时自动创建,也可以使用ORAPWD.mp4文件手动创建。创建密码文件的命令格式如下:
C:\>ORAPWD FILE=<filename> PASSWORD=<password> ENTRIES=<max_users>

  • filename:表示密码文件名称。
  • password:表示设置internal/sys账户口令。
  • max_users:表示密码文件中可以存储的最大用户数,对应允许以sysdba/sysoper权限登录数据库的最大用户数。
    创建了密码文件之后,需要设置初始化参数remote_login_passwordfile来控制密码文件的使用状态,通常有以下3种状态值:NONE表示只要通过操作系统验证,就不用通过Oracle密码文件验证;SHARED表示多个数据库实例都可以采用此密码验证;EXCLUSIVE表示只有一个数据库实例可以使用此密码文件验证。

警告文件

警告文件(即警告日志文件) 是一个存储在Oracle系统下的文本文件,它通常用来记录Oracle系统的运行信息和错误信息。运行信息一般包括Oracle实例的启动与关闭、建立表空间、增加数据文件等;错误信息包括空间拓展失败、启动实例失败等。

当Oracle系统安装完毕后,其实例日常运行的基本信息都会记录在警告文件中。警告文件的路径可通过Oracle系统的BACKGROUND_DUMP_DEST参数值来查看,并且该参数值由服务器进程和后台进程写入。

跟踪文件

跟踪文件 包括后台进程跟踪文件和用户进程跟踪文件。后台进程跟踪文件用于记录后台进程的警告或错误信息。后台进程跟踪文件的磁盘位置由初始化参数BACKROUND_DUMP_DEST确定,后台进程跟踪文件的命名格式为<sid>_<processname>_<spid>.trc。用户进程跟踪文件用于记载与用户进程相关的信息,它主要用于追踪SQL语句。通过用户进程跟踪文件,可以判断SQL语句的执行性能。用户进程跟踪文件的位置由初始化参数USER_DUMP_DEST确定,用户进程跟踪文件的命名格式为<sid>_ora_<spid>.trc

除了.trc文件外,还有.trm文件。.trm文件为追踪元数据文件,伴随着.trc文件产生,一个.trm文件对应一个.trc文件,.trm文件包含.trc文件的结构化信息。

相关推荐
岁岁种桃花儿6 小时前
MySQL从入门到精通系列:InnoDB记录存储结构
数据库·mysql
蜜獾云6 小时前
oracle查询所有的表名和注释
oracle
jiunian_cn7 小时前
【Redis】hash数据类型相关指令
数据库·redis·哈希算法
冉冰学姐7 小时前
SSM在线影评网站平台82ap4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm框架·在线影评平台·影片分类
知识分享小能手8 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
爬山算法8 小时前
Hibernate(84)如何在DevOps流程中使用Hibernate?
oracle·hibernate·devops
踩坑小念9 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶10 小时前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok10 小时前
MySQL的常用数据类型
数据库·mysql
曹牧11 小时前
Oracle 表闪回(Flashback Table)
数据库·oracle